]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Revert "osd/ReplicatedPG: snapset is not persisted" 5593/head
authorSamuel Just <sam.just@inktank.com>
Mon, 17 Aug 2015 19:58:58 +0000 (12:58 -0700)
committerSamuel Just <sam.just@inktank.com>
Mon, 17 Aug 2015 19:58:58 +0000 (12:58 -0700)
src/osd/ReplicatedPG.cc

index 4f5382cffce8be5f2747d020ffab7086b8752fc6..c6958664b194c1cc8a53facb07d5fc946ccc8ceb 100644 (file)
@@ -5754,7 +5754,9 @@ void ReplicatedPG::finish_ctx(OpContext *ctx, int log_op_type, bool maintain_ssc
          ctx->snapset_obc->obs.exists = false;
        }
       }
-    } else if (ctx->new_snapset.clones.size() && !ctx->cache_evict) {
+    } else if (ctx->new_snapset.clones.size() &&
+              !ctx->cache_evict &&
+              (!ctx->snapset_obc || !ctx->snapset_obc->obs.exists)) {
       // save snapset on _snap
       hobject_t snapoid(soid.oid, soid.get_key(), CEPH_SNAPDIR, soid.get_hash(),
                        info.pgid.pool(), soid.get_namespace());
@@ -5782,9 +5784,6 @@ void ReplicatedPG::finish_ctx(OpContext *ctx, int log_op_type, bool maintain_ssc
       } else if (!pool.info.require_rollback()) {
        ctx->log.back().mod_desc.mark_unrollbackable();
       }
-      if (!ctx->snapset_obc->obs.exists) {
-        ctx->op_t->touch(snapoid);
-      }
       ctx->snapset_obc->obs.exists = true;
       ctx->snapset_obc->obs.oi.version = ctx->at_version;
       ctx->snapset_obc->obs.oi.last_reqid = ctx->reqid;
@@ -5793,6 +5792,7 @@ void ReplicatedPG::finish_ctx(OpContext *ctx, int log_op_type, bool maintain_ssc
 
       bufferlist bv(sizeof(ctx->new_obs.oi));
       ::encode(ctx->snapset_obc->obs.oi, bv);
+      ctx->op_t->touch(snapoid);
       setattr_maybe_cache(ctx->snapset_obc, ctx, ctx->op_t, OI_ATTR, bv);
       setattr_maybe_cache(ctx->snapset_obc, ctx, ctx->op_t, SS_ATTR, bss);
       if (pool.info.require_rollback()) {