]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
neorados: `execute` returns success on empty operations
authorAdam Emerson <aemerson@redhat.com>
Fri, 8 Sep 2023 16:48:39 +0000 (12:48 -0400)
committerAdam Emerson <aemerson@redhat.com>
Thu, 14 Sep 2023 21:48:00 +0000 (17:48 -0400)
Signed-off-by: Adam Emerson <aemerson@redhat.com>
src/neorados/RADOS.cc
src/test/neorados/misc.cc

index 2a4989b9f2b20086415050af2b18047035152e36..e372b51a25490e9df632b308ead53da5a998884f 100644 (file)
@@ -944,6 +944,10 @@ void RADOS::execute_(Object o, IOContext _ioc, ReadOp _op,
                     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);
@@ -966,6 +970,10 @@ void RADOS::execute_(Object o, IOContext _ioc, ReadOp _op,
 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);
index d9c007b47e2c140c369c847c068e43c2b68f24f2..2c761bd7c7dcf775f23d336309e24d59da166dd1 100644 (file)
@@ -193,15 +193,16 @@ CORO_TEST_F(NeoRadosMisc, Operate1, NeoRadosTest) {
     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;
 }