]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: move snapc creation to caller for aio_operate
authorJosh Durgin <josh.durgin@inktank.com>
Fri, 29 Mar 2013 19:46:27 +0000 (12:46 -0700)
committerJosh Durgin <josh.durgin@inktank.com>
Tue, 23 Apr 2013 18:33:18 +0000 (11:33 -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>
(cherry picked from commit 4c4d5591bdb048cd9ffa25b529c6127356e7f9a7)

src/librados/IoCtxImpl.cc
src/librados/IoCtxImpl.h
src/librados/librados.cc

index b7c5594ba50f8f25469335bd1a166e42583cb003..1dfd93bd26ba89023d13eb4ca89fd39d02302bbd 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 a1f16ccb50aec9f4d0606e4dbedccc96bb485ac5..a174a2d54989523ae551985e67f022a37bdf2a0a 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 8fc65eb12e1d9f6895d7941281d596dd10ea4317..472c187533cced676a43b691b759c69886eee44f 100644 (file)
@@ -832,8 +832,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,
@@ -845,8 +844,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)