From: Samuel Just Date: Wed, 13 Feb 2013 22:29:21 +0000 (-0800) Subject: PG,OSD: convert write_info users to write_if_dirty X-Git-Tag: v0.58~76^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1334a424ede9f9396935bfef31444932a9e64a8c;p=ceph.git PG,OSD: convert write_info users to write_if_dirty Also, explicitely dirty info and biginfo where necessary. Signed-off-by: Samuel Just --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 459df1be2e12..651346d824bc 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -1743,7 +1743,8 @@ void OSD::build_past_intervals_parallel() for (map::iterator i = pis.begin(); i != pis.end(); ++i) { PG *pg = i->first; pg->dirty_big_info = true; - pg->write_info(t); + pg->dirty_info = true; + pg->write_if_dirty(t); // don't let the transaction get too big if (++num >= g_conf->osd_target_transaction_size) { @@ -5431,7 +5432,8 @@ void OSD::handle_pg_trim(OpRequestRef op) // primary is instructing us to trim ObjectStore::Transaction *t = new ObjectStore::Transaction; pg->trim(*t, m->trim_to); - pg->write_info(*t); + pg->dirty_info = true; + pg->write_if_dirty(*t); int tr = store->queue_transaction(pg->osr.get(), t, new ObjectStore::C_DeleteTransaction(t)); assert(tr == 0); diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 8f2933d40d56..9e5efba63bd6 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -1769,7 +1769,8 @@ void PG::_activate_committed(epoch_t e) if (dirty_info) { ObjectStore::Transaction *t = new ObjectStore::Transaction; - write_info(*t); + dirty_info = true; + write_if_dirty(*t); int tr = osd->store->queue_transaction(osr.get(), t); assert(tr == 0); } @@ -2318,8 +2319,10 @@ void PG::init(int role, vector& newup, vector& newacting, pg_history_t reg_next_scrub(); - write_info(*t); - write_log(*t); + dirty_info = true; + dirty_big_info = true; + dirty_log = true; + write_if_dirty(*t); } void PG::write_info(ObjectStore::Transaction& t) @@ -2431,7 +2434,7 @@ void PG::write_log(ObjectStore::Transaction& t) void PG::write_if_dirty(ObjectStore::Transaction& t) { - if (dirty_info) + if (dirty_big_info || dirty_info) write_info(t); if (dirty_log) write_log(t); @@ -2555,7 +2558,8 @@ void PG::append_log( trim(t, trim_to); // update the local pg, pg log - write_info(t); + dirty_info = true; + write_if_dirty(t); } bool PG::check_log_for_corruption(ObjectStore *store) @@ -2740,7 +2744,8 @@ void PG::read_state(ObjectStore *store, bufferlist &bl) t.create_collection(cr_log_coll); t.collection_move(cr_log_coll, coll_t::META_COLL, log_oid); t.touch(coll_t::META_COLL, log_oid); - write_info(t); + dirty_info = true; + write_if_dirty(t); store->apply_transaction(t); info.last_backfill = hobject_t(); @@ -2791,8 +2796,10 @@ coll_t PG::make_snap_collection(ObjectStore::Transaction& t, snapid_t s) coll_t c(info.pgid, s); if (!snap_collections.contains(s)) { snap_collections.insert(s); - write_info(t); - dout(10) << "create_snap_collection " << c << ", set now " << snap_collections << dendl; + dirty_big_info = true; + write_if_dirty(t); + dout(10) << "create_snap_collection " << c << ", set now " + << snap_collections << dendl; t.create_collection(c); } return c; @@ -4311,7 +4318,8 @@ void PG::scrub_finish() { { ObjectStore::Transaction *t = new ObjectStore::Transaction; - write_info(*t); + dirty_info = true; + write_if_dirty(*t); int tr = osd->store->queue_transaction(osr.get(), t); assert(tr == 0); } diff --git a/src/osd/PG.h b/src/osd/PG.h index 379037181d78..a60de9a5f201 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -1777,8 +1777,10 @@ public: // pg on-disk state void do_pending_flush(); +private: void write_info(ObjectStore::Transaction& t); void write_log(ObjectStore::Transaction& t); +public: void write_if_dirty(ObjectStore::Transaction& t); diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 635fde6cc650..7a2aba6efcc3 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1246,7 +1246,8 @@ void ReplicatedPG::do_backfill(OpRequestRef op) info.stats.stats = m->stats; ObjectStore::Transaction *t = new ObjectStore::Transaction; - write_info(*t); + dirty_info = true; + write_if_dirty(*t); int tr = osd->store->queue_transaction(osr.get(), t); assert(tr == 0); } @@ -5298,7 +5299,8 @@ void ReplicatedPG::submit_push_complete(ObjectRecoveryInfo &recovery_info, recover_got(recovery_info.soid, recovery_info.version); // update pg - write_info(*t); + dirty_info = true; + write_if_dirty(*t); } ObjectRecoveryInfo ReplicatedPG::recalc_subsets(const ObjectRecoveryInfo& recovery_info) @@ -6160,7 +6162,8 @@ void ReplicatedPG::mark_all_unfound_lost(int what) if (missing.num_missing() == 0) { // advance last_complete since nothing else is missing! info.last_complete = info.last_update; - write_info(*t); + dirty_info = true; + write_if_dirty(*t); } osd->store->queue_transaction(osr.get(), t, c, NULL, new C_OSD_OndiskWriteUnlockList(&c->obcs)); @@ -7397,7 +7400,8 @@ boost::statechart::result ReplicatedPG::NotTrimming::react(const SnapTrim&) ObjectStore::Transaction *t = new ObjectStore::Transaction; pg->snap_collections.erase(snap_to_trim); t->remove_collection(col_to_trim); - pg->write_info(*t); + pg->dirty_big_info = true; + pg->write_if_dirty(*t); int r = pg->osd->store->queue_transaction( NULL, t, new ObjectStore::C_DeleteTransaction(t)); assert(r == 0); @@ -7453,7 +7457,8 @@ boost::statechart::result ReplicatedPG::RepColTrim::react(const SnapTrim&) } t->remove_collection(col_to_trim); pg->snap_collections.erase(snap_to_trim); - pg->write_info(*t); + pg->dirty_big_info = true; + pg->write_if_dirty(*t); int r = pg->osd->store->queue_transaction(NULL, t, new ObjectStore::C_DeleteTransaction(t)); assert(r == 0); return discard_event(); @@ -7563,7 +7568,8 @@ boost::statechart::result ReplicatedPG::WaitingOnReplicas::react(const SnapTrim& ObjectStore::Transaction *t = new ObjectStore::Transaction; dout(10) << "removing snap " << sn << " collection " << c << dendl; pg->snap_collections.erase(sn); - pg->write_info(*t); + pg->dirty_big_info = true; + pg->write_if_dirty(*t); t->remove_collection(c); int tr = pg->osd->store->queue_transaction(pg->osr.get(), t); assert(tr == 0);