uint64_t assert_ver;
eversion_t last_objver;
uint32_t notify_timeout;
+ object_locator_t oloc;
IoCtxImpl(RadosClient *c, int pid, const char *pool_name_, snapid_t s = CEPH_NOSNAP) :
ref_cnt(0), client(c), poolid(pid),
pool_name(pool_name_), snap_seq(s), assert_ver(0),
- notify_timeout(g_conf.client_notify_timeout) {}
+ notify_timeout(g_conf.client_notify_timeout), oloc(pid) {}
void set_snap_read(snapid_t s) {
if (!s)
int reply;
IoCtxImpl* ctx = (IoCtxImpl *) io;
- object_locator_t oloc(ctx->poolid);
-
Mutex mylock("RadosClient::snap_rollback::mylock");
Cond cond;
bool done;
Context *onack = new C_SafeCond(&mylock, &cond, &done, &reply);
lock.Lock();
- objecter->rollback_object(oid, oloc, snapc, snapid,
+ objecter->rollback_object(oid, ctx->oloc, snapc, snapid,
g_clock.now(), onack, NULL);
lock.Unlock();
Context *onack = new C_SafeCond(&mylock, &cond, &done, &r);
lock.Lock();
- object_locator_t oloc(io.poolid);
- objecter->create(oid, oloc,
+ objecter->create(oid, io.oloc,
io.snapc, ut, 0, (exclusive ? CEPH_OSD_OP_FLAG_EXCL : 0),
onack, NULL, &ver);
lock.Unlock();
}
lock.Lock();
- object_locator_t oloc(io.poolid);
- objecter->write(oid, oloc,
+ objecter->write(oid, io.oloc,
off, len, io.snapc, bl, ut, 0,
onack, NULL, &ver, pop);
lock.Unlock();
}
lock.Lock();
- object_locator_t oloc(io.poolid);
- objecter->write_full(oid, oloc,
+ objecter->write_full(oid, io.oloc,
io.snapc, bl, ut, 0,
onack, NULL, &ver, pop);
lock.Unlock();
c->pbl = pbl;
Mutex::Locker l(lock);
- object_locator_t oloc(io.poolid);
- objecter->read(oid, oloc,
+ objecter->read(oid, io.oloc,
off, len, io.snap_seq, &c->bl, 0,
onack, &c->objver);
return 0;
c->maxlen = len;
Mutex::Locker l(lock);
- object_locator_t oloc(io.poolid);
- objecter->read(oid, oloc,
+ objecter->read(oid, io.oloc,
off, len, io.snap_seq, &c->bl, 0,
onack, &c->objver);
c->pbl = NULL;
Mutex::Locker l(lock);
- object_locator_t oloc(io.poolid);
- objecter->sparse_read(oid, oloc,
+ objecter->sparse_read(oid, io.oloc,
off, len, io.snap_seq, &c->bl, 0,
onack);
return 0;
Context *onsafe = new C_aio_Safe(c);
Mutex::Locker l(lock);
- object_locator_t oloc(io.poolid);
- objecter->write(oid, oloc,
+ objecter->write(oid, io.oloc,
off, len, io.snapc, bl, ut, 0,
onack, onsafe, &c->objver);
Context *onsafe = new C_aio_Safe(c);
Mutex::Locker l(lock);
- object_locator_t oloc(io.poolid);
- objecter->write_full(oid, oloc,
+ objecter->write_full(oid, io.oloc,
io.snapc, bl, ut, 0,
onack, onsafe, &c->objver);
}
lock.Lock();
- object_locator_t oloc(io.poolid);
- objecter->remove(oid, oloc,
+ objecter->remove(oid, io.oloc,
snapc, ut, 0,
onack, NULL, &ver, pop);
lock.Unlock();
}
lock.Lock();
- object_locator_t oloc(io.poolid);
- objecter->trunc(oid, oloc,
+ objecter->trunc(oid, io.oloc,
io.snapc, ut, 0,
size, 0,
onack, NULL, &ver, pop);
lock.Lock();
::SnapContext snapc;
- object_locator_t oloc(io.poolid);
ObjectOperation wr;
if (io.assert_ver) {
wr.assert_version(io.assert_ver);
io.assert_ver = 0;
}
wr.tmap_update(cmdbl);
- objecter->mutate(oid, oloc, wr, snapc, ut, 0, onack, NULL, &ver);
+ objecter->mutate(oid, io.oloc, wr, snapc, ut, 0, onack, NULL, &ver);
lock.Unlock();
mylock.Lock();
lock.Lock();
- object_locator_t oloc(io.poolid);
ObjectOperation rd;
if (io.assert_ver) {
rd.assert_version(io.assert_ver);
io.assert_ver = 0;
}
rd.call(cls, method, inbl);
- objecter->read(oid, oloc, rd, io.snap_seq, &outbl, 0, onack, &ver);
+ objecter->read(oid, io.oloc, rd, io.snap_seq, &outbl, 0, onack, &ver);
lock.Unlock();
mylock.Lock();
pop = &op;
}
lock.Lock();
- object_locator_t oloc(io.poolid);
- objecter->read(oid, oloc,
+ objecter->read(oid, io.oloc,
off, len, io.snap_seq, &bl, 0,
onack, &ver, pop);
lock.Unlock();
Context *onack = new C_SafeCond(&mylock, &cond, &done, &r);
lock.Lock();
- object_locator_t oloc(io.poolid);
- objecter->mapext(oid, oloc,
+ objecter->mapext(oid, io.oloc,
off, len, io.snap_seq, &bl, 0,
onack);
lock.Unlock();
Context *onack = new C_SafeCond(&mylock, &cond, &done, &r);
lock.Lock();
- object_locator_t oloc(io.poolid);
- objecter->sparse_read(oid, oloc,
+ objecter->sparse_read(oid, io.oloc,
off, len, io.snap_seq, &bl, 0,
onack);
lock.Unlock();
pop = &op;
}
lock.Lock();
- object_locator_t oloc(io.poolid);
- objecter->stat(oid, oloc,
+ objecter->stat(oid, io.oloc,
io.snap_seq, psize, &mtime, 0,
onack, &ver, pop);
lock.Unlock();
pop = &op;
}
lock.Lock();
- object_locator_t oloc(io.poolid);
- objecter->getxattr(oid, oloc,
+ objecter->getxattr(oid, io.oloc,
name, io.snap_seq, &bl, 0,
onack, &ver, pop);
lock.Unlock();
Context *onack = new C_SafeCond(&mylock, &cond, &done, &r);
eversion_t ver;
- object_locator_t oloc(io.poolid);
-
ObjectOperation op, *pop = NULL;
if (io.assert_ver) {
op.assert_version(io.assert_ver);
pop = &op;
}
lock.Lock();
- objecter->removexattr(oid, oloc, name,
+ objecter->removexattr(oid, io.oloc, name,
io.snapc, ut, 0,
onack, NULL, &ver, pop);
lock.Unlock();
pop = &op;
}
lock.Lock();
- object_locator_t oloc(io.poolid);
- objecter->setxattr(oid, oloc, name,
+ objecter->setxattr(oid, io.oloc, name,
io.snapc, bl, ut, 0,
onack, NULL, &ver, pop);
lock.Unlock();
Context *onack = new C_SafeCond(&mylock, &cond, &done, &r);
lock.Lock();
- object_locator_t oloc(io.poolid);
map<string, bufferlist> aset;
- objecter->getxattrs(oid, oloc, io.snap_seq,
+ objecter->getxattrs(oid, io.oloc, io.snap_seq,
aset,
0, onack, &ver, pop);
lock.Unlock();
WatchContext *wc;
register_watcher(io, oid, ctx, rd, cookie, &wc);
- object_locator_t oloc(io.poolid);
-
if (io.assert_ver) {
rd->assert_version(io.assert_ver);
io.assert_ver = 0;
}
rd->watch(*cookie, ver, 1);
bufferlist bl;
- wc->linger_id = objecter->linger(oid, oloc, *rd, io.snap_seq, bl, NULL, 0, onack, NULL, &objver);
+ wc->linger_id = objecter->linger(oid, io.oloc, *rd, io.snap_seq, bl, NULL, 0, onack, NULL, &objver);
lock.Unlock();
mylock.Lock();
Cond cond;
eversion_t objver;
- object_locator_t oloc(io.poolid);
ObjectOperation rd;
if (io.assert_ver) {
rd.assert_version(io.assert_ver);
io.assert_ver = 0;
}
rd.notify_ack(notify_id, ver);
- objecter->read(oid, oloc, rd, io.snap_seq, NULL, 0, 0, 0);
+ objecter->read(oid, io.oloc, rd, io.snap_seq, NULL, 0, 0, 0);
return 0;
}
unregister_watcher(cookie);
- object_locator_t oloc(io.poolid);
ObjectOperation rd;
if (io.assert_ver) {
rd.assert_version(io.assert_ver);
io.assert_ver = 0;
}
rd.watch(cookie, 0, 0);
- objecter->read(oid, oloc, rd, io.snap_seq, &outbl, 0, onack, &ver);
+ objecter->read(oid, io.oloc, rd, io.snap_seq, &outbl, 0, onack, &ver);
lock.Unlock();
mylock.Lock();
C_NotifyComplete *ctx = new C_NotifyComplete(&mylock_all, &cond_all, &done_all);
ObjectOperation rd;
- object_locator_t oloc(io.poolid);
if (io.assert_ver) {
rd.assert_version(io.assert_ver);
io.assert_ver = 0;
::encode(prot_ver, inbl);
::encode(timeout, inbl);
rd.notify(cookie, ver, inbl);
- objecter->read(oid, oloc, rd, io.snap_seq, &outbl, 0, onack, &objver);
+ objecter->read(oid, io.oloc, rd, io.snap_seq, &outbl, 0, onack, &objver);
lock.Unlock();
mylock_all.Lock();
return io_ctx_impl->pool_name;
}
+void librados::IoCtx::
+locator_set_key(const string& key)
+{
+ io_ctx_impl->oloc.key = key;
+}
+
librados::IoCtx::
IoCtx(IoCtxImpl *io_ctx_impl_)
: io_ctx_impl(io_ctx_impl_)
return ctx->client->pool_change_auid(ctx, auid);
}
+extern "C" void rados_ioctx_locator_set_key(rados_ioctx_t io, const char *key)
+{
+ librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
+ if (key)
+ ctx->oloc.key = key;
+ else
+ ctx->oloc.key = "";
+}
// snaps
extern "C" int rados_ioctx_snap_create(rados_ioctx_t io, const char *snapname)