summaryrefslogtreecommitdiff
path: root/src/objclass
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda.sadeh@dreamhost.com>2011-09-21 13:37:04 -0700
committerYehuda Sadeh <yehuda.sadeh@dreamhost.com>2011-09-21 13:37:04 -0700
commitaa666b134260d85a0d0de8011a55472898b34fc4 (patch)
tree8c6973ae0eb56d2b8269db0c130fa0b03bf00f69 /src/objclass
parent2ec5f158fa5120a18d45712e815d914705ca6e10 (diff)
downloadceph-aa666b134260d85a0d0de8011a55472898b34fc4.tar.gz
objclass: add stat operation
Diffstat (limited to 'src/objclass')
-rw-r--r--src/objclass/class_api.cc26
-rw-r--r--src/objclass/objclass.h1
2 files changed, 27 insertions, 0 deletions
diff --git a/src/objclass/class_api.cc b/src/objclass/class_api.cc
index f6a55f9339f..8e7caa33447 100644
--- a/src/objclass/class_api.cc
+++ b/src/objclass/class_api.cc
@@ -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;
diff --git a/src/objclass/objclass.h b/src/objclass/objclass.h
index 05b048d49dc..6d94a4b5694 100644
--- a/src/objclass/objclass.h
+++ b/src/objclass/objclass.h
@@ -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);