From fe1c28dea4e5607a0c72eab1f046074616cd55a7 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 14 Dec 2015 11:35:46 -0500 Subject: [PATCH] osd/ReplicatedPG: do not set omap digest if there is no omap We want to avoid encoding it if we can. And if the FLAG_OMAP is not set we don't need to *also* store an empty crc. Signed-off-by: Sage Weil --- src/osd/ReplicatedPG.cc | 12 ++++++++++-- src/osd/osd_types.h | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 2c9226c30d791..7d23687bea3e8 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -6515,7 +6515,10 @@ void ReplicatedPG::finish_copyfrom(OpContext *ctx) obs.oi.user_version = ctx->user_at_version; obs.oi.set_data_digest(cb->results->data_digest); - obs.oi.set_omap_digest(cb->results->omap_digest); + if (obs.oi.is_omap()) + obs.oi.set_omap_digest(cb->results->omap_digest); + else + obs.oi.clear_omap_digest(); obs.oi.truncate_seq = cb->results->truncate_seq; obs.oi.truncate_size = cb->results->truncate_size; @@ -6700,6 +6703,8 @@ void ReplicatedPG::finish_promote(int r, CopyResults *results, tctx->new_obs.oi.set_data_digest(results->data_digest); if (results->has_omap) tctx->new_obs.oi.set_omap_digest(results->omap_digest); + else + tctx->new_obs.oi.clear_omap_digest(); tctx->new_obs.oi.truncate_seq = results->truncate_seq; tctx->new_obs.oi.truncate_size = results->truncate_size; @@ -11421,7 +11426,10 @@ void ReplicatedPG::_scrub( ctx->at_version = get_next_version(); ctx->mtime = utime_t(); // do not update mtime ctx->new_obs.oi.set_data_digest(p->second.first); - ctx->new_obs.oi.set_omap_digest(p->second.second); + if (ctx->new_obs.oi.is_omap()) + ctx->new_obs.oi.set_omap_digest(p->second.second); + else + ctx->new_obs.oi.clear_omap_digest(); finish_ctx(ctx, pg_log_entry_t::MODIFY, true, true); ctx->on_finish = new C_ScrubDigestUpdated(this); simple_repop_submit(repop); diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 52d45d293a1e7..b058c135ce2ac 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -2959,7 +2959,7 @@ struct object_info_t { } void new_object() { set_data_digest(-1); - set_omap_digest(-1); + clear_omap_digest(); } void encode(bufferlist& bl) const; -- 2.39.5