From f526c6d55c8866712c10b64491fe9371f64cf4d5 Mon Sep 17 00:00:00 2001 From: David Zafman Date: Thu, 9 May 2019 10:38:36 -0700 Subject: [PATCH] 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 --- src/osd/PGLog.cc | 6 +++--- src/test/osd/TestPGLog.cc | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/osd/PGLog.cc b/src/osd/PGLog.cc index d7ad0c8dfc776..2a99ea7d8442b 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 27893ede53e90..81bfad982427a 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(); -- 2.39.5