]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
PG,OSD: convert write_info users to write_if_dirty
authorSamuel Just <sam.just@inktank.com>
Wed, 13 Feb 2013 22:29:21 +0000 (14:29 -0800)
committerSamuel Just <sam.just@inktank.com>
Wed, 13 Feb 2013 23:02:00 +0000 (15:02 -0800)
Also, explicitely dirty info and biginfo where necessary.

Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/OSD.cc
src/osd/PG.cc
src/osd/PG.h
src/osd/ReplicatedPG.cc

index 459df1be2e123135650d6a5e949d3e08d6c471ea..651346d824bc9d7c6dd80139c8cf105ac63a63ed 100644 (file)
@@ -1743,7 +1743,8 @@ void OSD::build_past_intervals_parallel()
   for (map<PG*,pistate>::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);
index 8f2933d40d56a9f0fdf0ddb1e9e528fa39b6b6bd..9e5efba63bd68ebce6804b686f0995be2f1f0643 100644 (file)
@@ -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<int>& newup, vector<int>& 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);
   }
index 379037181d7875036d41cf4bb2dbd791c3ddf786..a60de9a5f201cdd0b9453235671fccee4edc3e83 100644 (file)
@@ -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);
 
index 635fde6cc65066ee8aa70a0000fdd27d46bf8cea..7a2aba6efcc3aa5dce0762035a5c40e7d951e8f5 100644 (file)
@@ -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);