]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: move snapc creation to caller for aio_operate 170/head
authorJosh Durgin <josh.durgin@inktank.com>
Fri, 29 Mar 2013 19:46:27 +0000 (12:46 -0700)
committerJosh Durgin <josh.durgin@inktank.com>
Fri, 29 Mar 2013 19:47:17 +0000 (12:47 -0700)
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>
src/librados/IoCtxImpl.cc
src/librados/IoCtxImpl.h
src/librados/librados.cc

index 8b7bf9d47fb0a1d323f60708f5d44e8a9e4ab63d..741a581e4458ec0b3d5b9432f38e0d198f35121f 100644 (file)
@@ -712,7 +712,7 @@ int librados::IoCtxImpl::aio_operate_read(const object_t &oid,
 
 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 */
@@ -725,9 +725,8 @@ int librados::IoCtxImpl::aio_operate(const object_t& oid,
   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;
index 263fd104167e1344981926785a9647f495feaf68..21e586543c71e9ba17aa2afc43143e69cdee1ea0 100644 (file)
@@ -139,7 +139,7 @@ struct librados::IoCtxImpl {
   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 {
index d6df4762a1f716cc7ceb76cc00c816500487c6d5..be98341ef362ecacd564104625894c48510b31ac 100644 (file)
@@ -860,8 +860,7 @@ int librados::IoCtx::aio_operate(const std::string& oid, AioCompletion *c,
 {
   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,
@@ -873,8 +872,9 @@ 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)