bufferlist bl;
map<string, bufferlist> 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;
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;
return vals->size();
}
-int cls_cxx_map_read_keys(cls_method_context_t hctx, string& start_obj, uint64_t max, map<string, bufferlist>* vals)
+int cls_cxx_map_read_keys(cls_method_context_t hctx, string& start_obj,
+ string& filter_prefix, uint64_t max, map<string, bufferlist>* vals)
{
ReplicatedPG::OpContext **pctx = (ReplicatedPG::OpContext **)hctx;
vector<OSDOp> ops(1);
::encode(start_obj, op.indata);
::encode(max, op.indata);
+ ::encode(filter_prefix, op.indata);
op.op.op = CEPH_OSD_OP_OMAPGETVALS;
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<string, bufferlist> *keys);
-extern int cls_cxx_map_read_keys(cls_method_context_t hctx, string& start_after, uint64_t max, std::map<string, bufferlist> *keys);
+extern int cls_cxx_map_read_keys(cls_method_context_t hctx, string& start_after, string& filter_prefix,
+ uint64_t max, std::map<string, bufferlist> *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);
{
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)