RGWObjectCtx obj_ctx(store);
string tenant_name, bucket_name;
- parse_bucket(entry, tenant_name, bucket_name);
+ parse_bucket(entry, &tenant_name, &bucket_name);
int ret = store->get_bucket_entrypoint_info(obj_ctx, tenant_name, bucket_name, be, &ot, &mtime, &attrs);
if (ret < 0)
return ret;
RGWObjectCtx obj_ctx(store);
string tenant_name, bucket_name;
- parse_bucket(entry, tenant_name, bucket_name);
+ parse_bucket(entry, &tenant_name, &bucket_name);
int ret = store->get_bucket_entrypoint_info(obj_ctx, tenant_name, bucket_name, old_be, &old_ot, &orig_mtime, &attrs);
if (ret < 0 && ret != -ENOENT)
return ret;
RGWObjectCtx obj_ctx(store);
string tenant_name, bucket_name;
- parse_bucket(entry, tenant_name, bucket_name);
+ parse_bucket(entry, &tenant_name, &bucket_name);
int ret = store->get_bucket_entrypoint_info(obj_ctx, tenant_name, bucket_name, be, &objv_tracker, NULL, NULL);
if (ret < 0)
return ret;
rgw_bucket_instance_oid_to_key(key);
string tenant_name;
string bucket_name;
- parse_bucket(key, tenant_name, bucket_name);
+ string bucket_instance;
+ parse_bucket(key, &tenant_name, &bucket_name, &bucket_instance);
RGWZonePlacementInfo rule_info;
bci.info.bucket.name = bucket_name;
+ bci.info.bucket.bucket_id = bucket_instance;
bci.info.bucket.tenant = tenant_name;
ret = store->select_bucket_location_by_rule(bci.info.placement_rule, bci.info.bucket, &rule_info);
if (ret < 0) {
/*
* The tenant_name is always returned on purpose. May be empty, of course.
*/
- static void parse_bucket(const string &bucket,
- string &tenant_name, string &bucket_name)
+ static void parse_bucket(const string& bucket,
+ string *tenant_name,
+ string *bucket_name,
+ string *bucket_instance = nullptr /* optional */)
{
int pos = bucket.find('/');
if (pos >= 0) {
- tenant_name = bucket.substr(0, pos);
+ *tenant_name = bucket.substr(0, pos);
} else {
- tenant_name.clear();
+ tenant_name->clear();
+ }
+ string bn = bucket.substr(pos + 1);
+ pos = bn.find (':');
+ if (pos < 0) {
+ *bucket_name = std::move(bn);
+ return;
+ }
+ *bucket_name = bn.substr(0, pos);
+ if (bucket_instance) {
+ *bucket_instance = bn.substr(pos + 1);
}
- bucket_name = bucket.substr(pos + 1);
}
};