std::string bucket_tenant;
std::string bucket_name;
+ rgw_obj_key object_key; // requested object name and version id
/* bucket is only created in rgw_build_bucket_policies() and should never be
* overwritten */
std::unique_ptr<rgw::sal::Object> object;
std::string src_tenant_name;
std::string src_bucket_name;
+ rgw_obj_key src_object_key; // requested source object name and version id
std::unique_ptr<rgw::sal::Object> src_object;
ACLOwner bucket_owner;
// Resource owner for the authenticated identity, initialized in authorize()
if (rc != 0)
return rc;
- state->object = RGWHandler::driver->get_object(rgw_obj_key(dst_obj_name));
+ state->object_key = dst_obj_name;
+ state->object = RGWHandler::driver->get_object(state->object_key);
/* XXX and fixup key attr (could optimize w/string ref and
* dest_obj_name) */
/* we don't have (any) headers, so just create default ACLs */
dest_policy.create_default(s->owner.id, s->owner.display_name);
/* src_object required before RGWCopyObj::verify_permissions() */
- rgw_obj_key k = rgw_obj_key(src_obj_name);
- s->src_object = s->bucket->get_object(k);
+ s->src_object_key = src_obj_name;
+ s->src_object = s->bucket->get_object(s->src_object_key);
return 0;
}
s->bucket_name = std::move(first);
if (pos >= 0) {
// XXX ugh, another copy
- string encoded_obj_str = req.substr(pos+1);
- s->object = driver->get_object(rgw_obj_key(encoded_obj_str, s->info.args.get("versionId")));
+ s->object_key.name = req.substr(pos+1);
+ s->object_key.instance = s->info.args.get("versionId");
+ s->object = driver->get_object(s->object_key);
}
} else {
- s->object = driver->get_object(rgw_obj_key(req_name, s->info.args.get("versionId")));
+ s->object_key.name = req_name;
+ s->object_key.instance = s->info.args.get("versionId");
+ s->object = driver->get_object(s->object_key);
}
return 0;
} /* init_from_header */
return -EINVAL;
}
- s->object = s->bucket->get_object(rgw_obj_key(object_str));
+ s->object_key = object_str;
+ s->object = s->bucket->get_object(s->object_key);
rebuild_key(s->object.get());
encoded_obj_str = req.substr(pos+1);
}
+ s->object_key.name = encoded_obj_str;
+ s->object_key.instance = s->info.args.get("versionId");
+
/* dang: s->bucket is never set here, since it's created with permissions.
* These calls will always create an object with no bucket. */
if (!encoded_obj_str.empty()) {
if (s->bucket) {
- s->object = s->bucket->get_object(rgw_obj_key(encoded_obj_str, s->info.args.get("versionId")));
+ s->object = s->bucket->get_object(s->object_key);
} else {
- s->object = driver->get_object(rgw_obj_key(encoded_obj_str, s->info.args.get("versionId")));
+ s->object = driver->get_object(s->object_key);
}
}
} else {
+ s->object_key.name = req_name;
+ s->object_key.instance = s->info.args.get("versionId");
+
if (s->bucket) {
- s->object = s->bucket->get_object(rgw_obj_key(req_name, s->info.args.get("versionId")));
+ s->object = s->bucket->get_object(s->object_key);
} else {
- s->object = driver->get_object(rgw_obj_key(req_name, s->info.args.get("versionId")));
+ s->object = driver->get_object(s->object_key);
}
}
return 0;
ldpp_dout(s, 0) << "failed to parse copy location" << dendl;
return -EINVAL; // XXX why not -ERR_INVALID_BUCKET_NAME or -ERR_BAD_URL?
}
+ s->src_object_key = key;
s->src_object = driver->get_object(key);
}
* dang: This could be problematic, since we're not actually replacing op, but
* we are replacing s->object. Something might have a pointer to it.
*/
+ s->object_key = new_obj;
s->object = s->bucket->get_object(new_obj);
return 0;
/* This is okay. It's an error, so nothing will run after this, and it can be
* called by abort_early(), which can be called before s->object or s->bucket
* are set up. Note, it won't have bucket. */
+ s->object_key = errordoc_key;
s->object = driver->get_object(errordoc_key);
ret = init_permissions(getop.get(), y);
/* This is okay. It's an error, so nothing will run after this, and it can be
* called by abort_early(), which can be called before s->object or s->bucket
* are set up. */
+ s->object_key = std::to_string(http_ret) + error_doc;
if (!rgw::sal::Bucket::empty(s->bucket.get())) {
- s->object = s->bucket->get_object(rgw_obj_key(std::to_string(http_ret) + error_doc));
+ s->object = s->bucket->get_object(s->object_key);
} else {
- s->object = driver->get_object(rgw_obj_key(std::to_string(http_ret) + error_doc));
+ s->object = driver->get_object(s->object_key);
}
RGWOp* newop = &get_errpage_op;
s->init_state.url_bucket = first;
if (req.size()) {
- s->object = driver->get_object(
- rgw_obj_key(req, s->info.env->get("HTTP_X_OBJECT_VERSION_ID", ""))); /* rgw swift extension */
+ s->object_key.name = req;
+ s->object_key.instance = s->info.env->get("HTTP_X_OBJECT_VERSION_ID", ""); /* rgw swift extension */
+ s->object = driver->get_object(s->object_key);
s->info.effective_uri.append("/" + s->object->get_name());
}
bool result = RGWCopyObj::parse_copy_location(copy_source, t->src_bucket, key, s);
if (!result)
return -ERR_BAD_URL;
+ s->src_object_key = key;
s->src_object = driver->get_object(key);
if (!s->src_object)
return -ERR_BAD_URL;
/* convert COPY operation into PUT */
t->src_bucket = t->url_bucket;
+ s->src_object_key = s->object_key;
s->src_object = s->object->clone();
t->url_bucket = dest_bucket_name;
+ s->object_key.name = dest_object_name;
s->object->set_name(dest_object_name);
s->op = OP_PUT;
}