]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
objclass: add stat operation
authorYehuda Sadeh <yehuda.sadeh@dreamhost.com>
Wed, 21 Sep 2011 20:37:04 +0000 (13:37 -0700)
committerYehuda Sadeh <yehuda.sadeh@dreamhost.com>
Wed, 21 Sep 2011 20:37:04 +0000 (13:37 -0700)
src/objclass/class_api.cc
src/objclass/objclass.h

index f6a55f9339fce580dcb54bc48d8ee2d5614ad313..8e7caa3344723266afae3dcea7178882684bfbbb 100644 (file)
@@ -162,6 +162,32 @@ int cls_read(cls_method_context_t hctx, int ofs, int len,
   return *outdatalen;
 }
 
+int cls_cxx_stat(cls_method_context_t hctx, uint64_t *size, time_t *mtime)
+{
+  ReplicatedPG::OpContext **pctx = (ReplicatedPG::OpContext **)hctx;
+  vector<OSDOp> ops(1);
+  int ret;
+  bufferlist outbl;
+  ops[0].op.op = CEPH_OSD_OP_STAT;
+  ret = (*pctx)->pg->do_osd_ops(*pctx, ops, outbl);
+  if (ret < 0)
+    return ret;
+  bufferlist::iterator iter = outbl.begin();
+  utime_t ut;
+  uint64_t s;
+  try {
+    ::decode(s, iter);
+    ::decode(ut, iter);
+  } catch (buffer::error& err) {
+    return -EIO;
+  }
+  if (size)
+    *size = s;
+  if (mtime)
+    *mtime = ut.sec();
+  return 0;
+}
+
 int cls_cxx_read(cls_method_context_t hctx, int ofs, int len, bufferlist *outbl)
 {
   ReplicatedPG::OpContext **pctx = (ReplicatedPG::OpContext **)hctx;
index 05b048d49dcc7e88500892a5d6bc521357bb5634..6d94a4b5694ca236b58e3a4c9fc6e13ebf918620 100644 (file)
@@ -87,6 +87,7 @@ typedef int (*cls_method_cxx_call_t)(cls_method_context_t ctx,
 extern int cls_register_cxx_method(cls_handle_t hclass, const char *method, int flags,
                                   cls_method_cxx_call_t class_call, cls_method_handle_t *handle);
 
+extern int cls_cxx_stat(cls_method_context_t hctx, uint64_t *size, time_t *mtime);
 extern int cls_cxx_read(cls_method_context_t hctx, int ofs, int len, bufferlist *bl);
 extern int cls_cxx_write(cls_method_context_t hctx, int ofs, int len, bufferlist *bl);
 extern int cls_cxx_write_full(cls_method_context_t hctx, bufferlist *bl);