]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
tests: updated journal tests to support new commit API
authorJason Dillaman <dillaman@redhat.com>
Fri, 17 Jul 2015 15:29:54 +0000 (11:29 -0400)
committerJason Dillaman <dillaman@redhat.com>
Fri, 6 Nov 2015 01:42:42 +0000 (20:42 -0500)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/test/journal/test_FutureImpl.cc
src/test/journal/test_JournalPlayer.cc
src/test/journal/test_JournalTrimmer.cc
src/test/journal/test_ObjectRecorder.cc

index 943c764dcf5349c4fff937a59fd66a5386325335..5d5bb04c1d71f2246f7c798e36da08bb78b5a7f7 100644 (file)
@@ -41,10 +41,12 @@ public:
   }
 
   journal::FutureImplPtr create_future(const std::string &tag, uint64_t tid,
+                                       uint64_t commit_tid,
                                        const journal::FutureImplPtr &prev =
                                          journal::FutureImplPtr()) {
     journal::FutureImplPtr future(new journal::FutureImpl(*m_finisher,
-                                                          tag, tid));
+                                                          tag, tid,
+                                                          commit_tid));
     future->init(prev);
     return future;
   }
@@ -57,14 +59,21 @@ public:
   FlushHandler m_flush_handler;
 };
 
