]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD: dispatch_context only discard transaction if contexts empty
authorSamuel Just <sam.just@inktank.com>
Thu, 20 Sep 2012 20:55:48 +0000 (13:55 -0700)
committerSamuel Just <sam.just@inktank.com>
Wed, 5 Dec 2012 19:34:18 +0000 (11:34 -0800)
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/include/Context.h
src/osd/OSD.cc

index f3da98c53d53d201a88416d1882aa3133148c503..a64bb2de5f66932dcc0e663eaf00b2ba5b89f68c 100644 (file)
@@ -124,6 +124,7 @@ public:
   void finish(int r) {
     finish_contexts(cct, contexts, r);
   }
+  bool empty() { return contexts.empty(); }
 };
 
 
index 9e4d5d1884df8de92ce25fad717ce02fdd3c3e8b..61471b439e507a7c8e046b8204f209ca4cf435d8 100644 (file)
@@ -4668,7 +4668,9 @@ void OSD::dispatch_context(PG::RecoveryCtx &ctx, PG *pg, OSDMapRef curmap)
   delete ctx.query_map;
   do_infos(*ctx.info_map, curmap);
   delete ctx.info_map;
-  if (ctx.transaction->empty() || !pg) {
+  if ((ctx.on_applied->empty() &&
+       ctx.on_safe->empty() &&
+       ctx.transaction->empty()) || !pg) {
     delete ctx.transaction;
     delete ctx.on_applied;
     delete ctx.on_safe;