The common case already has a snapshot context, so avoid duplicating
it (copying a potentially large vector) in IoCtxImpl::aio_operate().
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
(cherry picked from commit
4c4d5591bdb048cd9ffa25b529c6127356e7f9a7)
int librados::IoCtxImpl::aio_operate(const object_t& oid,
::ObjectOperation *o, AioCompletionImpl *c,
- snap_t seq, vector<snapid_t>& snaps)
+ const ::SnapContext& snap_context)
{
utime_t ut = ceph_clock_now(client->cct);
/* can't write to a snapshot */
c->io = this;
queue_aio_write(c);
- ::SnapContext local_snapc(seq, snaps);
Mutex::Locker l(*lock);
- objecter->mutate(oid, oloc, *o, local_snapc, ut, 0, onack, oncommit,
+ objecter->mutate(oid, oloc, *o, snap_context, ut, 0, onack, oncommit,
&c->objver);
return 0;
int operate(const object_t& oid, ::ObjectOperation *o, time_t *pmtime);
int operate_read(const object_t& oid, ::ObjectOperation *o, bufferlist *pbl);
int aio_operate(const object_t& oid, ::ObjectOperation *o,
- AioCompletionImpl *c, snap_t seq, vector<snapid_t>& snaps);
+ AioCompletionImpl *c, const ::SnapContext& snap_context);
int aio_operate_read(const object_t& oid, ::ObjectOperation *o, AioCompletionImpl *c, bufferlist *pbl);
struct C_aio_Ack : public Context {
{
object_t obj(oid);
return io_ctx_impl->aio_operate(obj, (::ObjectOperation*)o->impl, c->pc,
- io_ctx_impl->snapc.seq,
- io_ctx_impl->snapc.snaps);
+ io_ctx_impl->snapc);
}
int librados::IoCtx::aio_operate(const std::string& oid, AioCompletion *c,
snv.resize(snaps.size());
for (size_t i = 0; i < snaps.size(); ++i)
snv[i] = snaps[i];
+ ::SnapContext snapc(snap_seq, snv);
return io_ctx_impl->aio_operate(obj, (::ObjectOperation*)o->impl, c->pc,
- snap_seq, snv);
+ snapc);
}
int librados::IoCtx::aio_operate(const std::string& oid, AioCompletion *c, librados::ObjectReadOperation *o, bufferlist *pbl)