]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: clean up _delete_head
authorSage Weil <sage@newdream.net>
Tue, 13 Dec 2011 23:04:05 +0000 (15:04 -0800)
committerGreg Farnum <gregory.farnum@dreamhost.com>
Wed, 14 Dec 2011 17:27:26 +0000 (09:27 -0800)
Might be fixing a subtle logic bug, but old flow was confusing, so not
sure.  :)

Signed-off-by: Sage Weil <sage@newdream.net>
Signed-off-by: Greg Farnum <gregory.farnum@dreamhost.com>
src/osd/ReplicatedPG.cc
src/osd/ReplicatedPG.h

index cf9a02fa5abc653aa802a52273cdeba4dfbb6390..d4e42f2e7863963561f49298df8b504f1bed0e0f 100644 (file)
@@ -1737,11 +1737,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops,
       break;
     
     case CEPH_OSD_OP_DELETE:
-      if (!obs.exists) {
-       result = -ENOENT;
-      } else {
-       _delete_head(ctx);
-      }
+      result = _delete_head(ctx);
       break;
 
     case CEPH_OSD_OP_CLONERANGE:
@@ -2077,7 +2073,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops,
   return result;
 }
 
-inline void ReplicatedPG::_delete_head(OpContext *ctx)
+inline int ReplicatedPG::_delete_head(OpContext *ctx)
 {
   SnapSet& snapset = ctx->new_snapset;
   ObjectState& obs = ctx->new_obs;
@@ -2085,22 +2081,27 @@ inline void ReplicatedPG::_delete_head(OpContext *ctx)
   const hobject_t& soid = oi.soid;
   ObjectStore::Transaction& t = ctx->op_t;
 
-  if (obs.exists)
-    t.remove(coll, soid);
+  if (!obs.exists)
+    return -ENOENT;
+  
+  t.remove(coll, soid);
+
   if (oi.size > 0) {
     interval_set<uint64_t> ch;
     ch.insert(0, oi.size);
     ctx->modified_ranges.union_of(ch);
   }
-  if (obs.exists) {
-    ctx->delta_stats.num_objects--;
-    ctx->delta_stats.num_bytes -= oi.size;
-    ctx->delta_stats.num_kb -= SHIFT_ROUND_UP(oi.size, 10);
-    oi.size = 0;
-    snapset.head_exists = false;
-    obs.exists = false;
-  }      
+
+  ctx->delta_stats.num_objects--;
+  ctx->delta_stats.num_bytes -= oi.size;
+  ctx->delta_stats.num_kb -= SHIFT_ROUND_UP(oi.size, 10);
+
+  oi.size = 0;
+  snapset.head_exists = false;
+  obs.exists = false;
+
   ctx->delta_stats.num_wr++;
+  return 0;
 }
 
 int ReplicatedPG::_rollback_to(OpContext *ctx, ceph_osd_op& op)
index 3077ddb2eaedf7c69ba011045464f4c7dc8ac5e0..9a5a6e4a693d40e9aede32c421788546814f9e50 100644 (file)
@@ -801,7 +801,7 @@ private:
     boost::statechart::result react(const SnapTrim&);
   };
 
-  void _delete_head(OpContext *ctx);
+  int _delete_head(OpContext *ctx);
   int _rollback_to(OpContext *ctx, ceph_osd_op& op);
 public:
   bool same_for_read_since(epoch_t e);