#include "test/librbd/mock/MockJournal.h"
#include "test/librbd/mock/MockObjectMap.h"
#include "test/librbd/mock/MockOperations.h"
+#include "test/librbd/mock/MockPluginRegistry.h"
#include "test/librbd/mock/MockReadahead.h"
-#include "test/librbd/mock/io/MockImageRequestWQ.h"
+#include "test/librbd/mock/io/MockImageDispatcher.h"
#include "test/librbd/mock/io/MockObjectDispatcher.h"
#include "common/RWLock.h"
#include "common/WorkQueue.h"
namespace librbd {
-namespace cache { class MockImageCache; }
namespace operation {
template <typename> class ResizeRequest;
}
ceph_assert(s_instance != nullptr);
return s_instance;
}
- MOCK_METHOD0(destroy, void());
MockImageCtx(librbd::ImageCtx &image_ctx)
: image_ctx(&image_ctx),
lockers(image_ctx.lockers),
exclusive_locked(image_ctx.exclusive_locked),
lock_tag(image_ctx.lock_tag),
+ asio_engine(image_ctx.asio_engine),
+ rados_api(image_ctx.rados_api),
owner_lock(image_ctx.owner_lock),
image_lock(image_ctx.image_lock),
timestamp_lock(image_ctx.timestamp_lock),
format_string(image_ctx.format_string),
group_spec(image_ctx.group_spec),
layout(image_ctx.layout),
- io_work_queue(new io::MockImageRequestWQ()),
+ io_image_dispatcher(new io::MockImageDispatcher()),
io_object_dispatcher(new io::MockObjectDispatcher()),
op_work_queue(new MockContextWQ()),
+ plugin_registry(new MockPluginRegistry()),
readahead_max_bytes(image_ctx.readahead_max_bytes),
event_socket(image_ctx.event_socket),
parent(NULL), operations(new MockOperations()),
}
}
- ~MockImageCtx() {
+ virtual ~MockImageCtx() {
wait_for_async_requests();
+ wait_for_async_ops();
image_ctx->md_ctx.aio_flush();
image_ctx->data_ctx.aio_flush();
image_ctx->op_work_queue->drain();
delete operations;
delete image_watcher;
delete op_work_queue;
- delete io_work_queue;
+ delete plugin_registry;
+ delete io_image_dispatcher;
delete io_object_dispatcher;
}
+ void wait_for_async_ops();
void wait_for_async_requests() {
async_ops_lock.lock();
if (async_requests.empty()) {
MOCK_CONST_METHOD0(get_object_size, uint64_t());
MOCK_CONST_METHOD0(get_current_size, uint64_t());
MOCK_CONST_METHOD1(get_image_size, uint64_t(librados::snap_t));
+ MOCK_CONST_METHOD1(get_effective_image_size, uint64_t(librados::snap_t));
MOCK_CONST_METHOD1(get_object_count, uint64_t(librados::snap_t));
MOCK_CONST_METHOD1(get_read_flags, int(librados::snap_t));
MOCK_CONST_METHOD2(get_flags, int(librados::snap_t in_snap_id,
MOCK_METHOD1(notify_update, void(Context *));
MOCK_CONST_METHOD0(get_exclusive_lock_policy, exclusive_lock::Policy*());
+ MOCK_METHOD1(set_exclusive_lock_policy, void(exclusive_lock::Policy*));
MOCK_CONST_METHOD0(get_journal_policy, journal::Policy*());
MOCK_METHOD1(set_journal_policy, void(journal::Policy*));
MOCK_CONST_METHOD0(get_stripe_count, uint64_t());
MOCK_CONST_METHOD0(get_stripe_period, uint64_t());
+ MOCK_METHOD0(rebuild_data_io_context, void());
+ IOContext get_data_io_context();
+ IOContext duplicate_data_io_context();
+
static void set_timer_instance(MockSafeTimer *timer, ceph::mutex *timer_lock);
static void get_timer_instance(CephContext *cct, MockSafeTimer **timer,
ceph::mutex **timer_lock);
bool exclusive_locked;
std::string lock_tag;
+ std::shared_ptr<AsioEngine> asio_engine;
+ neorados::RADOS& rados_api;
+
librados::IoCtx md_ctx;
librados::IoCtx data_ctx;
std::map<uint64_t, io::CopyupRequest<MockImageCtx>*> copyup_list;
- io::MockImageRequestWQ *io_work_queue;
+ io::MockImageDispatcher *io_image_dispatcher;
io::MockObjectDispatcher *io_object_dispatcher;
MockContextWQ *op_work_queue;
- cache::MockImageCache *image_cache = nullptr;
+ MockPluginRegistry* plugin_registry;
MockReadahead readahead;
uint64_t readahead_max_bytes;
ZTracer::Endpoint trace_endpoint;
+ crypto::CryptoInterface* crypto = nullptr;
+
uint64_t sparse_read_threshold_bytes;
uint32_t discard_granularity_bytes;
int mirroring_replay_delay;