]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: Fix merge_log_dups() not remove dup corresponding to log.tail 28185/head
authorDavid Zafman <dzafman@redhat.com>
Thu, 9 May 2019 17:38:36 +0000 (10:38 -0700)
committerDavid Zafman <dzafman@redhat.com>
Thu, 28 Mar 2019 08:28:50 +0000 (08:28 +0000)
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 <dzafman@redhat.com>
(cherry picked from commit f526c6d55c8866712c10b64491fe9371f64cf4d5)

src/osd/PGLog.cc
src/test/osd/TestPGLog.cc

index 384609b97dd0c29de9aa3bf8b1c931b7d36c1b60..57e369816a8539d4d2dd7c0504566b43ee487337 100644 (file)
@@ -543,12 +543,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();
index d1417d0ccd07f231c8637718323eb10152b6c48b..f8f1ab9a8cd406ff06a909b78dc2d672f3a146e7 100644 (file)
@@ -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();