]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test: add a couple lost+delete unit tests 15952/head
authorJosh Durgin <jdurgin@redhat.com>
Sun, 16 Jul 2017 02:28:59 +0000 (22:28 -0400)
committerJosh Durgin <jdurgin@redhat.com>
Wed, 19 Jul 2017 06:47:46 +0000 (02:47 -0400)
Signed-off-by: Josh Durgin <jdurgin@redhat.com>
src/test/osd/TestPGLog.cc
src/test/osd/types.cc

index 993dba2cbe42ae963bc0c44c27d80062fbfb5f02..1a527db5de509e3f8c4079c3e2ce820626c2f436 100644 (file)
@@ -70,6 +70,16 @@ public:
     e.prior_version = pv;
     return e;
   }
+  static pg_log_entry_t mk_ple_ldt(
+    const hobject_t &hoid, eversion_t v, eversion_t pv) {
+    pg_log_entry_t e;
+    e.mark_unrollbackable();
+    e.op = pg_log_entry_t::LOST_DELETE;
+    e.soid = hoid;
+    e.version = v;
+    e.prior_version = pv;
+    return e;
+  }
   static pg_log_entry_t mk_ple_mod_rb(
     const hobject_t &hoid, eversion_t v, eversion_t pv) {
     pg_log_entry_t e;
@@ -1960,6 +1970,19 @@ TEST_F(PGLogTest, merge_log_9) {
   run_test_case(t);
 }
 
+TEST_F(PGLogTest, merge_log_10) {
+  TestCase t;
+  t.base.push_back(mk_ple_mod_rb(mk_obj(1), mk_evt(10, 100), mk_evt(8, 80)));
+
+  t.auth.push_back(mk_ple_ldt(mk_obj(1), mk_evt(11, 101), mk_evt(10, 100)));
+
+  t.init.add(mk_obj(1), mk_evt(10, 100), mk_evt(8, 80), false);
+  t.final.add(mk_obj(1), mk_evt(11, 101), mk_evt(8, 80), true);
+
+  t.setup();
+  run_test_case(t);
+}
+
 TEST_F(PGLogTest, merge_log_prior_version_have) {
   TestCase t;
   t.base.push_back(mk_ple_mod_rb(mk_obj(1), mk_evt(10, 100), mk_evt(8, 80)));
index 5a1020a441c37a6ab242b03e972df6ae24f4dabc..2a26c395a70df2d22ebdd1cea4ea5ebd298d9a86 100644 (file)
@@ -874,9 +874,36 @@ TEST(pg_missing_t, add_next_event)
     EXPECT_TRUE(e.is_delete());
     missing.add_next_event(e);
     EXPECT_TRUE(missing.is_missing(oid));
+    EXPECT_TRUE(missing.get_items().at(oid).is_delete());
     EXPECT_EQ(prior_version, missing.get_items().at(oid).have);
     EXPECT_EQ(version, missing.get_items().at(oid).need);
+    EXPECT_EQ(oid, missing.get_rmissing().at(e.version.version));
+    EXPECT_EQ(1U, missing.num_missing());
+    EXPECT_EQ(1U, missing.get_rmissing().size());
+  }
+
+  // adding a LOST_DELETE after an existing event
+  {
+    pg_missing_t missing;
+    pg_log_entry_t e = sample_e;
+
+    e.op = pg_log_entry_t::MODIFY;
+    EXPECT_TRUE(e.is_update());
+    EXPECT_TRUE(e.object_is_indexed());
+    EXPECT_TRUE(e.reqid_is_indexed());
+    EXPECT_FALSE(missing.is_missing(oid));
+    missing.add_next_event(e);
+    EXPECT_TRUE(missing.is_missing(oid));
+    EXPECT_FALSE(missing.get_items().at(oid).is_delete());
+
+    e.op = pg_log_entry_t::LOST_DELETE;
+    e.version.version++;
+    EXPECT_TRUE(e.is_delete());
+    missing.add_next_event(e);
+    EXPECT_TRUE(missing.is_missing(oid));
     EXPECT_TRUE(missing.get_items().at(oid).is_delete());
+    EXPECT_EQ(prior_version, missing.get_items().at(oid).have);
+    EXPECT_EQ(e.version, missing.get_items().at(oid).need);
     EXPECT_EQ(oid, missing.get_rmissing().at(e.version.version));
     EXPECT_EQ(1U, missing.num_missing());
     EXPECT_EQ(1U, missing.get_rmissing().size());