summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Just <sam.just@inktank.com>2013-06-13 09:57:32 -0700
committerSamuel Just <sam.just@inktank.com>2013-06-17 14:50:53 -0700
commit962b64a83037ff79855c5261325de0cd1541f582 (patch)
tree44fc785a728774eb7fe124f702a19ebeb82247d2
parent9b6cb63931c28f1c7cf3548771774c4a21aebe24 (diff)
downloadceph-962b64a83037ff79855c5261325de0cd1541f582.tar.gz
PGLog,PG: use normal log dirtying and writing for append and trim
Signed-off-by: Samuel Just <sam.just@inktank.com>
-rw-r--r--src/osd/OSD.cc2
-rw-r--r--src/osd/PG.cc2
-rw-r--r--src/osd/PGLog.cc15
-rw-r--r--src/osd/PGLog.h9
-rw-r--r--src/osd/ReplicatedPG.cc4
5 files changed, 20 insertions, 12 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc
index 9f4ccd3b637..5b499fd6492 100644
--- a/src/osd/OSD.cc
+++ b/src/osd/OSD.cc
@@ -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,
diff --git a/src/osd/PG.cc b/src/osd/PG.cc
index d1ebef06423..d925ff24720 100644
--- a/src/osd/PG.cc
+++ b/src/osd/PG.cc
@@ -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;
diff --git a/src/osd/PGLog.cc b/src/osd/PGLog.cc
index 011da4c0e67..17032473b96 100644
--- a/src/osd/PGLog.cc
+++ b/src/osd/PGLog.cc
@@ -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);
+ }
}
}
diff --git a/src/osd/PGLog.h b/src/osd/PGLog.h
index 58a74ca76da..e8f86ce56f9 100644
--- a/src/osd/PGLog.h
+++ b/src/osd/PGLog.h
@@ -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 ////////////////////
diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc
index af59803c660..4ce0404740c 100644
--- a/src/osd/ReplicatedPG.cc
+++ b/src/osd/ReplicatedPG.cc
@@ -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);
}
}