From fccd28df371dceffaf6ff7a50422b6a5b1ee126c Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Thu, 13 Oct 2011 14:35:13 -0700 Subject: [PATCH] PG: Fix log.empty confusion Previously, log.empty meant that the log.head was everion_t(). However, it was in a few places used to mean that log.head == log.tail. Now, log.empty means log.head == log.tail and log.null() indicates that log.head is eversion_t(). Signed-off-by: Samuel Just --- src/osd/OSD.cc | 2 +- src/osd/PG.cc | 14 +++++++------- src/osd/PG.h | 5 +++++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 780936ddf43bd..9628d5fb41347 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -3973,7 +3973,7 @@ void OSD::split_pg(PG *parent, map& children, ObjectStore::Transaction PG *child = p->second; // fix log bounds - if (!child->log.log.empty()) { + if (!child->log.empty()) { child->log.head = child->log.log.rbegin()->version; child->log.tail = parent->log.tail; child->log.backlog = parent->log.backlog; diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 0a91c53ad50cb..d2ab9688c3eae 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -391,9 +391,9 @@ void PG::merge_log(ObjectStore::Transaction& t, // If our log is empty, the incoming log either needs to have a backlog // or have not been trimmed - assert(!log.empty() || olog.backlog || olog.tail == eversion_t()); + assert(!log.null() || olog.backlog || olog.tail == eversion_t()); // If the logs don't overlap, we need both backlogs - assert(log.head >= olog.tail || ((log.backlog || log.empty()) && olog.backlog)); + assert(log.head >= olog.tail || ((log.backlog || log.null()) && olog.backlog)); for (map::iterator i = missing.missing.begin(); i != missing.missing.end(); @@ -529,7 +529,7 @@ void PG::merge_log(ObjectStore::Transaction& t, // move aside divergent items list divergent; - while (!log.log.empty()) { + while (!log.empty()) { Log::Entry &oe = *log.log.rbegin(); /* * look at eversion.version here. we want to avoid a situation like: @@ -825,7 +825,7 @@ void PG::drop_backlog() log.backlog = false; info.log_backlog = false; - while (!log.log.empty()) { + while (!log.empty()) { Log::Entry &e = *log.log.begin(); if (e.version > log.tail) break; @@ -2200,7 +2200,7 @@ void PG::read_log(ObjectStore *store) PG::Log::Entry e; bufferlist::iterator p = bl.begin(); - assert(log.log.empty()); + assert(log.empty()); eversion_t last; bool reorder = false; while (!p.end()) { @@ -2508,7 +2508,7 @@ void PG::log_weirdness() << " != info.last_update " << info.last_update << "\n"; - if (log.log.empty()) { + if (log.empty()) { // shoudl it be? if (log.head != log.tail) osd->clog.error() << info.pgid @@ -3882,7 +3882,7 @@ ostream& operator<<(ostream& out, const PG& pg) pg.log.head != pg.info.last_update) out << " (info mismatch, " << pg.log << ")"; - if (pg.log.log.empty()) { + if (pg.log.empty()) { // shoudl it be? if (pg.log.head.version - pg.log.tail.version != 0) { out << " (log bound mismatch, empty)"; diff --git a/src/osd/PG.h b/src/osd/PG.h index f57145a1cf7f2..7592176517ab7 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -457,7 +457,12 @@ public: backlog = false; log.clear(); } + bool empty() const { + return log.empty(); + } + + bool null() const { return head.version == 0 && head.epoch == 0; } -- 2.39.5