};
int rgw_bucket_sync_status(RGWRados *store, const std::string& source_zone,
- const rgw_bucket& bucket,
+ const RGWBucketInfo& bucket_info,
std::vector<rgw_bucket_shard_sync_info> *status)
{
- // read the bucket instance info for num_shards
- RGWObjectCtx ctx(store);
- RGWBucketInfo info;
- int ret = store->get_bucket_instance_info(ctx, bucket, info, nullptr, nullptr);
- if (ret < 0) {
- return ret;
- }
+ const auto num_shards = bucket_info.num_shards;
status->clear();
- status->resize(std::max<size_t>(1, info.num_shards));
+ status->resize(std::max<size_t>(1, num_shards));
RGWDataSyncEnv env;
RGWSyncModuleInstanceRef module; // null sync module
nullptr, nullptr, source_zone, module, nullptr);
RGWCoroutinesManager crs(store->ctx(), store->get_cr_registry());
- return crs.run(new RGWCollectBucketSyncStatusCR(store, &env, info.num_shards,
- bucket, status));
+ return crs.run(new RGWCollectBucketSyncStatusCR(store, &env, num_shards,
+ bucket_info.bucket, status));
}
/// read the sync status of all bucket shards from the given source zone
int rgw_bucket_sync_status(RGWRados *store, const std::string& source_zone,
- const rgw_bucket& bucket,
+ const RGWBucketInfo& bucket_info,
std::vector<rgw_bucket_shard_sync_info> *status);
class RGWDefaultSyncModule : public RGWSyncModule {
return;
}
- http_ret = rgw_bucket_sync_status(store, source_zone, bucket, &status);
+ // read the bucket instance info for num_shards
+ RGWObjectCtx ctx(store);
+ RGWBucketInfo info;
+ http_ret = store->get_bucket_instance_info(ctx, bucket, info, nullptr, nullptr);
+ if (http_ret < 0) {
+ ldout(s->cct, 4) << "failed to read bucket info: " << cpp_strerror(http_ret) << dendl;
+ return;
+ }
+ http_ret = rgw_bucket_sync_status(store, source_zone, info, &status);
}
void RGWOp_BILog_Status::send_response()