From: David Zafman Date: Thu, 9 May 2019 17:38:36 +0000 (-0700) Subject: osd: Fix merge_log_dups() not remove dup corresponding to log.tail X-Git-Tag: v15.1.0~2692^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F27914%2Fhead;p=ceph.git osd: Fix merge_log_dups() not remove dup corresponding to log.tail The log tail is not inclusive of the log, so not an overlap Fix unittest_pglog to verify proper operation Signed-off-by: David Zafman --- diff --git a/src/osd/PGLog.cc b/src/osd/PGLog.cc index d7ad0c8dfc77..2a99ea7d8442 100644 --- a/src/osd/PGLog.cc +++ b/src/osd/PGLog.cc @@ -572,12 +572,12 @@ bool PGLog::merge_log_dups(const pg_log_t& olog) { } // remove any dup entries that overlap with pglog - if (!log.dups.empty() && log.dups.back().version >= log.tail) { - dout(10) << "merge_log removed dups overlapping log entries [" << + if (!log.dups.empty() && log.dups.back().version > log.tail) { + dout(10) << "merge_log removed dups overlapping log entries (" << log.tail << "," << log.dups.back().version << "]" << dendl; changed = true; - while (!log.dups.empty() && log.dups.back().version >= log.tail) { + while (!log.dups.empty() && log.dups.back().version > log.tail) { log.unindex(log.dups.back()); mark_dirty_from_dups(log.dups.back().version); log.dups.pop_back(); diff --git a/src/test/osd/TestPGLog.cc b/src/test/osd/TestPGLog.cc index 27893ede53e9..81bfad982427 100644 --- a/src/test/osd/TestPGLog.cc +++ b/src/test/osd/TestPGLog.cc @@ -2548,14 +2548,14 @@ TEST_F(PGLogMergeDupsTest, AmEmptyOverlap) { bool changed = merge_log_dups(olog); EXPECT_TRUE(changed); - EXPECT_EQ(3u, log.dups.size()); + EXPECT_EQ(4u, log.dups.size()); - if (3 == log.dups.size()) { + if (4 == log.dups.size()) { EXPECT_EQ(10u, log.dups.front().version.epoch); EXPECT_EQ(11u, log.dups.front().version.version); - EXPECT_EQ(11u, log.dups.back().version.epoch); - EXPECT_EQ(1u, log.dups.back().version.version); + EXPECT_EQ(12u, log.dups.back().version.epoch); + EXPECT_EQ(3u, log.dups.back().version.version); } check_order(); @@ -2601,14 +2601,14 @@ TEST_F(PGLogMergeDupsTest, Later) { bool changed = merge_log_dups(olog); EXPECT_TRUE(changed); - EXPECT_EQ(6u, log.dups.size()); + EXPECT_EQ(7u, log.dups.size()); - if (6 == log.dups.size()) { + if (7 == log.dups.size()) { EXPECT_EQ(10u, log.dups.front().version.epoch); EXPECT_EQ(11u, log.dups.front().version.version); - EXPECT_EQ(15u, log.dups.back().version.epoch); - EXPECT_EQ(11u, log.dups.back().version.version); + EXPECT_EQ(16u, log.dups.back().version.epoch); + EXPECT_EQ(14u, log.dups.back().version.version); } check_order();