}
-int RGWRados::omap_get_all(rgw_obj& obj, bufferlist& header, std::map<string, bufferlist>& m)
+int RGWRados::omap_get_all(rgw_obj& obj, bufferlist& header,
+ std::map<string, bufferlist>& m)
{
+ rgw_rados_ref ref;
+ rgw_bucket bucket;
+ int r = get_obj_ref(obj, &ref, &bucket);
+ if (r < 0) {
+ return r;
+ }
+
+ const int count = 1024; // ?
string start_after;
- return omap_get_vals(obj, header, start_after, (uint64_t)-1, m);
+ while (true) {
+ std::map<string, bufferlist> t;
+ r = ref.ioctx.omap_get_vals(ref.oid, start_after, count, &m);
+ if (r < 0) {
+ return r;
+ }
+ if (t.empty()) {
+ break;
+ }
+ start_after = t.rbegin()->first;
+ m.insert(t.begin(), t.end());
+ }
+ return 0;
}
int RGWRados::omap_set(rgw_obj& obj, std::string& key, bufferlist& bl)