diff options
author | Yehuda Sadeh <yehuda.sadeh@dreamhost.com> | 2011-09-21 13:37:04 -0700 |
---|---|---|
committer | Yehuda Sadeh <yehuda.sadeh@dreamhost.com> | 2011-09-21 13:37:04 -0700 |
commit | aa666b134260d85a0d0de8011a55472898b34fc4 (patch) | |
tree | 8c6973ae0eb56d2b8269db0c130fa0b03bf00f69 /src/objclass | |
parent | 2ec5f158fa5120a18d45712e815d914705ca6e10 (diff) | |
download | ceph-aa666b134260d85a0d0de8011a55472898b34fc4.tar.gz |
objclass: add stat operation
Diffstat (limited to 'src/objclass')
-rw-r--r-- | src/objclass/class_api.cc | 26 | ||||
-rw-r--r-- | src/objclass/objclass.h | 1 |
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); |