From 7d38e5a424057669440582d7f2a813af7bfdec66 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 19 Nov 2008 10:31:31 -0800 Subject: [PATCH] osd: merge_log fix when logs abut but do not overlap --- src/osd/PG.cc | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index e23831424972e..acb2cf51be1cf 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -372,10 +372,12 @@ void PG::merge_log(ObjectStore::Transaction& t, Log &olog, Missing &omissing, in list::iterator from = olog.log.end(); list::iterator last_kept = olog.log.end(); while (1) { - if (from == olog.log.begin()) break; + if (from == olog.log.begin()) + break; from--; //dout(0) << "? " << *from << dendl; if (from->version <= log.top) { + dout(20) << "merge_log last shared is " << *from << dendl; last_kept = from; from++; break; @@ -390,14 +392,15 @@ void PG::merge_log(ObjectStore::Transaction& t, Log &olog, Missing &omissing, in // move aside divergent items list divergent; - while (1) { - Log::Entry &oe = *log.log.rbegin(); - if (last_kept != olog.log.end() && - oe.version == last_kept->version) - break; - dout(10) << "merge_log divergent " << oe << dendl; - divergent.push_front(oe); - log.log.pop_back(); + if (last_kept != olog.log.end()) { + while (1) { + Log::Entry &oe = *log.log.rbegin(); + if (oe.version == last_kept->version) + break; + dout(10) << "merge_log divergent " << oe << dendl; + divergent.push_front(oe); + log.log.pop_back(); + } } // splice -- 2.39.5