]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/test/journal/test_JournalRecorder.cc
import 15.2.0 Octopus source
[ceph.git] / ceph / src / test / journal / test_JournalRecorder.cc
index 7197526a1ce409cc2db20f3be98f6cd12faf1fdb..466ee2741286b29b7f3eb41681a6e51f5d6c00b5 100644 (file)
@@ -7,30 +7,26 @@
 #include "test/journal/RadosTestFixture.h"
 #include <limits>
 #include <list>
+#include <memory>
 
 class TestJournalRecorder : public RadosTestFixture {
 public:
-
-  void TearDown() override {
-    for (std::list<journal::JournalRecorder*>::iterator it = m_recorders.begin();
-         it != m_recorders.end(); ++it) {
-      delete *it;
-    }
-    RadosTestFixture::TearDown();
-  }
-
-  journal::JournalRecorder *create_recorder(
-      const std::string &oid, const journal::JournalMetadataPtr &metadata) {
-    journal::JournalRecorder *recorder(new journal::JournalRecorder(
-        m_ioctx, oid + ".", metadata, 0));
-    recorder->set_append_batch_options(0, std::numeric_limits<uint32_t>::max(),
-                                       0);
-    m_recorders.push_back(recorder);
+  using JournalRecorderPtr = std::unique_ptr<journal::JournalRecorder,
+                                            std::function<void(journal::JournalRecorder*)>>;
+  JournalRecorderPtr create_recorder(
+      const std::string &oid, const ceph::ref_t<journal::JournalMetadata>& metadata) {
+    JournalRecorderPtr recorder{
+      new journal::JournalRecorder(m_ioctx, oid + ".", metadata, 0),
+      [](journal::JournalRecorder* recorder) {
+       C_SaferCond cond;
+       recorder->shut_down(&cond);
+       cond.wait();
+       delete recorder;
+      }
+    };
+    recorder->set_append_batch_options(0, std::numeric_limits<uint32_t>::max(), 0);
     return recorder;
   }
-
-  std::list<journal::JournalRecorder*> m_recorders;
-
 };
 
 TEST_F(TestJournalRecorder, Append) {
@@ -38,10 +34,10 @@ TEST_F(TestJournalRecorder, Append) {
   ASSERT_EQ(0, create(oid, 12, 2));
   ASSERT_EQ(0, client_register(oid));
 
-  journal::JournalMetadataPtr metadata = create_metadata(oid);
+  auto metadata = create_metadata(oid);
   ASSERT_EQ(0, init_metadata(metadata));
 
-  journal::JournalRecorder *recorder = create_recorder(oid, metadata);
+  JournalRecorderPtr recorder = create_recorder(oid, metadata);
 
   journal::Future future1 = recorder->append(123, create_payload("payload"));
 
@@ -55,11 +51,11 @@ TEST_F(TestJournalRecorder, AppendKnownOverflow) {
   ASSERT_EQ(0, create(oid, 12, 2));
   ASSERT_EQ(0, client_register(oid));
 
-  journal::JournalMetadataPtr metadata = create_metadata(oid);
+  auto metadata = create_metadata(oid);
   ASSERT_EQ(0, init_metadata(metadata));
   ASSERT_EQ(0U, metadata->get_active_set());
 
-  journal::JournalRecorder *recorder = create_recorder(oid, metadata);
+  JournalRecorderPtr recorder = create_recorder(oid, metadata);
 
   recorder->append(123, create_payload(std::string(metadata->get_object_size() -
                                                    journal::Entry::get_fixed_size(), '1')));
@@ -77,12 +73,12 @@ TEST_F(TestJournalRecorder, AppendDelayedOverflow) {
   ASSERT_EQ(0, create(oid, 12, 2));
   ASSERT_EQ(0, client_register(oid));
 
-  journal::JournalMetadataPtr metadata = create_metadata(oid);
+  auto metadata = create_metadata(oid);
   ASSERT_EQ(0, init_metadata(metadata));
   ASSERT_EQ(0U, metadata->get_active_set());
 
-  journal::JournalRecorder *recorder1 = create_recorder(oid, metadata);
-  journal::JournalRecorder *recorder2 = create_recorder(oid, metadata);
+  JournalRecorderPtr recorder1 = create_recorder(oid, metadata);
+  JournalRecorderPtr recorder2 = create_recorder(oid, metadata);
 
   recorder1->append(234, create_payload(std::string(1, '1')));
   recorder2->append(123, create_payload(std::string(metadata->get_object_size() -
@@ -102,10 +98,10 @@ TEST_F(TestJournalRecorder, FutureFlush) {
   ASSERT_EQ(0, create(oid, 12, 2));
   ASSERT_EQ(0, client_register(oid));
 
-  journal::JournalMetadataPtr metadata = create_metadata(oid);
+  auto metadata = create_metadata(oid);
   ASSERT_EQ(0, init_metadata(metadata));
 
-  journal::JournalRecorder *recorder = create_recorder(oid, metadata);
+  JournalRecorderPtr recorder = create_recorder(oid, metadata);
 
   journal::Future future1 = recorder->append(123, create_payload("payload1"));
   journal::Future future2 = recorder->append(123, create_payload("payload2"));
@@ -122,10 +118,10 @@ TEST_F(TestJournalRecorder, Flush) {
   ASSERT_EQ(0, create(oid, 12, 2));
   ASSERT_EQ(0, client_register(oid));
 
-  journal::JournalMetadataPtr metadata = create_metadata(oid);
+  auto metadata = create_metadata(oid);
   ASSERT_EQ(0, init_metadata(metadata));
 
-  journal::JournalRecorder *recorder = create_recorder(oid, metadata);
+  JournalRecorderPtr recorder = create_recorder(oid, metadata);
 
   journal::Future future1 = recorder->append(123, create_payload("payload1"));
   journal::Future future2 = recorder->append(123, create_payload("payload2"));
@@ -146,11 +142,11 @@ TEST_F(TestJournalRecorder, OverflowCommitObjectNumber) {
   ASSERT_EQ(0, create(oid, 12, 2));
   ASSERT_EQ(0, client_register(oid));
 
-  journal::JournalMetadataPtr metadata = create_metadata(oid);
+  auto metadata = create_metadata(oid);
   ASSERT_EQ(0, init_metadata(metadata));
   ASSERT_EQ(0U, metadata->get_active_set());
 
-  journal::JournalRecorder *recorder = create_recorder(oid, metadata);
+  JournalRecorderPtr recorder = create_recorder(oid, metadata);
 
   recorder->append(123, create_payload(std::string(metadata->get_object_size() -
                                                    journal::Entry::get_fixed_size(), '1')));