static const string bucket_status_oid_prefix = "bucket.sync-status";
static const string object_status_oid_prefix = "bucket.sync-status";
-// returns a lambda that captures negative error codes into the given int&
-static auto capture_error(int& retcode) {
- return [&retcode] (uint64_t stack_id, int ret) {
- if (ret < 0) {
- retcode = ret;
- }
- return ret;
- };
-}
-
void rgw_datalog_info::decode_json(JSONObj *obj) {
JSONDecoder::decode_json("num_objects", num_shards, obj);
}
yield_spawn_window(rgw::error_repo::write_cr(sync_env->store->svc()->rados, error_repo,
rgw::error_repo::encode_key(bs, each->gen),
timestamp), cct->_conf->rgw_data_sync_spawn_window,
- capture_error(retcode));
- if (retcode < 0) {
- return set_cr_error(retcode);
- }
+ [&](uint64_t stack_id, int ret) {
+ if (ret < 0) {
+ retcode = ret;
+ }
+ return 0;
+ });
}
}
- drain_all_cb(capture_error(retcode));
- if (retcode < 0) {
- return set_cr_error(retcode);
- }
+ drain_all_cb([&](uint64_t stack_id, int ret) {
+ if (ret < 0) {
+ tn->log(10, SSTR("writing to error repo returned error: " << ret));
+ }
+ return ret;
+ });
// once everything succeeds, remove the full sync obligation from the error repo
yield call(rgw::error_repo::remove_cr(sync_env->store->svc()->rados, error_repo,
first_shard = false;
} else {
yield_spawn_window(shard_cr, cct->_conf->rgw_data_sync_spawn_window,
- capture_error(retcode));
+ [&](uint64_t stack_id, int ret) {
+ if (ret < 0) {
+ retcode = ret;
+ }
+ return retcode;
+ });
}
}
}
- drain_all_cb(capture_error(retcode));
+ drain_all_cb([&](uint64_t stack_id, int ret) {
+ if (ret < 0) {
+ retcode = ret;
+ }
+ return retcode;
+ });
}
yield call(marker_tracker->finish(key));
false);
}
drain_with_cb(cct->_conf->rgw_bucket_sync_spawn_window,
- capture_error(sync_result));
+ [&](uint64_t stack_id, int ret) {
+ if (ret < 0) {
+ tn->log(10, "a sync operation returned error");
+ sync_result = ret;
+ }
+ return 0;
+ });
}
} while (list_result.is_truncated && sync_result == 0);
set_status("done iterating over all objects");
/* wait for all operations to complete */
- drain_all_cb(capture_error(sync_result));
-
+ drain_all_cb([&](uint64_t stack_id, int ret) {
+ if (ret < 0) {
+ tn->log(10, "a sync operation returned error");
+ sync_result = ret;
+ }
+ return 0;
+ });
tn->unset_flag(RGW_SNS_FLAG_ACTIVE);
if (lease_cr && !lease_cr->is_locked()) {
tn->log(1, "no lease or lease is lost, abort");
}
// }
drain_with_cb(cct->_conf->rgw_bucket_sync_spawn_window,
- capture_error(sync_status));
+ [&](uint64_t stack_id, int ret) {
+ if (ret < 0) {
+ tn->log(10, "a sync operation returned error");
+ sync_status = ret;
+ }
+ return 0;
+ });
}
} while (!list_result.empty() && sync_status == 0 && !syncstopped);
- drain_all_cb(capture_error(sync_status));
+ drain_all_cb([&](uint64_t stack_id, int ret) {
+ if (ret < 0) {
+ tn->log(10, "a sync operation returned error");
+ sync_status = ret;
+ }
+ return 0;
+ });
tn->unset_flag(RGW_SNS_FLAG_ACTIVE);
if (syncstopped) {