summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2008-11-13 16:37:56 -0800
committerSage Weil <sage@newdream.net>2008-11-13 16:37:56 -0800
commit200c5699bb3b79fe9f237237206ded415c5d31b9 (patch)
tree443fd2d9473fa23fe54adaaa140b52475dd3c129
parent8c1908a8a71a3ca5ff42768c3d3040c9cfe35321 (diff)
downloadceph-200c5699bb3b79fe9f237237206ded415c5d31b9.tar.gz
osd: only trim pg log if pg contains complete set of osds
Eventually we may want to also impose some maximum pg log size. At some point the cost of the long log will approach the cost of building a backlog...
-rw-r--r--src/osd/PG.h2
-rw-r--r--src/osd/ReplicatedPG.cc3
2 files changed, 4 insertions, 1 deletions
diff --git a/src/osd/PG.h b/src/osd/PG.h
index 638ac8cbbbb..24e7b86e7f2 100644
--- a/src/osd/PG.h
+++ b/src/osd/PG.h
@@ -724,6 +724,8 @@ public:
bool is_empty() const { return info.last_update == eversion_t(0,0); }
+ bool is_complete_pg() { return acting.size() == info.pgid.size(); }
+
// pg on-disk state
void write_info(ObjectStore::Transaction& t);
void write_log(ObjectStore::Transaction& t);
diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc
index 986623b93fe..27def3f7322 100644
--- a/src/osd/ReplicatedPG.cc
+++ b/src/osd/ReplicatedPG.cc
@@ -1275,7 +1275,8 @@ void ReplicatedPG::issue_repop(RepGather *repop, int dest, utime_t now)
wr->snapset = repop->snapset;
wr->snapc = repop->snapc;
wr->get_data() = repop->op->get_data(); // _copy_ bufferlist
- wr->pg_trim_to = peers_complete_thru;
+ if (is_complete_pg())
+ wr->pg_trim_to = peers_complete_thru;
wr->peer_stat = osd->get_my_stat_for(now, dest);
osd->messenger->send_message(wr, osd->osdmap->get_inst(dest));
}