return 0;
}
+uint64_t cls_current_version(cls_method_context_t hctx)
+{
+ ReplicatedPG::OpContext *ctx = *(ReplicatedPG::OpContext **)hctx;
+
+ return ctx->at_version.version;
+}
+
+
+int cls_current_subop_num(cls_method_context_t hctx)
+{
+ ReplicatedPG::OpContext *ctx = *(ReplicatedPG::OpContext **)hctx;
+
+ return ctx->current_osd_subop_num;
+}
+
+void cls_cxx_subop_version(cls_method_context_t hctx, string *s)
+{
+ if (!s)
+ return;
+
+ char buf[32];
+ uint64_t ver = cls_current_version(hctx);
+ int subop_num = cls_current_subop_num(hctx);
+ snprintf(buf, sizeof(buf), "%lld.%d", (long long)ver, subop_num);
+
+ *s = buf;
+}
extern int cls_gen_random_bytes(char *buf, int size);
extern int cls_gen_rand_base64(char *dest, int size); /* size should be the required string size + 1 */
+/* environment */
+extern uint64_t cls_current_version(cls_method_context_t hctx);
+extern int cls_current_subop_num(cls_method_context_t hctx);
+
+/* helpers */
+extern void cls_cxx_subop_version(cls_method_context_t hctx, string *s);
+
/* These are also defined in rados.h and librados.h. Keep them in sync! */
#define CEPH_OSD_TMAP_HDR 'h'
#define CEPH_OSD_TMAP_SET 's'