From: Jason Dillaman Date: Sun, 28 Feb 2016 20:21:36 +0000 (-0500) Subject: librados_test_stub: added aio_watch/aio_unwatch/aio_watch_flush X-Git-Tag: v10.1.0~256^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=eac7e7a101e08838baa6d9b653937bf96e422652;p=ceph.git librados_test_stub: added aio_watch/aio_unwatch/aio_watch_flush Signed-off-by: Jason Dillaman --- diff --git a/src/test/librados_test_stub/LibradosTestStub.cc b/src/test/librados_test_stub/LibradosTestStub.cc index 99a8f444be2d..caa106b9fecb 100644 --- a/src/test/librados_test_stub/LibradosTestStub.cc +++ b/src/test/librados_test_stub/LibradosTestStub.cc @@ -404,6 +404,17 @@ int IoCtx::aio_remove(const std::string& oid, AioCompletion *c) { return ctx->aio_remove(oid, c->pc); } +int IoCtx::aio_watch(const std::string& o, AioCompletion *c, uint64_t *handle, + librados::WatchCtx2 *watch_ctx) { + TestIoCtxImpl *ctx = reinterpret_cast(io_ctx_impl); + return ctx->aio_watch(o, c->pc, handle, watch_ctx); +} + +int IoCtx::aio_unwatch(uint64_t handle, AioCompletion *c) { + TestIoCtxImpl *ctx = reinterpret_cast(io_ctx_impl); + return ctx->aio_unwatch(handle, c->pc); +} + config_t IoCtx::cct() { TestIoCtxImpl *ctx = reinterpret_cast(io_ctx_impl); return reinterpret_cast(ctx->get_rados_client()->cct()); @@ -811,6 +822,11 @@ AioCompletion *Rados::aio_create_completion(void *cb_arg, return new AioCompletion(c); } +int Rados::aio_watch_flush(AioCompletion* c) { + TestRadosClient *impl = reinterpret_cast(client); + return impl->aio_watch_flush(c->pc); +} + int Rados::blacklist_add(const std::string& client_address, uint32_t expire_seconds) { TestRadosClient *impl = reinterpret_cast(client); diff --git a/src/test/librados_test_stub/TestIoCtxImpl.cc b/src/test/librados_test_stub/TestIoCtxImpl.cc index 4bde5c94200a..fcca3b345678 100644 --- a/src/test/librados_test_stub/TestIoCtxImpl.cc +++ b/src/test/librados_test_stub/TestIoCtxImpl.cc @@ -125,6 +125,24 @@ int TestIoCtxImpl::aio_operate_read(const std::string& oid, return 0; } +int TestIoCtxImpl::aio_watch(const std::string& o, AioCompletionImpl *c, + uint64_t *handle, librados::WatchCtx2 *watch_ctx) { + m_pending_ops.inc(); + c->get(); + C_AioNotify *ctx = new C_AioNotify(this, c); + m_client->get_watch_notify().aio_watch(o, get_instance_id(), handle, + watch_ctx, ctx); + return 0; +} + +int TestIoCtxImpl::aio_unwatch(uint64_t handle, AioCompletionImpl *c) { + m_pending_ops.inc(); + c->get(); + C_AioNotify *ctx = new C_AioNotify(this, c); + m_client->get_watch_notify().aio_unwatch(handle, ctx); + return 0; +} + int TestIoCtxImpl::exec(const std::string& oid, TestClassHandler *handler, const char *cls, const char *method, bufferlist& inbl, bufferlist* outbl, diff --git a/src/test/librados_test_stub/TestIoCtxImpl.h b/src/test/librados_test_stub/TestIoCtxImpl.h index c38e90edb7e5..0db715f34b38 100644 --- a/src/test/librados_test_stub/TestIoCtxImpl.h +++ b/src/test/librados_test_stub/TestIoCtxImpl.h @@ -81,7 +81,9 @@ public: AioCompletionImpl *c, int flags, bufferlist *pbl); virtual int aio_remove(const std::string& oid, AioCompletionImpl *c) = 0; - + virtual int aio_watch(const std::string& o, AioCompletionImpl *c, + uint64_t *handle, librados::WatchCtx2 *ctx); + virtual int aio_unwatch(uint64_t handle, AioCompletionImpl *c); virtual int append(const std::string& oid, const bufferlist &bl, const SnapContext &snapc) = 0; virtual int assert_exists(const std::string &oid) = 0; diff --git a/src/test/librados_test_stub/TestRadosClient.cc b/src/test/librados_test_stub/TestRadosClient.cc index 789d40b28f15..e2fe20ba5815 100644 --- a/src/test/librados_test_stub/TestRadosClient.cc +++ b/src/test/librados_test_stub/TestRadosClient.cc @@ -222,6 +222,14 @@ void TestRadosClient::flush_aio_operations(AioCompletionImpl *c) { } } +int TestRadosClient::aio_watch_flush(AioCompletionImpl *c) { + c->get(); + Context *ctx = new FunctionContext(boost::bind( + &TestRadosClient::finish_aio_completion, this, c, _1)); + get_watch_notify().aio_flush(ctx); + return 0; +} + void TestRadosClient::finish_aio_completion(AioCompletionImpl *c, int r) { librados::finish_aio_completion(c, r); } diff --git a/src/test/librados_test_stub/TestRadosClient.h b/src/test/librados_test_stub/TestRadosClient.h index b1aa75d790de..a4fd00d86490 100644 --- a/src/test/librados_test_stub/TestRadosClient.h +++ b/src/test/librados_test_stub/TestRadosClient.h @@ -85,6 +85,7 @@ public: virtual int64_t pool_lookup(const std::string &name) = 0; virtual int pool_reverse_lookup(int64_t id, std::string *name) = 0; + virtual int aio_watch_flush(AioCompletionImpl *c); virtual int watch_flush() = 0; virtual int blacklist_add(const std::string& client_address, diff --git a/src/test/librados_test_stub/TestWatchNotify.cc b/src/test/librados_test_stub/TestWatchNotify.cc index e42c301a23dd..2aacd4861522 100644 --- a/src/test/librados_test_stub/TestWatchNotify.cc +++ b/src/test/librados_test_stub/TestWatchNotify.cc @@ -58,6 +58,23 @@ int TestWatchNotify::list_watchers(const std::string& o, return 0; } +void TestWatchNotify::aio_flush(Context *on_finish) { + m_finisher->queue(on_finish); +} + +void TestWatchNotify::aio_watch(const std::string& o, uint64_t gid, + uint64_t *handle, + librados::WatchCtx2 *watch_ctx, + Context *on_finish) { + int r = watch(o, gid, handle, nullptr, watch_ctx); + m_finisher->queue(on_finish, r); +} + +void TestWatchNotify::aio_unwatch(uint64_t handle, Context *on_finish) { + unwatch(handle); + m_finisher->queue(on_finish); +} + void TestWatchNotify::aio_notify(const std::string& oid, bufferlist& bl, uint64_t timeout_ms, bufferlist *pbl, Context *on_notify) { diff --git a/src/test/librados_test_stub/TestWatchNotify.h b/src/test/librados_test_stub/TestWatchNotify.h index a40f560765b4..9cd52306c365 100644 --- a/src/test/librados_test_stub/TestWatchNotify.h +++ b/src/test/librados_test_stub/TestWatchNotify.h @@ -51,11 +51,17 @@ public: TestWatchNotify(CephContext *cct, Finisher *finisher); ~TestWatchNotify(); - void flush(); int list_watchers(const std::string& o, std::list *out_watchers); + + void aio_flush(Context *on_finish); + void aio_watch(const std::string& o, uint64_t gid, uint64_t *handle, + librados::WatchCtx2 *watch_ctx, Context *on_finish); + void aio_unwatch(uint64_t handle, Context *on_finish); void aio_notify(const std::string& oid, bufferlist& bl, uint64_t timeout_ms, bufferlist *pbl, Context *on_notify); + + void flush(); int notify(const std::string& o, bufferlist& bl, uint64_t timeout_ms, bufferlist *pbl); void notify_ack(const std::string& o, uint64_t notify_id,