is_truncated, default_amount);
}
-int rgw_bucket_parse_bucket_instance(const string& bucket_instance, string *target_bucket_instance, int *shard_id)
+int rgw_bucket_parse_bucket_instance(const string& bucket_instance, string *bucket_name, string *bucket_id, int *shard_id)
{
- ssize_t pos = bucket_instance.rfind(':');
- if (pos < 0) {
+ auto pos = bucket_instance.rfind(':');
+ if (pos == string::npos) {
return -EINVAL;
}
string first = bucket_instance.substr(0, pos);
string second = bucket_instance.substr(pos + 1);
- if (first.find(':') == string::npos) {
+ pos = first.find(':');
+
+ if (pos == string::npos) {
*shard_id = -1;
- *target_bucket_instance = bucket_instance;
+ *bucket_name = first;
+ *bucket_id = second;
return 0;
}
- *target_bucket_instance = first;
+ *bucket_name = first.substr(0, pos);
+ *bucket_id = first.substr(pos + 1);
+
string err;
*shard_id = strict_strtol(second.c_str(), 10, &err);
if (!err.empty()) {
class RGWBucketInstanceMetadataHandler;
class RGWUserCtl;
-extern int rgw_bucket_parse_bucket_instance(const string& bucket_instance, string *target_bucket_instance, int *shard_id);
+extern int rgw_bucket_parse_bucket_instance(const string& bucket_instance, string *bucket_name, string *bucket_id, int *shard_id);
extern int rgw_bucket_parse_bucket_key(CephContext *cct, const string& key,
rgw_bucket* bucket, int *shard_id);
string bi = s->info.args.get(RGW_SYS_PARAM_PREFIX "bucket-instance");
if (!bi.empty()) {
- ret = rgw_bucket_parse_bucket_instance(bi, &s->bucket_instance_id, &s->bucket_instance_shard_id);
+ string bucket_name;
+ ret = rgw_bucket_parse_bucket_instance(bi, &bucket_name, &s->bucket_instance_id, &s->bucket_instance_shard_id);
if (ret < 0) {
return ret;
}
op_ret = store->get_bucket_info(*s->sysobj_ctx, src_tenant_name, src_bucket_name, src_bucket_info, NULL, s->yield, &src_attrs);
} else {
/* will only happen in intra region sync where the source and dest bucket is the same */
- op_ret = store->get_bucket_instance_info(*s->sysobj_ctx, s->bucket_instance_id, src_bucket_info, NULL, &src_attrs, s->yield);
+ rgw_bucket b(rgw_bucket_key(src_tenant_name, src_bucket_name, s->bucket_instance_id));
+ op_ret = store->get_bucket_instance_info(*s->sysobj_ctx, b, src_bucket_info, NULL, &src_attrs, s->yield);
}
if (op_ret < 0) {
if (op_ret == -ENOENT) {
}
int shard_id;
- http_ret = rgw_bucket_parse_bucket_instance(bucket_instance, &bucket_instance, &shard_id);
+ string bn;
+ http_ret = rgw_bucket_parse_bucket_instance(bucket_instance, &bn, &bucket_instance, &shard_id);
if (http_ret < 0) {
return;
}
if (!bucket_instance.empty()) {
- http_ret = store->get_bucket_instance_info(*s->sysobj_ctx, bucket_instance, bucket_info, NULL, NULL, s->yield);
+ rgw_bucket b(rgw_bucket_key(tenant_name, bucket_name, bucket_instance));
+ http_ret = store->get_bucket_instance_info(*s->sysobj_ctx, b, bucket_info, NULL, NULL, s->yield);
if (http_ret < 0) {
ldpp_dout(s, 5) << "could not get bucket instance info for bucket instance id=" << bucket_instance << dendl;
return;
}
int shard_id;
- http_ret = rgw_bucket_parse_bucket_instance(bucket_instance, &bucket_instance, &shard_id);
+ string bn;
+ http_ret = rgw_bucket_parse_bucket_instance(bucket_instance, &bn, &bucket_instance, &shard_id);
if (http_ret < 0) {
return;
}
if (!bucket_instance.empty()) {
- http_ret = store->get_bucket_instance_info(*s->sysobj_ctx, bucket_instance, bucket_info, NULL, NULL, s->yield);
+ rgw_bucket b(rgw_bucket_key(tenant_name, bucket_name, bucket_instance));
+ http_ret = store->get_bucket_instance_info(*s->sysobj_ctx, b, bucket_info, NULL, NULL, s->yield);
if (http_ret < 0) {
ldpp_dout(s, 5) << "could not get bucket instance info for bucket instance id=" << bucket_instance << dendl;
return;
}
int shard_id;
- http_ret = rgw_bucket_parse_bucket_instance(bucket_instance, &bucket_instance, &shard_id);
+ string bn;
+ http_ret = rgw_bucket_parse_bucket_instance(bucket_instance, &bn, &bucket_instance, &shard_id);
if (http_ret < 0) {
return;
}
if (!bucket_instance.empty()) {
- http_ret = store->get_bucket_instance_info(*s->sysobj_ctx, bucket_instance, bucket_info, NULL, NULL, s->yield);
+ rgw_bucket b(rgw_bucket_key(tenant_name, bucket_name, bucket_instance));
+ http_ret = store->get_bucket_instance_info(*s->sysobj_ctx, b, bucket_info, NULL, NULL, s->yield);
if (http_ret < 0) {
ldpp_dout(s, 5) << "could not get bucket instance info for bucket instance id=" << bucket_instance << dendl;
return;