cb::list* bl,
ReadOp::Completion c, version_t* objver,
const blkin_trace_info *trace_info) {
+ if (_op.size() == 0) {
+ asio::dispatch(asio::append(std::move(c), bs::error_code{}));
+ return;
+ }
auto oid = reinterpret_cast<const object_t*>(&o.impl);
auto ioc = reinterpret_cast<const IOContextImpl*>(&_ioc.impl);
auto op = reinterpret_cast<OpImpl*>(&_op.impl);
void RADOS::execute_(Object o, IOContext _ioc, WriteOp _op,
WriteOp::Completion c, version_t* objver,
const blkin_trace_info *trace_info) {
+ if (_op.size() == 0) {
+ asio::dispatch(asio::append(std::move(c), bs::error_code{}));
+ return;
+ }
auto oid = reinterpret_cast<const object_t*>(&o.impl);
auto ioc = reinterpret_cast<const IOContextImpl*>(&_ioc.impl);
auto op = reinterpret_cast<OpImpl*>(&_op.impl);
co_await execute(oid, ReadOp{}.get_xattr(key1, &bl));
EXPECT_EQ(val1, bl);
}
+ // Comparisons differing in NUL termination.
const auto notval1 = to_buffer_list("val1"sv);
- co_await expect_error_code(execute(oid, WriteOp{}
- .cmpxattr(key1, neorados::cmp_op::eq, val1)
- .rmxattr(key1)),
- sys::errc::operation_canceled);
co_await expect_error_code(
- execute(oid, WriteOp{} .cmpxattr(key1, neorados::cmp_op::eq, val1)),
+ execute(oid, WriteOp{}
+ .cmpxattr(key1, neorados::cmp_op::eq, notval1)
+ .rmxattr(key1)),
+ sys::errc::operation_canceled);
+ co_await expect_error_code(
+ execute(oid, WriteOp{}.cmpxattr(key1, neorados::cmp_op::eq, notval1)),
sys::errc::operation_canceled);
-
co_return;
}