rgw_data_sync_status *sync_status;
+ list<RGWCoroutinesStack *> crs;
+
public:
RGWReadDataSyncStatusCoroutine(RGWAsyncRadosProcessor *_async_rados, RGWRados *_store,
RGWObjectCtx& _obj_ctx, const string& _source_zone,
obj_ctx(_obj_ctx), source_zone(_source_zone),
sync_status(_status) {}
+ ~RGWReadDataSyncStatusCoroutine() {
+ for (auto cr : crs) {
+ cr->put();
+ }
+ }
int handle_data(rgw_data_sync_info& data);
};
map<uint32_t, rgw_data_sync_marker>& markers = sync_status->sync_markers;
for (int i = 0; i < (int)data.num_shards; i++) {
- spawn(new RGWSimpleRadosReadCR<rgw_data_sync_marker>(async_rados, store, obj_ctx, store->get_zone_params().log_pool,
- RGWDataSyncStatusManager::shard_obj_name(source_zone, i), &markers[i]), true);
+ RGWCoroutinesStack *cr = spawn(new RGWSimpleRadosReadCR<rgw_data_sync_marker>(async_rados, store, obj_ctx, store->get_zone_params().log_pool,
+ RGWDataSyncStatusManager::shard_obj_name(source_zone, i), &markers[i]), true);
+ crs.push_back(cr);
}
return 0;
}
shard_info(_shard_info) {
}
+ ~RGWReadRemoteDataLogShardInfoCR() {
+ if (http_op) {
+ http_op->put();
+ }
+ }
+
int operate() {
reenter(this) {
yield {
if (ret < 0) {
ldout(store->ctx(), 0) << "ERROR: failed to read from " << p << dendl;
log_error() << "failed to send http operation: " << http_op->to_str() << " ret=" << ret << std::endl;
- http_op->put();
return set_cr_error(ret);
}
pmarker(_pmarker),
entries(_entries),
truncated(_truncated) {
+ if (http_op) {
+ http_op->put();
+ }
}
int operate() {
if (ret < 0) {
ldout(store->ctx(), 0) << "ERROR: failed to read from " << p << dendl;
log_error() << "failed to send http operation: " << http_op->to_str() << " ret=" << ret << std::endl;
- http_op->put();
return set_cr_error(ret);
}