yield call(new RGWRadosGetOmapKeysCR(store, pool, oid, sync_marker.marker, &entries, max_entries));
if (retcode < 0) {
ldout(store->ctx(), 0) << "ERROR: " << __func__ << "(): RGWRadosGetOmapKeysCR() returned ret=" << retcode << dendl;
+ drain_all();
return set_cr_error(retcode);
}
iter = entries.begin();
// fetch remote and write locally
yield spawn(new RGWDataSyncSingleEntryCR(store, http_manager, async_rados, conn, source_zone, iter->first, iter->first, marker_tracker), false);
if (retcode < 0) {
+ drain_all();
return set_cr_error(retcode);
}
}
yield call(new RGWReadRemoteDataLogShardInfoCR(store, http_manager, async_rados, conn, shard_id, &shard_info));
if (retcode < 0) {
ldout(store->ctx(), 0) << "ERROR: failed to fetch remote data log info: ret=" << retcode << dendl;
+ drain_all();
return set_cr_error(retcode);
}
datalog_marker = shard_info.marker;
} else {
yield spawn(new RGWDataSyncSingleEntryCR(store, http_manager, async_rados, conn, source_zone, log_iter->entry.key, log_iter->log_id, marker_tracker), false);
if (retcode < 0) {
+ drain_all();
return set_cr_error(retcode);
}
}
yield call(new RGWListBucketShardCR(store, http_manager, async_rados, conn, bucket_name, bucket_id, shard_id,
list_marker, &list_result));
if (retcode < 0 && retcode != -ENOENT) {
+ drain_all();
return set_cr_error(retcode);
}
entries_iter = list_result.entries.begin();
yield call(new RGWRadosGetOmapKeysCR(sync_env->store, pool, oid, marker, &entries, max_entries));
if (retcode < 0) {
ldout(sync_env->cct, 0) << "ERROR: " << __func__ << "(): RGWRadosGetOmapKeysCR() returned ret=" << retcode << dendl;
+ yield lease_cr->go_down();
+ drain_all();
return retcode;
}
iter = entries.begin();
// fetch remote and write locally
yield {
RGWCoroutinesStack *stack = spawn(new RGWMetaSyncSingleEntryCR(sync_env, iter->first, iter->first, marker_tracker), false);
- if (retcode < 0) {
- return retcode;
- }
- assert(stack);
stack->get();
stack_to_pos[stack] = iter->first;