From: Ning Yao Date: Wed, 25 Nov 2015 15:07:44 +0000 (+0800) Subject: osd: don't update rollback_info for replicated pool X-Git-Tag: v10.0.2~126^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=f5e0cce9fc4cd97461af12d7dbd4289cd7d9d597;p=ceph-ci.git osd: don't update rollback_info for replicated pool rollback_info is just needed for ec-pool to rollback the patial committed chunks to previous version. Avoid recording rollback_info in replicated pool to save cpu cost and disk bandwidth Signed-off-by: Ning Yao --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 2d4b51c174b..5d8eea20200 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -2791,7 +2791,7 @@ void PG::write_if_dirty(ObjectStore::Transaction& t) map km; if (dirty_big_info || dirty_info) prepare_write_info(&km); - pg_log.write_log(t, &km, coll, pgmeta_oid); + pg_log.write_log(t, &km, coll, pgmeta_oid, pool.info.require_rollback()); if (!km.empty()) t.omap_setkeys(coll, pgmeta_oid, km); } diff --git a/src/osd/PGLog.cc b/src/osd/PGLog.cc index 86dbd3a8496..4e52894a48f 100644 --- a/src/osd/PGLog.cc +++ b/src/osd/PGLog.cc @@ -739,7 +739,8 @@ void PGLog::check() { void PGLog::write_log( ObjectStore::Transaction& t, map *km, - const coll_t& coll, const ghobject_t &log_oid) + const coll_t& coll, const ghobject_t &log_oid, + bool require_rollback) { if (is_dirty()) { dout(5) << "write_log with: " @@ -759,6 +760,7 @@ void PGLog::write_log( trimmed, dirty_divergent_priors, !touched_log, + require_rollback, (pg_log_debug ? &log_keys_debug : 0)); undirty(); } else { @@ -771,13 +773,14 @@ void PGLog::write_log( map *km, pg_log_t &log, const coll_t& coll, const ghobject_t &log_oid, - map &divergent_priors) + map &divergent_priors, + bool require_rollback) { _write_log( t, km, log, coll, log_oid, divergent_priors, eversion_t::max(), eversion_t(), eversion_t(), set(), - true, true, 0); + true, true, require_rollback, 0); } void PGLog::_write_log( @@ -792,6 +795,7 @@ void PGLog::_write_log( const set &trimmed, bool dirty_divergent_priors, bool touch_log, + bool require_rollback, set *log_keys_debug ) { @@ -856,8 +860,10 @@ void PGLog::_write_log( //dout(10) << "write_log: writing divergent_priors" << dendl; ::encode(divergent_priors, (*km)["divergent_priors"]); } - ::encode(log.can_rollback_to, (*km)["can_rollback_to"]); - ::encode(log.rollback_info_trimmed_to, (*km)["rollback_info_trimmed_to"]); + if (require_rollback) { + ::encode(log.can_rollback_to, (*km)["can_rollback_to"]); + ::encode(log.rollback_info_trimmed_to, (*km)["rollback_info_trimmed_to"]); + } if (!to_remove.empty()) t.omap_rmkeys(coll, log_oid, to_remove); diff --git a/src/osd/PGLog.h b/src/osd/PGLog.h index 744f31883e7..bd6c64f0193 100644 --- a/src/osd/PGLog.h +++ b/src/osd/PGLog.h @@ -646,14 +646,16 @@ public: void write_log(ObjectStore::Transaction& t, map *km, const coll_t& coll, - const ghobject_t &log_oid); + const ghobject_t &log_oid, + bool require_rollback); static void write_log( ObjectStore::Transaction& t, map* km, pg_log_t &log, const coll_t& coll, - const ghobject_t &log_oid, map &divergent_priors); + const ghobject_t &log_oid, map &divergent_priors, + bool require_rollback); static void _write_log( ObjectStore::Transaction& t, @@ -667,6 +669,7 @@ public: const set &trimmed, bool dirty_divergent_priors, bool touch_log, + bool require_rollback, set *log_keys_debug ); diff --git a/src/tools/ceph_objectstore_tool.cc b/src/tools/ceph_objectstore_tool.cc index 8eb7dcf534b..3a06fff72f4 100644 --- a/src/tools/ceph_objectstore_tool.cc +++ b/src/tools/ceph_objectstore_tool.cc @@ -545,7 +545,7 @@ int write_pg(ObjectStore::Transaction &t, epoch_t epoch, pg_info_t &info, return ret; coll_t coll(info.pgid); map km; - PGLog::write_log(t, &km, log, coll, info.pgid.make_pgmeta_oid(), divergent_priors); + PGLog::write_log(t, &km, log, coll, info.pgid.make_pgmeta_oid(), divergent_priors, true); t.omap_setkeys(coll, info.pgid.make_pgmeta_oid(), km); return 0; }