From 4c908442fb6ae574243e1e87900f60922be4214e Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Wed, 7 Mar 2012 17:03:45 -0800 Subject: [PATCH] objclass, cls_rgw: add prefix to omap_get_vals() --- src/cls_rgw.cc | 2 +- src/objclass/class_api.cc | 6 +++++- src/objclass/objclass.h | 3 ++- src/rgw/rgw_cls_api.h | 6 +++++- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/cls_rgw.cc b/src/cls_rgw.cc index b1efc7815df79..cb5716b495e25 100644 --- a/src/cls_rgw.cc +++ b/src/cls_rgw.cc @@ -59,7 +59,7 @@ int rgw_bucket_list(cls_method_context_t hctx, bufferlist *in, bufferlist *out) bufferlist bl; map keys; - rc = cls_cxx_map_read_keys(hctx, op.start_obj, op.num_entries + 1, &keys); + rc = cls_cxx_map_read_keys(hctx, op.start_obj, op.filter_prefix, op.num_entries + 1, &keys); if (rc < 0) return rc; diff --git a/src/objclass/class_api.cc b/src/objclass/class_api.cc index 50d736353092c..861c0006207d4 100644 --- a/src/objclass/class_api.cc +++ b/src/objclass/class_api.cc @@ -251,11 +251,13 @@ int cls_cxx_map_read_all_keys(cls_method_context_t hctx, map int ret; string start_after; + string filter_prefix; uint64_t max = (uint64_t)-1; bufferlist inbl; ::encode(start_after, op.indata); ::encode(max, op.indata); + ::encode(filter_prefix, op.indata); op.op.op = CEPH_OSD_OP_OMAPGETVALS; @@ -272,7 +274,8 @@ int cls_cxx_map_read_all_keys(cls_method_context_t hctx, map return vals->size(); } -int cls_cxx_map_read_keys(cls_method_context_t hctx, string& start_obj, uint64_t max, map* vals) +int cls_cxx_map_read_keys(cls_method_context_t hctx, string& start_obj, + string& filter_prefix, uint64_t max, map* vals) { ReplicatedPG::OpContext **pctx = (ReplicatedPG::OpContext **)hctx; vector ops(1); @@ -284,6 +287,7 @@ int cls_cxx_map_read_keys(cls_method_context_t hctx, string& start_obj, uint64_t ::encode(start_obj, op.indata); ::encode(max, op.indata); + ::encode(filter_prefix, op.indata); op.op.op = CEPH_OSD_OP_OMAPGETVALS; diff --git a/src/objclass/objclass.h b/src/objclass/objclass.h index 3b4fb53f8c93c..6ccfc6282ebfd 100644 --- a/src/objclass/objclass.h +++ b/src/objclass/objclass.h @@ -94,7 +94,8 @@ extern int cls_cxx_write_full(cls_method_context_t hctx, bufferlist *bl); extern int cls_cxx_replace(cls_method_context_t hctx, int ofs, int len, bufferlist *bl); extern int cls_cxx_snap_revert(cls_method_context_t hctx, snapid_t snapid); extern int cls_cxx_map_read_all_keys(cls_method_context_t hctx, std::map *keys); -extern int cls_cxx_map_read_keys(cls_method_context_t hctx, string& start_after, uint64_t max, std::map *keys); +extern int cls_cxx_map_read_keys(cls_method_context_t hctx, string& start_after, string& filter_prefix, + uint64_t max, std::map *keys); extern int cls_cxx_map_read_header(cls_method_context_t hctx, bufferlist *outbl); extern int cls_cxx_map_read_key(cls_method_context_t hctx, string key, bufferlist *outbl); extern int cls_cxx_map_write_key(cls_method_context_t hctx, string key, bufferlist *inbl); diff --git a/src/rgw/rgw_cls_api.h b/src/rgw/rgw_cls_api.h index f19fd9634866f..a66a9da011c0e 100644 --- a/src/rgw/rgw_cls_api.h +++ b/src/rgw/rgw_cls_api.h @@ -259,18 +259,22 @@ struct rgw_cls_list_op { string start_obj; uint32_t num_entries; + string filter_prefix; void encode(bufferlist &bl) const { - __u8 struct_v = 1; + __u8 struct_v = 2; ::encode(struct_v, bl); ::encode(start_obj, bl); ::encode(num_entries, bl); + ::encode(filter_prefix, bl); } void decode(bufferlist::iterator &bl) { __u8 struct_v; ::decode(struct_v, bl); ::decode(start_obj, bl); ::decode(num_entries, bl); + if (struct_v >= 2) + ::decode(filter_prefix, bl); } }; WRITE_CLASS_ENCODER(rgw_cls_list_op) -- 2.39.5