}
params.prefix = prefix_iter->first;
do {
+ auto offset = 0;
results.objs.clear();
ret = target->list(this, params, 1000, results, null_yield);
if (ret < 0) {
return ret;
}
- for (auto obj_iter = results.objs.begin(); obj_iter != results.objs.end(); ++obj_iter) {
+ for (auto obj_iter = results.objs.begin(); obj_iter != results.objs.end(); ++obj_iter, ++offset) {
std::tuple<lc_op, rgw_bucket_dir_entry> t1 =
{prefix_iter->second, *obj_iter};
worker->workpool->enqueue(WorkItem{t1});
}
} /* for objs */
+ if ((offset % 100) == 0) {
+ if (worker_should_stop(stop_at, once)) {
+ ldpp_dout(this, 5) << __func__ << " interval budget EXPIRED worker "
+ << worker->ix
+ << dendl;
+ return 0;
+ }
+ }
+
std::this_thread::sleep_for(std::chrono::milliseconds(delay_ms));
} while(results.is_truncated);
} /* for prefix_map */
LCOpRule orule(oenv);
orule.build(); // why can't ctor do it?
rgw_bucket_dir_entry* o{nullptr};
- for (; ol.get_obj(this, &o /* , fetch_barrier */); ol.next()) {
+ for (auto offset = 0; ol.get_obj(this, &o /* , fetch_barrier */); ++offset, ol.next()) {
orule.update();
std::tuple<LCOpRule, rgw_bucket_dir_entry> t1 = {orule, *o};
worker->workpool->enqueue(WorkItem{t1});
+ if ((offset % 100) == 0) {
+ if (worker_should_stop(stop_at, once)) {
+ ldpp_dout(this, 5) << __func__ << " interval budget EXPIRED worker "
+ << worker->ix
+ << dendl;
+ return 0;
+ }
+ }
}
worker->workpool->drain();
}