From: Venky Shankar Date: Wed, 6 Jul 2016 16:16:11 +0000 (+0530) Subject: journaler: asynchronous JournalTrimmer::remove_objects() X-Git-Tag: v11.0.1~507^2~12 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=c0848e262d20946fc6a14a1ae0b6b97a16affe0d;p=ceph-ci.git journaler: asynchronous JournalTrimmer::remove_objects() Asynchronous removal of journal objects for a given rbd image. Signed-off-by: Venky Shankar --- diff --git a/src/journal/JournalTrimmer.cc b/src/journal/JournalTrimmer.cc index aef16c2fb0a..591ce83c22d 100644 --- a/src/journal/JournalTrimmer.cc +++ b/src/journal/JournalTrimmer.cc @@ -79,6 +79,37 @@ int JournalTrimmer::remove_objects(bool force) { return ctx.wait(); } +void JournalTrimmer::remove_objects(bool force, Context *on_finish) { + ldout(m_cct, 20) << __func__ << dendl; + + on_finish = new FunctionContext([this, force, on_finish](int r) { + Mutex::Locker locker(m_lock); + + if (m_remove_set_pending) { + on_finish->complete(-EBUSY); + } + + if (!force) { + JournalMetadata::RegisteredClients registered_clients; + m_journal_metadata->get_registered_clients(®istered_clients); + + if (registered_clients.size() == 0) { + on_finish->complete(-EINVAL); + } else if (registered_clients.size() > 1) { + on_finish->complete(-EBUSY); + } + } + + m_remove_set = std::numeric_limits::max(); + m_remove_set_pending = true; + m_remove_set_ctx = on_finish; + + remove_set(m_journal_metadata->get_minimum_set()); + }); + + m_async_op_tracker.wait_for_ops(on_finish); +} + void JournalTrimmer::committed(uint64_t commit_tid) { ldout(m_cct, 20) << __func__ << ": commit_tid=" << commit_tid << dendl; m_journal_metadata->committed(commit_tid, diff --git a/src/journal/JournalTrimmer.h b/src/journal/JournalTrimmer.h index ec76d722cac..41c4a379f77 100644 --- a/src/journal/JournalTrimmer.h +++ b/src/journal/JournalTrimmer.h @@ -28,6 +28,7 @@ public: void shut_down(Context *on_finish); int remove_objects(bool force); + void remove_objects(bool force, Context *on_finish); void committed(uint64_t commit_tid); private: