From: Jason Dillaman Date: Tue, 30 Jun 2015 14:42:21 +0000 (-0400) Subject: journal: move rados_ctx_callback to utils namespace X-Git-Tag: v10.0.1~102^2~32 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6bd8c0a6aed4d889198c122758006a8ae57c0f59;p=ceph.git journal: move rados_ctx_callback to utils namespace Signed-off-by: Jason Dillaman --- diff --git a/src/journal/JournalMetadata.cc b/src/journal/JournalMetadata.cc index 35cf21788f36..ab0538f87885 100644 --- a/src/journal/JournalMetadata.cc +++ b/src/journal/JournalMetadata.cc @@ -2,6 +2,7 @@ // vim: ts=8 sw=2 smarttab #include "journal/JournalMetadata.h" +#include "journal/Utils.h" #include "common/errno.h" #include "common/Timer.h" #include "cls/journal/cls_journal_client.h" @@ -14,28 +15,6 @@ namespace journal { using namespace cls::journal; -namespace { - -struct C_NotifyUpdate : public Context { - JournalMetadataPtr journal_metadata; - - C_NotifyUpdate(JournalMetadata *_journal_metadata) - : journal_metadata(_journal_metadata) {} - - virtual void finish(int r) { - if (r == 0) { - journal_metadata->notify_update(); - } - } -}; - -void rados_ctx_callback(rados_completion_t c, void *arg) { - Context *comp = reinterpret_cast(arg); - comp->complete(rados_aio_get_return_value(c)); -} - -} // anonymous namespace - JournalMetadata::JournalMetadata(librados::IoCtx &ioctx, const std::string &oid, const std::string &client_id) @@ -147,7 +126,8 @@ void JournalMetadata::set_minimum_set(uint64_t object_set) { C_NotifyUpdate *ctx = new C_NotifyUpdate(this); librados::AioCompletion *comp = - librados::Rados::aio_create_completion(ctx, NULL, rados_ctx_callback); + librados::Rados::aio_create_completion(ctx, NULL, + utils::rados_ctx_callback); int r = m_ioctx.aio_operate(m_oid, comp, &op); assert(r == 0); comp->release(); @@ -166,7 +146,8 @@ void JournalMetadata::set_active_set(uint64_t object_set) { C_NotifyUpdate *ctx = new C_NotifyUpdate(this); librados::AioCompletion *comp = - librados::Rados::aio_create_completion(ctx, NULL, rados_ctx_callback); + librados::Rados::aio_create_completion(ctx, NULL, + utils::rados_ctx_callback); int r = m_ioctx.aio_operate(m_oid, comp, &op); assert(r == 0); comp->release(); @@ -175,15 +156,16 @@ void JournalMetadata::set_active_set(uint64_t object_set) { } void JournalMetadata::set_commit_position( - const ObjectSetPosition &commit_position) { + const ObjectSetPosition &commit_position, Context *on_safe) { Mutex::Locker locker(m_lock); librados::ObjectWriteOperation op; client::client_commit(&op, m_client_id, commit_position); - C_NotifyUpdate *ctx = new C_NotifyUpdate(this); + C_NotifyUpdate *ctx = new C_NotifyUpdate(this, on_safe); librados::AioCompletion *comp = - librados::Rados::aio_create_completion(ctx, NULL, rados_ctx_callback); + librados::Rados::aio_create_completion(ctx, NULL, + utils::rados_ctx_callback); int r = m_ioctx.aio_operate(m_oid, comp, &op); assert(r == 0); comp->release(); diff --git a/src/journal/JournalMetadata.h b/src/journal/JournalMetadata.h index 2bab6870bbce..88f7f914724c 100644 --- a/src/journal/JournalMetadata.h +++ b/src/journal/JournalMetadata.h @@ -76,7 +76,8 @@ public: return m_active_set; } - void set_commit_position(const ObjectSetPosition &commit_position); + void set_commit_position(const ObjectSetPosition &commit_position, + Context *on_safe); void get_commit_position(ObjectSetPosition *commit_position) const { Mutex::Locker locker(m_lock); *commit_position = m_client.commit_position; @@ -109,6 +110,7 @@ private: journal_metadata->handle_watch_error(err); } }; + struct C_WatchReset : public Context { JournalMetadataPtr journal_metadata; @@ -120,6 +122,23 @@ private: } }; + struct C_NotifyUpdate : public Context { + JournalMetadataPtr journal_metadata; + Context *on_safe; + + C_NotifyUpdate(JournalMetadata *_journal_metadata, Context *_on_safe = NULL) + : journal_metadata(_journal_metadata), on_safe(_on_safe) {} + + virtual void finish(int r) { + if (r == 0) { + journal_metadata->notify_update(); + } + if (on_safe != NULL) { + on_safe->complete(r); + } + } + }; + struct C_Refresh : public Context { JournalMetadataPtr journal_metadata; uint64_t minimum_set; diff --git a/src/journal/ObjectPlayer.cc b/src/journal/ObjectPlayer.cc index 704937de7743..0a5b0568640d 100644 --- a/src/journal/ObjectPlayer.cc +++ b/src/journal/ObjectPlayer.cc @@ -12,15 +12,6 @@ namespace journal { -namespace { - -void rados_ctx_callback(rados_completion_t c, void *arg) { - Context *ctx = reinterpret_cast(arg); - ctx->complete(rados_aio_get_return_value(c)); -} - -} // anonymous namespace - ObjectPlayer::ObjectPlayer(librados::IoCtx &ioctx, const std::string &object_oid_prefix, uint64_t object_num, SafeTimer &timer, @@ -54,7 +45,8 @@ void ObjectPlayer::fetch(Context *on_finish) { op.read(m_read_off, 2 << m_order, &context->read_bl, NULL); librados::AioCompletion *rados_completion = - librados::Rados::aio_create_completion(context, rados_ctx_callback, NULL); + librados::Rados::aio_create_completion(context, utils::rados_ctx_callback, + NULL); int r = m_ioctx.aio_operate(m_oid, rados_completion, &op, 0, NULL); assert(r == 0); rados_completion->release(); diff --git a/src/journal/ObjectRecorder.cc b/src/journal/ObjectRecorder.cc index 2677b281feb6..b81cd3cb46b8 100644 --- a/src/journal/ObjectRecorder.cc +++ b/src/journal/ObjectRecorder.cc @@ -15,15 +15,6 @@ using namespace cls::journal; namespace journal { -namespace { - -void rados_ctx_callback(rados_completion_t c, void *arg) { - Context *ctx = reinterpret_cast(arg); - ctx->complete(rados_aio_get_return_value(c)); -} - -} // anonymous - ObjectRecorder::ObjectRecorder(librados::IoCtx &ioctx, const std::string &oid, uint64_t object_number, SafeTimer &timer, Mutex &timer_lock, @@ -282,7 +273,7 @@ void ObjectRecorder::send_appends(AppendBuffers *append_buffers) { librados::AioCompletion *rados_completion = librados::Rados::aio_create_completion(append_flush, NULL, - rados_ctx_callback); + utils::rados_ctx_callback); int r = m_ioctx.aio_operate(m_oid, rados_completion, &op); assert(r == 0); rados_completion->release(); diff --git a/src/journal/Utils.cc b/src/journal/Utils.cc index eea61363c475..2a8d945a3dcd 100644 --- a/src/journal/Utils.cc +++ b/src/journal/Utils.cc @@ -2,6 +2,7 @@ // vim: ts=8 sw=2 smarttab #include "journal/Utils.h" +#include "include/Context.h" #include "include/stringify.h" namespace journal { @@ -15,5 +16,10 @@ std::string unique_lock_name(const std::string &name, void *address) { return name + " (" + stringify(address) + ")"; } +void rados_ctx_callback(rados_completion_t c, void *arg) { + Context *comp = reinterpret_cast(arg); + comp->complete(rados_aio_get_return_value(c)); +} + } // namespace utils } // namespace journal diff --git a/src/journal/Utils.h b/src/journal/Utils.h index 1e449b187fd9..1169ac924700 100644 --- a/src/journal/Utils.h +++ b/src/journal/Utils.h @@ -5,6 +5,7 @@ #define CEPH_JOURNAL_UTILS_H #include "include/int_types.h" +#include "include/rados/librados.hpp" #include namespace journal { @@ -14,6 +15,8 @@ std::string get_object_name(const std::string &prefix, uint64_t number); std::string unique_lock_name(const std::string &name, void *address); +void rados_ctx_callback(rados_completion_t c, void *arg); + } // namespace utils } // namespace journal