]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
journaler: implement asynchronous remove()
authorVenky Shankar <vshankar@redhat.com>
Wed, 6 Jul 2016 14:18:22 +0000 (19:48 +0530)
committerVenky Shankar <vshankar@redhat.com>
Sun, 7 Aug 2016 11:01:37 +0000 (16:31 +0530)
Signed-off-by: Venky Shankar <vshankar@redhat.com>
src/journal/Journaler.cc
src/journal/Journaler.h

index ef92b70f827034a6bf21b258e9f3d315630b78b9..0c1ea7232a852b5dfd805956dc96eb5fc9cd2c12 100644 (file)
@@ -252,6 +252,23 @@ int Journaler::remove(bool force) {
   return 0;
 }
 
+void Journaler::remove(bool force, Context *on_finish) {
+  // chain journal removal (reverse order)
+  on_finish = new FunctionContext([this, on_finish](int r) {
+      librados::AioCompletion *comp = librados::Rados::aio_create_completion(
+        on_finish, nullptr, utils::rados_ctx_callback);
+      r = m_header_ioctx.aio_remove(m_header_oid, comp);
+      assert(r == 0);
+      comp->release();
+    });
+
+  on_finish = new FunctionContext([this, force, on_finish](int r) {
+      m_trimmer->remove_objects(force, on_finish);
+    });
+
+  m_metadata->shut_down(on_finish);
+}
+
 void Journaler::flush_commit_position(Context *on_safe) {
   m_metadata->flush_commit_position(on_safe);
 }
index 134c1de425d44510ca018537d6b3657eae7e9b02..8dae036b0c5e1476aa8eb437818e39acb497079c 100644 (file)
@@ -62,6 +62,7 @@ public:
   void exists(Context *on_finish) const;
   int create(uint8_t order, uint8_t splay_width, int64_t pool_id);
   int remove(bool force);
+  void remove(bool force, Context *on_finish);
 
   void init(Context *on_init);
   void shut_down();