]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
cls_version: add cls_version_read(ObjectReadOpeation&)
authorYehuda Sadeh <yehuda@inktank.com>
Fri, 1 Mar 2013 00:08:30 +0000 (16:08 -0800)
committerYehuda Sadeh <yehuda@inktank.com>
Wed, 8 May 2013 17:54:54 +0000 (10:54 -0700)
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
src/cls/version/cls_version_client.cc
src/cls/version/cls_version_client.h
src/test/cls_version/test_cls_version.cc

index b0b81653f1f7d5e669b6263eb0d4b8b85fa36b0a..70d5ebe67695c05c171784ecd616569e8f500720 100644 (file)
@@ -4,6 +4,7 @@
 #include "cls/version/cls_version_ops.h"
 #include "include/rados/librados.hpp"
 
+
 using namespace librados;
 
 
@@ -56,6 +57,30 @@ void cls_version_check(librados::ObjectOperation& op, obj_version& objv, Version
   op.exec("version", "check_conds", in);
 }
 
+class VersionReadCtx : public ObjectOperationCompletion {
+  obj_version *objv;
+public:
+  VersionReadCtx(obj_version *_objv) : objv(_objv) {}
+  void handle_completion(int r, bufferlist& outbl) {
+    if (r >= 0) {
+      cls_version_read_ret ret;
+      try {
+        bufferlist::iterator iter = outbl.begin();
+        ::decode(ret, iter);
+       *objv = ret.objv;
+      } catch (buffer::error& err) {
+        // nothing we can do about it atm
+      }
+    }
+  }
+};
+
+void cls_version_read(librados::ObjectReadOperation& op, obj_version *objv)
+{
+  bufferlist inbl;
+  op.exec("version", "read", inbl, new VersionReadCtx(objv));
+}
+
 int cls_version_read(librados::IoCtx& io_ctx, string& oid, obj_version *ver)
 {
   bufferlist in, out;
index fa2465baff4940579e349a7211867a807fac37bd..d9e09415d526fa9e48803546344b49475ff9e53b 100644 (file)
@@ -16,7 +16,7 @@ void cls_version_inc(librados::ObjectWriteOperation& op);
 /* conditional increase, return -EAGAIN if condition fails */
 void cls_version_inc(librados::ObjectWriteOperation& op, obj_version& ver, VersionCond cond);
 
-int cls_version_read(bufferlist& outbl);
+void cls_version_read(librados::ObjectReadOperation& op, obj_version *objv);
 
 int cls_version_read(librados::IoCtx& io_ctx, string& oid, obj_version *ver);
 
index 5012957f0ae7dd675a2705ab10e6fd29b1f3fd12..6392424644a50e42401e900df986068f0dddfe4d 100644 (file)
@@ -66,6 +66,17 @@ TEST(cls_rgw, test_version_inc_read)
   ASSERT_EQ(0, (int)ver2.tag.compare(ver.tag));
 
   delete op;
+
+  obj_version ver3;
+
+  librados::ObjectReadOperation *rop = new_rop();
+  cls_version_read(*rop, &ver3);
+  bufferlist outbl;
+  ASSERT_EQ(0, ioctx.operate(oid, rop, &outbl));
+  ASSERT_EQ(ver2.ver, ver3.ver);
+  ASSERT_EQ(1, (long long)ver2.compare(&ver3));
+
+  delete op;
 }