From d2fcef9b1890e38cfb045111d3e641c47d533ee0 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Thu, 18 May 2017 14:15:54 -0400 Subject: [PATCH] objclass: add cls_cxx_map_remove_range() Fixes: http://tracker.ceph.com/issues/19975 Signed-off-by: Casey Bodley --- src/objclass/class_api.cc | 17 +++++++++++++++++ src/objclass/objclass.h | 4 ++++ 2 files changed, 21 insertions(+) diff --git a/src/objclass/class_api.cc b/src/objclass/class_api.cc index 726193d1bfb..46030cb1b3b 100644 --- a/src/objclass/class_api.cc +++ b/src/objclass/class_api.cc @@ -622,6 +622,23 @@ int cls_cxx_map_remove_key(cls_method_context_t hctx, const string &key) return (*pctx)->pg->do_osd_ops(*pctx, ops); } +int cls_cxx_map_remove_range(cls_method_context_t hctx, + const std::string& key_begin, + const std::string& key_end) +{ + PrimaryLogPG::OpContext **pctx = (PrimaryLogPG::OpContext **)hctx; + vector ops(1); + OSDOp& op = ops[0]; + bufferlist& update_bl = op.indata; + + ::encode(key_begin, update_bl); + ::encode(key_end, update_bl); + + op.op.op = CEPH_OSD_OP_OMAPRMKEYRANGE; + + return (*pctx)->pg->do_osd_ops(*pctx, ops); +} + int cls_cxx_list_watchers(cls_method_context_t hctx, obj_list_watch_response_t *watchers) { diff --git a/src/objclass/objclass.h b/src/objclass/objclass.h index 7ddc6ff36fd..b439a426bf9 100644 --- a/src/objclass/objclass.h +++ b/src/objclass/objclass.h @@ -145,6 +145,10 @@ extern int cls_cxx_map_set_vals(cls_method_context_t hctx, const std::map *map); extern int cls_cxx_map_write_header(cls_method_context_t hctx, ceph::buffer::list *inbl); extern int cls_cxx_map_remove_key(cls_method_context_t hctx, const std::string &key); +/* remove keys in the range [key_begin, key_end) */ +extern int cls_cxx_map_remove_range(cls_method_context_t hctx, + const std::string& key_begin, + const std::string& key_end); extern int cls_cxx_map_update(cls_method_context_t hctx, ceph::buffer::list *inbl); extern int cls_cxx_list_watchers(cls_method_context_t hctx, -- 2.39.5