]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: add pg_log_entry_t event type CLEAN
authorSage Weil <sage@inktank.com>
Fri, 27 Dec 2013 23:14:42 +0000 (15:14 -0800)
committerSage Weil <sage@inktank.com>
Tue, 14 Jan 2014 00:19:43 +0000 (16:19 -0800)
Signed-off-by: Sage Weil <sage@inktank.com>
src/osd/PG.cc
src/osd/ReplicatedPG.cc
src/osd/osd_types.h

index 686fe9c361d0759a5ad16c1a8530ceee2b04b6a6..17f63921b9770083d3c6ba39ec1e652dc25a6e09 100644 (file)
@@ -2506,7 +2506,7 @@ void PG::update_snap_map(
            i->soid,
            _snaps,
            &_t);
-       } else {
+       } else if (i->is_modify()) {
          assert(i->is_modify());
          int r = snap_mapper.update_snaps(
            i->soid,
@@ -2514,6 +2514,8 @@ void PG::update_snap_map(
            0,
            &_t);
          assert(r == 0);
+       } else {
+         assert(i->is_clean());
        }
       }
     }
index 3da324ef8198020ffb9254a8400098e6c738ccb5..c8b0eb54746c2f091d7e48f7c9f7e01dcc9030d2 100644 (file)
@@ -4680,17 +4680,24 @@ void ReplicatedPG::finish_ctx(OpContext *ctx, int log_op_type)
                                    ctx->mtime));
   if (soid.snap < CEPH_NOSNAP) {
     OSDriver::OSTransaction _t(osdriver.get_transaction(&(ctx->local_t)));
-    if (log_op_type == pg_log_entry_t::MODIFY ||
-       log_op_type == pg_log_entry_t::PROMOTE) {
+    set<snapid_t> _snaps(ctx->new_obs.oi.snaps.begin(),
+                        ctx->new_obs.oi.snaps.end());
+    switch (log_op_type) {
+    case pg_log_entry_t::MODIFY:
+    case pg_log_entry_t::PROMOTE:
       dout(20) << __func__ << " encoding snaps " << ctx->new_obs.oi.snaps
               << dendl;
       ::encode(ctx->new_obs.oi.snaps, ctx->log.back().snaps);
-
-      set<snapid_t> _snaps(ctx->new_obs.oi.snaps.begin(),
-                          ctx->new_obs.oi.snaps.end());
       snap_mapper.add_oid(soid, _snaps, &_t);
-    } else {
+      break;
+    case pg_log_entry_t::CLEAN:
+      dout(20) << __func__ << " encoding snaps " << ctx->new_obs.oi.snaps
+              << dendl;
+      ::encode(ctx->new_obs.oi.snaps, ctx->log.back().snaps);
+      break;
+    case pg_log_entry_t::DELETE:
       snap_mapper.remove_oid(soid, &_t);
+      break;
     }
   }
 
@@ -5430,7 +5437,7 @@ int ReplicatedPG::try_flush_mark_clean(FlushOpRef fop)
   ctx->new_obs.oi.clear_flag(object_info_t::FLAG_DIRTY);
   --ctx->delta_stats.num_objects_dirty;
 
-  finish_ctx(ctx, pg_log_entry_t::MODIFY);
+  finish_ctx(ctx, pg_log_entry_t::CLEAN);
 
   if (!fop->dup_ops.empty()) {
     dout(20) << __func__ << " queueing dups for " << ctx->at_version << dendl;
index 09ecc45e5ebf20d05296b0b765b2aeea9b74815c..c000c309bb678106559b876983bf0f6be75dfc30 100644 (file)
@@ -1589,6 +1589,7 @@ struct pg_log_entry_t {
     LOST_DELETE = 6, // lost new version, revert to no object (deleted).
     LOST_MARK = 7,   // lost new version, now EIO
     PROMOTE = 8,     // promoted object from another tier
+    CLEAN = 9,       // mark an object clean
   };
   static const char *get_op_name(int op) {
     switch (op) {
@@ -1608,6 +1609,8 @@ struct pg_log_entry_t {
       return "l_delete";
     case LOST_MARK:
       return "l_mark  ";
+    case CLEAN:
+      return "clean   ";
     default:
       return "unknown ";
     }
@@ -1643,13 +1646,16 @@ struct pg_log_entry_t {
   bool is_clone() const { return op == CLONE; }
   bool is_modify() const { return op == MODIFY; }
   bool is_promote() const { return op == PROMOTE; }
+  bool is_clean() const { return op == CLEAN; }
   bool is_backlog() const { return op == BACKLOG; }
   bool is_lost_revert() const { return op == LOST_REVERT; }
   bool is_lost_delete() const { return op == LOST_DELETE; }
   bool is_lost_mark() const { return op == LOST_MARK; }
 
   bool is_update() const {
-    return is_clone() || is_modify() || is_promote() || is_backlog() || is_lost_revert() || is_lost_mark();
+    return
+      is_clone() || is_modify() || is_promote() || is_clean() ||
+      is_backlog() || is_lost_revert() || is_lost_mark();
   }
   bool is_delete() const {
     return op == DELETE || op == LOST_DELETE;