[](const cls_rgw_lc_entry& a, const cls_rgw_lc_entry& b)
{ return a.bucket < b.bucket; });
entries = std::move(ret.entries);
- return r;
+ return r;
}
void cls_rgw_reshard_add(librados::ObjectWriteOperation& op, const cls_rgw_reshard_entry& entry)
formatter->open_array_section("lifecycle_list");
vector<cls_rgw_lc_entry> bucket_lc_map;
string marker;
+ int index{0};
#define MAX_LC_LIST_ENTRIES 100
if (max_entries < 0) {
max_entries = MAX_LC_LIST_ENTRIES;
}
do {
int ret = store->getRados()->list_lc_progress(marker, max_entries,
- bucket_lc_map);
+ bucket_lc_map, index);
if (ret < 0) {
cerr << "ERROR: failed to list objs: " << cpp_strerror(-ret)
<< std::endl;
formatter->dump_string("status", lc_status);
formatter->close_section(); // objs
formatter->flush(cout);
- marker = entry.bucket;
}
} while (!bucket_lc_map.empty());
} while (true);
}
-int RGWLC::list_lc_progress(const string& marker, uint32_t max_entries,
- vector<cls_rgw_lc_entry>& progress_map)
+int RGWLC::list_lc_progress(string& marker, uint32_t max_entries,
+ vector<cls_rgw_lc_entry>& progress_map,
+ int& index)
{
- int index = 0;
- for(; index <max_objs; index++) {
+ progress_map.clear();
+ for(; index < max_objs; index++, marker="") {
+ vector<cls_rgw_lc_entry> entries;
int ret =
cls_rgw_lc_list(store->getRados()->lc_pool_ctx, obj_names[index], marker,
- max_entries, progress_map);
+ max_entries, entries);
if (ret < 0) {
if (ret == -ENOENT) {
ldpp_dout(this, 10) << __func__ << "() ignoring unfound lc object="
return ret;
}
}
+ progress_map.reserve(progress_map.size() + entries.size());
+ progress_map.insert(progress_map.end(), entries.begin(), entries.end());
+
+ /* update index, marker tuple */
+ if (progress_map.size() > 0)
+ marker = progress_map.back().bucket;
+
+ if (progress_map.size() >= max_entries)
+ break;
}
return 0;
}
bool if_already_run_today(time_t start_date);
bool expired_session(time_t started);
time_t thread_stop_at();
- int list_lc_progress(const string& marker, uint32_t max_entries,
- vector<cls_rgw_lc_entry>&);
+ int list_lc_progress(string& marker, uint32_t max_entries,
+ vector<cls_rgw_lc_entry>&, int& index);
int bucket_lc_prepare(int index, LCWorker* worker);
int bucket_lc_process(string& shard_id, LCWorker* worker, time_t stop_at,
bool once);
return gc->process(expired_only);
}
-int RGWRados::list_lc_progress(const string& marker, uint32_t max_entries,
- vector<cls_rgw_lc_entry>& progress_map)
+int RGWRados::list_lc_progress(string& marker, uint32_t max_entries,
+ vector<cls_rgw_lc_entry>& progress_map,
+ int& index)
{
- return lc->list_lc_progress(marker, max_entries, progress_map);
+ return lc->list_lc_progress(marker, max_entries, progress_map, index);
}
int RGWRados::process_lc()
int defer_gc(void *ctx, const RGWBucketInfo& bucket_info, const rgw_obj& obj, optional_yield y);
int process_lc();
- int list_lc_progress(const string& marker, uint32_t max_entries,
- vector<cls_rgw_lc_entry>& progress_map);
-
+ int list_lc_progress(string& marker, uint32_t max_entries,
+ vector<cls_rgw_lc_entry>& progress_map, int& index);
+
int bucket_check_index(RGWBucketInfo& bucket_info,
map<RGWObjCategory, RGWStorageStats> *existing_stats,
map<RGWObjCategory, RGWStorageStats> *calculated_stats);