+TEST_F(TestFutureImpl, Getters) {
+  journal::FutureImplPtr future = create_future("tag", 123, 456);
+  ASSERT_EQ("tag", future->get_tag());
+  ASSERT_EQ(123U, future->get_tid());
+  ASSERT_EQ(456U, future->get_commit_tid());
+}
+
 TEST_F(TestFutureImpl, Attach) {
-  journal::FutureImplPtr future = create_future("tag", 123);
+  journal::FutureImplPtr future = create_future("tag", 123, 456);
   ASSERT_FALSE(future->attach(&m_flush_handler));
   ASSERT_EQ(1U, m_flush_handler.refs);
 }
 
 TEST_F(TestFutureImpl, AttachWithPendingFlush) {
-  journal::FutureImplPtr future = create_future("tag", 123);
+  journal::FutureImplPtr future = create_future("tag", 123, 456);
   future->flush(NULL);
 
   ASSERT_TRUE(future->attach(&m_flush_handler));
@@ -72,21 +81,21 @@ TEST_F(TestFutureImpl, AttachWithPendingFlush) {
 }
 
 TEST_F(TestFutureImpl, Detach) {
-  journal::FutureImplPtr future = create_future("tag", 123);
+  journal::FutureImplPtr future = create_future("tag", 123, 456);
   ASSERT_FALSE(future->attach(&m_flush_handler));
   future->detach();
   ASSERT_EQ(0U, m_flush_handler.refs);
 }
 
 TEST_F(TestFutureImpl, DetachImplicit) {
-  journal::FutureImplPtr future = create_future("tag", 123);
+  journal::FutureImplPtr future = create_future("tag", 123, 456);
   ASSERT_FALSE(future->attach(&m_flush_handler));
   future.reset();
   ASSERT_EQ(0U, m_flush_handler.refs);
 }
 
 TEST_F(TestFutureImpl, Flush) {
-  journal::FutureImplPtr future = create_future("tag", 123);
+  journal::FutureImplPtr future = create_future("tag", 123, 456);
   ASSERT_FALSE(future->attach(&m_flush_handler));
 
   C_SaferCond cond;
@@ -98,7 +107,7 @@ TEST_F(TestFutureImpl, Flush) {
 }
 
 TEST_F(TestFutureImpl, FlushWithoutContext) {
-  journal::FutureImplPtr future = create_future("tag", 123);
+  journal::FutureImplPtr future = create_future("tag", 123, 456);
   ASSERT_FALSE(future->attach(&m_flush_handler));
 
   future->flush(NULL);
@@ -109,9 +118,9 @@ TEST_F(TestFutureImpl, FlushWithoutContext) {
 }
 
 TEST_F(TestFutureImpl, FlushChain) {
-  journal::FutureImplPtr future1 = create_future("tag1", 123);
-  journal::FutureImplPtr future2 = create_future("tag1", 124, future1);
-  journal::FutureImplPtr future3 = create_future("tag2", 1, future2);
+  journal::FutureImplPtr future1 = create_future("tag1", 123, 456);
+  journal::FutureImplPtr future2 = create_future("tag1", 124, 457, future1);
+  journal::FutureImplPtr future3 = create_future("tag2", 1, 458, future2);
   ASSERT_FALSE(future1->attach(&m_flush_handler));
   ASSERT_FALSE(future2->attach(&m_flush_handler));
   ASSERT_FALSE(future3->attach(&m_flush_handler));
@@ -135,8 +144,8 @@ TEST_F(TestFutureImpl, FlushChain) {
 }
 
 TEST_F(TestFutureImpl, FlushInProgress) {
-  journal::FutureImplPtr future1 = create_future("tag1", 123);
-  journal::FutureImplPtr future2 = create_future("tag1", 124, future1);
+  journal::FutureImplPtr future1 = create_future("tag1", 123, 456);
+  journal::FutureImplPtr future2 = create_future("tag1", 124, 457, future1);
   ASSERT_FALSE(future1->attach(&m_flush_handler));
   ASSERT_FALSE(future2->attach(&m_flush_handler));
 
@@ -150,7 +159,7 @@ TEST_F(TestFutureImpl, FlushInProgress) {
 }
 
 TEST_F(TestFutureImpl, FlushAlreadyComplete) {
-  journal::FutureImplPtr future = create_future("tag1", 123);
+  journal::FutureImplPtr future = create_future("tag1", 123, 456);
   future->safe(-EIO);
 
   C_SaferCond cond;
@@ -159,7 +168,7 @@ TEST_F(TestFutureImpl, FlushAlreadyComplete) {
 }
 
 TEST_F(TestFutureImpl, Wait) {
-  journal::FutureImplPtr future = create_future("tag", 1);
+  journal::FutureImplPtr future = create_future("tag", 1, 456);
 
   C_SaferCond cond;
   future->wait(&cond);
@@ -168,7 +177,7 @@ TEST_F(TestFutureImpl, Wait) {
 }
 
 TEST_F(TestFutureImpl, WaitAlreadyComplete) {
-  journal::FutureImplPtr future = create_future("tag", 1);
+  journal::FutureImplPtr future = create_future("tag", 1, 456);
   future->safe(-EEXIST);
 
   C_SaferCond cond;
@@ -177,8 +186,8 @@ TEST_F(TestFutureImpl, WaitAlreadyComplete) {
 }
 
 TEST_F(TestFutureImpl, SafePreservesError) {
-  journal::FutureImplPtr future1 = create_future("tag1", 123);
-  journal::FutureImplPtr future2 = create_future("tag1", 124, future1);
+  journal::FutureImplPtr future1 = create_future("tag1", 123, 456);
+  journal::FutureImplPtr future2 = create_future("tag1", 124, 457, future1);
 
   future1->safe(-EIO);
   future2->safe(-EEXIST);
@@ -187,8 +196,8 @@ TEST_F(TestFutureImpl, SafePreservesError) {
 }
 
 TEST_F(TestFutureImpl, ConsistentPreservesError) {
-  journal::FutureImplPtr future1 = create_future("tag1", 123);
-  journal::FutureImplPtr future2 = create_future("tag1", 124, future1);
+  journal::FutureImplPtr future1 = create_future("tag1", 123, 456);
+  journal::FutureImplPtr future2 = create_future("tag1", 124, 457, future1);
 
   future2->safe(-EEXIST);
   future1->safe(-EIO);
index 6a0663f24715e618d58fbf46ebcaafea11ab0b69..19a256d19dca89cf36cd6edf955e45b39c8f923b 100644 (file)
@@ -96,9 +96,9 @@ public:
     entries->clear();
     while (entries->size() < count) {
       journal::Entry entry;
-      journal::JournalPlayer::ObjectSetPosition object_set_position;
+      uint64_t commit_tid;
       while (entries->size() < count &&
-             player->try_pop_front(&entry, &object_set_position)) {
+             player->try_pop_front(&entry, &commit_tid)) {
         entries->push_back(entry);
       }
       if (entries->size() == count) {
@@ -119,8 +119,8 @@ public:
 
   bool wait_for_complete(journal::JournalPlayer *player) {
     journal::Entry entry;
-    journal::JournalPlayer::ObjectSetPosition object_set_position;
-    player->try_pop_front(&entry, &object_set_position);
+    uint64_t commit_tid;
+    player->try_pop_front(&entry, &commit_tid);
 
     Mutex::Locker locker(m_replay_hander.lock);
     while (!m_replay_hander.complete) {
@@ -279,8 +279,8 @@ TEST_F(TestJournalPlayer, PrefetchCorruptSequence) {
   ASSERT_TRUE(wait_for_entries(player, 3, &entries));
 
   journal::Entry entry;
-  cls::journal::ObjectSetPosition object_set_position;
-  ASSERT_FALSE(player->try_pop_front(&entry, &object_set_position));
+  uint64_t commit_tid;
+  ASSERT_FALSE(player->try_pop_front(&entry, &commit_tid));
   ASSERT_TRUE(wait_for_complete(player));
   ASSERT_NE(0, m_replay_hander.complete_result);
 }
index f715affb0c4fe2ef629035e98acfa327f655c412..ff1f6b82f718b7c20d244720a88ce436a9eac4fe 100644 (file)
@@ -3,6 +3,7 @@
 
 #include "journal/JournalTrimmer.h"
 #include "journal/JournalMetadata.h"
+#include "include/stringify.h"
 #include "test/journal/RadosTestFixture.h"
 #include <limits>
 #include <list>
@@ -22,6 +23,17 @@ public:
     RadosTestFixture::TearDown();
   }
 
+  int append_payload(journal::JournalMetadataPtr metadata,
+                     const std::string &oid, uint64_t object_num,
+                     const std::string &payload, uint64_t *commit_tid) {
+    int r = append(oid + "." + stringify(object_num), create_payload(payload));
+    uint64_t tid = metadata->allocate_commit_tid(object_num, "tag", 123);
+    if (commit_tid != NULL) {
+      *commit_tid = tid;
+    }
+    return r;
+  }
+
   using RadosTestFixture::client_register;
   int client_register(const std::string &oid) {
     return RadosTestFixture::client_register(oid, "client", "");
@@ -54,7 +66,7 @@ public:
   std::list<journal::JournalTrimmer*> m_trimmers;
 };
 
-TEST_F(TestJournalTrimmer, UpdateCommitPosition) {
+TEST_F(TestJournalTrimmer, Committed) {
   std::string oid = get_temp_oid();
   ASSERT_EQ(0, create(oid, 12, 2));
   ASSERT_EQ(0, client_register(oid));
@@ -66,72 +78,37 @@ TEST_F(TestJournalTrimmer, UpdateCommitPosition) {
   metadata->set_active_set(10);
   ASSERT_TRUE(wait_for_update(metadata));
 
-  ASSERT_EQ(0, append(oid + ".0", create_payload("payload")));
-  ASSERT_EQ(0, append(oid + ".2", create_payload("payload")));
-  ASSERT_EQ(0, append(oid + ".3", create_payload("payload")));
-  ASSERT_EQ(0, append(oid + ".5", create_payload("payload")));
+  uint64_t commit_tid1;
+  uint64_t commit_tid2;
+  uint64_t commit_tid3;
+  uint64_t commit_tid4;
+  uint64_t commit_tid5;
+  uint64_t commit_tid6;
+  ASSERT_EQ(0, append_payload(metadata, oid, 0, "payload", &commit_tid1));
+  ASSERT_EQ(0, append_payload(metadata, oid, 2, "payload", &commit_tid2));
+  ASSERT_EQ(0, append_payload(metadata, oid, 5, "payload", &commit_tid3));
+  ASSERT_EQ(0, append_payload(metadata, oid, 0, "payload", &commit_tid4));
+  ASSERT_EQ(0, append_payload(metadata, oid, 2, "payload", &commit_tid5));
+  ASSERT_EQ(0, append_payload(metadata, oid, 5, "payload", &commit_tid6));
 
   journal::JournalTrimmer *trimmer = create_trimmer(oid, metadata);
 
-  cls::journal::EntryPositions entry_positions;
-  cls::journal::ObjectSetPosition object_set_position(5, entry_positions);
-
-  trimmer->update_commit_position(object_set_position);
-
+  trimmer->committed(commit_tid4);
+  trimmer->committed(commit_tid6);
+  trimmer->committed(commit_tid2);
+  trimmer->committed(commit_tid5);
+  trimmer->committed(commit_tid3);
+  trimmer->committed(commit_tid1);
   while (metadata->get_minimum_set() != 2U) {
     ASSERT_TRUE(wait_for_update(metadata));
   }
 
   ASSERT_EQ(-ENOENT, assert_exists(oid + ".0"));
   ASSERT_EQ(-ENOENT, assert_exists(oid + ".2"));
-  ASSERT_EQ(-ENOENT, assert_exists(oid + ".3"));
   ASSERT_EQ(0, assert_exists(oid + ".5"));
 }
 
-TEST_F(TestJournalTrimmer, ConcurrentUpdateCommitPosition) {
-  std::string oid = get_temp_oid();
-  ASSERT_EQ(0, create(oid, 12, 2));
-  ASSERT_EQ(0, client_register(oid));
-
-  journal::JournalMetadataPtr metadata1 = create_metadata(oid);
-  ASSERT_EQ(0, init_metadata(metadata1));
-  ASSERT_TRUE(wait_for_update(metadata1));
-
-  metadata1->set_active_set(10);
-  ASSERT_TRUE(wait_for_update(metadata1));
-
-  journal::JournalMetadataPtr metadata2 = create_metadata(oid);
-  ASSERT_EQ(0, init_metadata(metadata2));
-
-  ASSERT_EQ(0, append(oid + ".0", create_payload("payload")));
-  ASSERT_EQ(0, append(oid + ".2", create_payload("payload")));
-  ASSERT_EQ(0, append(oid + ".3", create_payload("payload")));
-  ASSERT_EQ(0, append(oid + ".5", create_payload("payload")));
-
-  journal::JournalTrimmer *trimmer1 = create_trimmer(oid, metadata1);
-  journal::JournalTrimmer *trimmer2 = create_trimmer(oid, metadata2);
-
-  cls::journal::EntryPositions entry_positions;
-  cls::journal::ObjectSetPosition object_set_position1(2, entry_positions);
-  trimmer1->update_commit_position(object_set_position1);
-
-  cls::journal::ObjectSetPosition object_set_position2(5, entry_positions);
-  trimmer2->update_commit_position(object_set_position2);
-
-  while (metadata1->get_minimum_set() != 2U) {
-    ASSERT_TRUE(wait_for_update(metadata1));
-  }
-  while (metadata2->get_minimum_set() != 2U) {
-    ASSERT_TRUE(wait_for_update(metadata2));
-  }
-
-  ASSERT_EQ(-ENOENT, assert_exists(oid + ".0"));
-  ASSERT_EQ(-ENOENT, assert_exists(oid + ".2"));
-  ASSERT_EQ(-ENOENT, assert_exists(oid + ".3"));
-  ASSERT_EQ(0, assert_exists(oid + ".5"));
-}
-
-TEST_F(TestJournalTrimmer, UpdateCommitPositionWithOtherClient) {
+TEST_F(TestJournalTrimmer, CommittedWithOtherClient) {
   std::string oid = get_temp_oid();
   ASSERT_EQ(0, create(oid, 12, 2));
   ASSERT_EQ(0, client_register(oid));
@@ -144,17 +121,21 @@ TEST_F(TestJournalTrimmer, UpdateCommitPositionWithOtherClient) {
   metadata->set_active_set(10);
   ASSERT_TRUE(wait_for_update(metadata));
 
-  ASSERT_EQ(0, append(oid + ".0", create_payload("payload")));
-  ASSERT_EQ(0, append(oid + ".2", create_payload("payload")));
-  ASSERT_EQ(0, append(oid + ".3", create_payload("payload")));
-  ASSERT_EQ(0, append(oid + ".5", create_payload("payload")));
+  uint64_t commit_tid1;
+  uint64_t commit_tid2;
+  uint64_t commit_tid3;
+  uint64_t commit_tid4;
+  ASSERT_EQ(0, append_payload(metadata, oid, 0, "payload", &commit_tid1));
+  ASSERT_EQ(0, append_payload(metadata, oid, 2, "payload", &commit_tid2));
+  ASSERT_EQ(0, append_payload(metadata, oid, 3, "payload", &commit_tid3));
+  ASSERT_EQ(0, append_payload(metadata, oid, 5, "payload", &commit_tid4));
 
   journal::JournalTrimmer *trimmer = create_trimmer(oid, metadata);
 
-  cls::journal::EntryPositions entry_positions;
-  cls::journal::ObjectSetPosition object_set_position(5, entry_positions);
-
-  trimmer->update_commit_position(object_set_position);
+  trimmer->committed(commit_tid1);
+  trimmer->committed(commit_tid2);
+  trimmer->committed(commit_tid3);
+  trimmer->committed(commit_tid4);
   ASSERT_TRUE(wait_for_update(metadata));
 
   ASSERT_EQ(0, assert_exists(oid + ".0"));
index 50e9503f98dfd26e2eb6c69b0c1ac0fe7eab558f..bbe18eaa1ed7cb35c340654882424298e38e1ab8 100644 (file)
@@ -85,7 +85,7 @@ public:
                                              uint64_t tid,
                                              const std::string &payload) {
     journal::FutureImplPtr future(new journal::FutureImpl(*m_finisher,
-                                                          tag, tid));
+                                                          tag, tid, 456));
     future->init(journal::FutureImplPtr());
 
     bufferlist bl;