#include "common/AsyncOpTracker.h"
#include "common/Cond.h"
#include "common/RefCountedObj.h"
-#include "common/WorkQueue.h"
#include "journal/Future.h"
#include "journal/JournalMetadataListener.h"
#include "journal/ReplayEntry.h"
#include "journal/ReplayHandler.h"
#include "librbd/Utils.h"
+#include "librbd/asio/ContextWQ.h"
#include "librbd/journal/Types.h"
#include "librbd/journal/TypeTraits.h"
#include <atomic>
#include <unordered_map>
+class ContextWQ;
class SafeTimer;
-namespace journal {
-class Journaler;
-}
+namespace journal { class Journaler; }
namespace librbd {
Journal(ImageCtxT &image_ctx);
~Journal();
+ static void get_work_queue(CephContext *cct, ContextWQ **work_queue);
+
static bool is_journal_supported(ImageCtxT &image_ctx);
static int create(librados::IoCtx &io_ctx, const std::string &image_id,
uint8_t order, uint8_t splay_width,
static void is_tag_owner(ImageCtxT *image_ctx, bool *is_tag_owner,
Context *on_finish);
static void is_tag_owner(librados::IoCtx& io_ctx, std::string& image_id,
- bool *is_tag_owner, ContextWQ *op_work_queue,
+ bool *is_tag_owner, asio::ContextWQ *op_work_queue,
Context *on_finish);
static void get_tag_owner(librados::IoCtx& io_ctx, std::string& image_id,
std::string *mirror_uuid,
- ContextWQ *op_work_queue, Context *on_finish);
+ asio::ContextWQ *op_work_queue, Context *on_finish);
static int request_resync(ImageCtxT *image_ctx);
static void promote(ImageCtxT *image_ctx, Context *on_finish);
static void demote(ImageCtxT *image_ctx, Context *on_finish);
MetadataListener(Journal<ImageCtxT> *journal) : journal(journal) { }
- void handle_update(::journal::JournalMetadata *) override {
- auto ctx = new LambdaContext([this](int r) {
- journal->handle_metadata_updated();
- });
- journal->m_work_queue->queue(ctx, 0);
- }
+ void handle_update(::journal::JournalMetadata *) override;
} m_metadata_listener;
typedef std::set<journal::Listener *> Listeners;