]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
PGLog,PG: use normal log dirtying and writing for append and trim
authorSamuel Just <sam.just@inktank.com>
Thu, 13 Jun 2013 16:57:32 +0000 (09:57 -0700)
committerSamuel Just <sam.just@inktank.com>
Mon, 17 Jun 2013 21:50:53 +0000 (14:50 -0700)
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/OSD.cc
src/osd/PG.cc
src/osd/PGLog.cc
src/osd/PGLog.h
src/osd/ReplicatedPG.cc

index 9f4ccd3b6375d0c7cee79abeca6911fa1ee4d75d..5b499fd649253905570b0a7b70a04af6166f0c2b 100644 (file)
@@ -6087,7 +6087,7 @@ void OSD::handle_pg_trim(OpRequestRef op)
     } else {
       // primary is instructing us to trim
       ObjectStore::Transaction *t = new ObjectStore::Transaction;
-      pg->pg_log.trim(*t, m->trim_to, pg->info, pg->log_oid);
+      pg->pg_log.trim(m->trim_to, pg->info);
       pg->dirty_info = true;
       pg->write_if_dirty(*t);
       int tr = store->queue_transaction(pg->osr.get(), t,
index d1ebef0642322ca51da375bc4954b269dbbab507..d925ff2472075316192495c245a3b36624d98333 100644 (file)
@@ -2295,7 +2295,7 @@ void PG::append_log(
   dout(10) << "append_log  adding " << keys.size() << " keys" << dendl;
   t.omap_setkeys(coll_t::META_COLL, log_oid, keys);
 
-  pg_log.trim(t, trim_to, info, log_oid);
+  pg_log.trim(trim_to, info);
 
   // update the local pg, pg log
   dirty_info = true;
index 011da4c0e671fd55a680e031b63a0084969ec0c7..17032473b96290e97f0be62ca926ae80089d7520 100644 (file)
@@ -64,7 +64,7 @@ void PGLog::IndexedLog::split_into(
   index();
 }
 
-void PGLog::IndexedLog::trim(ObjectStore::Transaction& t, hobject_t& log_oid, eversion_t s)
+void PGLog::IndexedLog::trim(eversion_t s)
 {
   if (complete_to != log.end() &&
       complete_to->version <= s) {
@@ -72,17 +72,14 @@ void PGLog::IndexedLog::trim(ObjectStore::Transaction& t, hobject_t& log_oid, ev
                    << " on " << *this << dendl;
   }
 
-  set<string> keys_to_rm;
   while (!log.empty()) {
     pg_log_entry_t &e = *log.begin();
     if (e.version > s)
       break;
     generic_dout(20) << "trim " << e << dendl;
     unindex(e);         // remove from index,
-    keys_to_rm.insert(e.get_key_name());
     log.pop_front();    // from log
   }
-  t.omap_rmkeys(coll_t::META_COLL, log_oid, keys_to_rm);
 
   // raise tail?
   if (tail < s)
@@ -133,7 +130,7 @@ void PGLog::clear_info_log(
   t->omap_rmkeys(coll_t::META_COLL, infos_oid, keys_to_remove);
 }
 
-void PGLog::trim(ObjectStore::Transaction& t, eversion_t trim_to, pg_info_t &info, hobject_t &log_oid)
+void PGLog::trim(eversion_t trim_to, pg_info_t &info)
 {
   // trim?
   if (trim_to > log.tail) {
@@ -145,8 +142,14 @@ void PGLog::trim(ObjectStore::Transaction& t, eversion_t trim_to, pg_info_t &inf
     assert(trim_to <= info.last_complete);
 
     dout(10) << "trim " << log << " to " << trim_to << dendl;
-    log.trim(t, log_oid, trim_to);
+    log.trim(trim_to);
     info.log_tail = log.tail;
+
+    if (log.log.empty()) {
+      mark_dirty_to(eversion_t::max());
+    } else {
+      mark_dirty_to(log.log.front().version);
+    }
   }
 }
 
index 58a74ca76da67ec01cc38e774075d7dca2f531dd..e8f86ce56f997f945364b04666b6f5fa02bd9c71 100644 (file)
@@ -141,7 +141,7 @@ struct PGLog {
        caller_ops[e.reqid] = &(log.back());
     }
 
-    void trim(ObjectStore::Transaction &t, hobject_t& oid, eversion_t s);
+    void trim(eversion_t s);
 
     ostream& print(ostream& out) const;
   };
@@ -267,7 +267,10 @@ public:
 
   void unindex() { log.unindex(); }
 
-  void add(pg_log_entry_t& e) { log.add(e); }
+  void add(pg_log_entry_t& e) {
+    mark_dirty_from(e.version);
+    log.add(e);
+  }
 
   void reset_recovery_pointers() { log.reset_recovery_pointers(); }
 
@@ -277,7 +280,7 @@ public:
     const hobject_t &log_oid,
     ObjectStore::Transaction *t);
 
-  void trim(ObjectStore::Transaction& t, eversion_t trim_to, pg_info_t &info, hobject_t &log_oid);
+  void trim(eversion_t trim_to, pg_info_t &info);
 
   //////////////////// get or set log & missing ////////////////////
 
index af59803c660f76bdf925bf55cfd95e44d70a7094..4ce0404740c8ed1b37806df0830b4fd88a9ba05f 100644 (file)
@@ -4868,7 +4868,9 @@ void ReplicatedPG::sub_op_modify(OpRequestRef op)
   } else {
     // just trim the log
     if (m->pg_trim_to != eversion_t()) {
-      pg_log.trim(rm->localt, m->pg_trim_to, info, log_oid);
+      pg_log.trim(m->pg_trim_to, info);
+      dirty_info = true;
+      write_if_dirty(rm->localt);
       rm->tls.push_back(&rm->localt);
     }
   }