}
}
-static void get_obj_bucket_and_oid(rgw_obj& obj, rgw_bucket& bucket, string& oid)
+static void get_obj_bucket_and_oid_key(rgw_obj& obj, rgw_bucket& bucket, string& oid, string& key)
{
bucket = obj.bucket;
prepend_bucket_marker(bucket, obj.object, oid);
+ prepend_bucket_marker(bucket, obj.key, key);
}
time_t *mtime, map<string, bufferlist>& attrs, RGWObjCategory category, bool exclusive)
{
rgw_bucket bucket;
- std::string oid;
- get_obj_bucket_and_oid(obj, bucket, oid);
+ std::string oid, key;
+ get_obj_bucket_and_oid_key(obj, bucket, oid, key);
librados::IoCtx io_ctx;
int r = open_bucket_ctx(bucket, io_ctx);
if (r < 0)
return r;
- io_ctx.locator_set_key(obj.key);
+ io_ctx.locator_set_key(key);
ObjectWriteOperation op;
void **handle)
{
rgw_bucket bucket;
- std::string oid;
- get_obj_bucket_and_oid(obj, bucket, oid);
+ std::string oid, key;
+ get_obj_bucket_and_oid_key(obj, bucket, oid, key);
librados::IoCtx io_ctx;
int r = open_bucket_ctx(bucket, io_ctx);
if (r < 0)
return r;
- io_ctx.locator_set_key(obj.key);
+ io_ctx.locator_set_key(key);
bufferlist bl;
bl.append(data, len);
int RGWRados::delete_obj_impl(void *ctx, std::string& id, rgw_obj& obj, bool sync)
{
rgw_bucket bucket;
- std::string oid;
- get_obj_bucket_and_oid(obj, bucket, oid);
+ std::string oid, key;
+ get_obj_bucket_and_oid_key(obj, bucket, oid, key);
librados::IoCtx io_ctx;
RGWRadosCtx *rctx = (RGWRadosCtx *)ctx;
int r = open_bucket_ctx(bucket, io_ctx);
if (r < 0)
return r;
- io_ctx.locator_set_key(obj.key);
+ io_ctx.locator_set_key(key);
ObjectWriteOperation op;
int RGWRados::get_attr(void *ctx, rgw_obj& obj, const char *name, bufferlist& dest)
{
rgw_bucket bucket;
- std::string oid;
- get_obj_bucket_and_oid(obj, bucket, oid);
+ std::string oid, key;
+ get_obj_bucket_and_oid_key(obj, bucket, oid, key);
librados::IoCtx io_ctx;
rgw_bucket actual_bucket = bucket;
string actual_obj = oid;
if (r < 0)
return r;
- io_ctx.locator_set_key(obj.key);
+ io_ctx.locator_set_key(key);
if (rctx) {
RGWObjState *state;
int RGWRados::set_attr(void *ctx, rgw_obj& obj, const char *name, bufferlist& bl)
{
rgw_bucket bucket;
- std::string oid;
- get_obj_bucket_and_oid(obj, bucket, oid);
+ std::string oid, key;
+ get_obj_bucket_and_oid_key(obj, bucket, oid, key);
librados::IoCtx io_ctx;
rgw_bucket actual_bucket = bucket;
string actual_obj = oid;
if (r < 0)
return r;
- io_ctx.locator_set_key(obj.key);
+ io_ctx.locator_set_key(key);
ObjectWriteOperation op;
RGWObjState *state = NULL;
struct rgw_err *err)
{
rgw_bucket bucket;
- std::string oid;
- get_obj_bucket_and_oid(obj, bucket, oid);
+ std::string oid, key;
+ get_obj_bucket_and_oid_key(obj, bucket, oid, key);
int r = -EINVAL;
bufferlist etag;
time_t ctime;
if (r < 0)
goto done_err;
- state->io_ctx.locator_set_key(obj.key);
+ state->io_ctx.locator_set_key(key);
if (!rctx) {
new_ctx = new RGWRadosCtx();
pair<string, bufferlist> *xattr_cond)
{
rgw_bucket bucket;
- std::string dst_oid;
- get_obj_bucket_and_oid(dst_obj, bucket, dst_oid);
+ std::string dst_oid, dst_key;
+ get_obj_bucket_and_oid_key(dst_obj, bucket, dst_oid, dst_key);
librados::IoCtx io_ctx;
RGWRadosCtx *rctx = (RGWRadosCtx *)ctx;
uint64_t size = 0;
int r = open_bucket_ctx(bucket, io_ctx);
if (r < 0)
return r;
- io_ctx.locator_set_key(dst_obj.key);
+ io_ctx.locator_set_key(dst_key);
ObjectWriteOperation op;
if (truncate_dest) {
op.remove();
if (range.len) {
RGW_LOG(20) << "calling op.clone_range(dst_ofs=" << range.dst_ofs << ", src.object=" << range.src.object << " range.src_ofs=" << range.src_ofs << " range.len=" << range.len << dendl;
if (xattr_cond) {
- string src_cmp_obj;
- get_obj_bucket_and_oid(range.src, bucket, src_cmp_obj);
+ string src_cmp_obj, src_cmp_key;
+ get_obj_bucket_and_oid_key(range.src, bucket, src_cmp_obj, src_cmp_key);
op.src_cmpxattr(src_cmp_obj, xattr_cond->first.c_str(),
LIBRADOS_CMPXATTR_OP_EQ, xattr_cond->second);
}
- string src_oid;
- get_obj_bucket_and_oid(range.src, bucket, src_oid);
+ string src_oid, src_key;
+ get_obj_bucket_and_oid_key(range.src, bucket, src_oid, src_key);
if (range.dst_ofs + range.len > size)
size = range.dst_ofs + range.len;
op.clone_range(range.dst_ofs, src_oid, range.src_ofs, range.len);
char **data, off_t ofs, off_t end)
{
rgw_bucket bucket;
- std::string oid;
- get_obj_bucket_and_oid(obj, bucket, oid);
+ std::string oid, key;
+ get_obj_bucket_and_oid_key(obj, bucket, oid, key);
uint64_t len;
bufferlist bl;
RGWRadosCtx *rctx = (RGWRadosCtx *)ctx;
if (len > RGW_MAX_CHUNK_SIZE)
len = RGW_MAX_CHUNK_SIZE;
- state->io_ctx.locator_set_key(obj.key);
+ state->io_ctx.locator_set_key(key);
ObjectReadOperation op;
int RGWRados::read(void *ctx, rgw_obj& obj, off_t ofs, size_t size, bufferlist& bl)
{
rgw_bucket bucket;
- std::string oid;
- get_obj_bucket_and_oid(obj, bucket, oid);
+ std::string oid, key;
+ get_obj_bucket_and_oid_key(obj, bucket, oid, key);
librados::IoCtx io_ctx;
RGWRadosCtx *rctx = (RGWRadosCtx *)ctx;
RGWObjState *astate = NULL;
if (r < 0)
return r;
- io_ctx.locator_set_key(obj.key);
+ io_ctx.locator_set_key(key);
ObjectReadOperation op;
int RGWRados::obj_stat(void *ctx, rgw_obj& obj, uint64_t *psize, time_t *pmtime)
{
rgw_bucket bucket;
- std::string oid;
- get_obj_bucket_and_oid(obj, bucket, oid);
+ std::string oid, key;
+ get_obj_bucket_and_oid_key(obj, bucket, oid, key);
librados::IoCtx io_ctx;
RGWRadosCtx *rctx = (RGWRadosCtx *)ctx;
int r = open_bucket_ctx(bucket, io_ctx);
return 0;
}
- io_ctx.locator_set_key(obj.key);
+ io_ctx.locator_set_key(key);
r = io_ctx.stat(oid, psize, pmtime);
return r;
bufferlist bl;
librados::IoCtx io_ctx;
rgw_bucket bucket;
- std::string oid;
- get_obj_bucket_and_oid(obj, bucket, oid);
+ std::string oid, key;
+ get_obj_bucket_and_oid_key(obj, bucket, oid, key);
int r = open_bucket_ctx(bucket, io_ctx);
if (r < 0)
return r;
- io_ctx.locator_set_key(obj.key);
+ io_ctx.locator_set_key(key);
r = io_ctx.tmap_get(oid, bl);
if (r < 0)
int RGWRados::tmap_set(rgw_obj& obj, std::string& key, bufferlist& bl)
{
rgw_bucket bucket;
- std::string oid;
- get_obj_bucket_and_oid(obj, bucket, oid);
+ std::string oid, okey;
+ get_obj_bucket_and_oid_key(obj, bucket, oid, okey);
bufferlist cmdbl, emptybl;
__u8 c = CEPH_OSD_TMAP_SET;
if (r < 0)
return r;
- io_ctx.locator_set_key(obj.key);
+ io_ctx.locator_set_key(okey);
r = io_ctx.tmap_update(oid, cmdbl);
int RGWRados::tmap_set(rgw_obj& obj, std::map<std::string, bufferlist>& m)
{
rgw_bucket bucket;
- std::string oid;
- get_obj_bucket_and_oid(obj, bucket, oid);
+ std::string oid, key;
+ get_obj_bucket_and_oid_key(obj, bucket, oid, key);
bufferlist cmdbl, emptybl;
__u8 c = CEPH_OSD_TMAP_SET;
map<string, bufferlist>::iterator iter;
if (r < 0)
return r;
- io_ctx.locator_set_key(obj.key);
+ io_ctx.locator_set_key(key);
r = io_ctx.tmap_update(oid, cmdbl);
int RGWRados::tmap_create(rgw_obj& obj, std::string& key, bufferlist& bl)
{
rgw_bucket bucket;
- std::string oid;
- get_obj_bucket_and_oid(obj, bucket, oid);
+ std::string oid, okey;
+ get_obj_bucket_and_oid_key(obj, bucket, oid, okey);
bufferlist cmdbl, emptybl;
__u8 c = CEPH_OSD_TMAP_CREATE;
if (r < 0)
return r;
- io_ctx.locator_set_key(obj.key);
+ io_ctx.locator_set_key(okey);
r = io_ctx.tmap_update(oid, cmdbl);
return r;
int RGWRados::tmap_del(rgw_obj& obj, std::string& key)
{
rgw_bucket bucket;
- std::string oid;
- get_obj_bucket_and_oid(obj, bucket, oid);
+ std::string oid, okey;
+ get_obj_bucket_and_oid_key(obj, bucket, oid, okey);
bufferlist cmdbl;
__u8 c = CEPH_OSD_TMAP_RM;
if (r < 0)
return r;
- io_ctx.locator_set_key(obj.key);
+ io_ctx.locator_set_key(okey);
r = io_ctx.tmap_update(oid, cmdbl);
return r;
int RGWRados::append_async(rgw_obj& obj, size_t size, bufferlist& bl)
{
rgw_bucket bucket;
- std::string oid;
- get_obj_bucket_and_oid(obj, bucket, oid);
+ std::string oid, key;
+ get_obj_bucket_and_oid_key(obj, bucket, oid, key);
librados::IoCtx io_ctx;
int r = open_bucket_ctx(bucket, io_ctx);
if (r < 0)
return r;
librados::AioCompletion *completion = rados->aio_create_completion(NULL, NULL, NULL);
- io_ctx.locator_set_key(obj.key);
+ io_ctx.locator_set_key(key);
r = io_ctx.aio_append(oid, completion, bl, size);
completion->release();