From af339aee46469c6bb621343e1579b7f0f3720ae3 Mon Sep 17 00:00:00 2001 From: David Zafman Date: Thu, 21 Feb 2013 15:20:08 -0800 Subject: [PATCH] Add ObjectReadOperation and IoCtx functions Signed-off-by: David Zafman --- src/include/rados/librados.hpp | 10 +++++++++- src/librados/librados.cc | 22 ++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/include/rados/librados.hpp b/src/include/rados/librados.hpp index fa60237a3535e..fb585d09811e3 100644 --- a/src/include/rados/librados.hpp +++ b/src/include/rados/librados.hpp @@ -326,8 +326,15 @@ namespace librados std::map *map, int *prval); - }; + /** + * list_watchers: Get list watchers of object + * + * @param out_watchers [out] place returned values in out_watchers on completion + * @param prval [out] place error code in prval upon completion + */ + void list_watchers(std::list *out_watchers, int *prval); + }; /* IoCtx : This is a context in which we can perform I/O. * It includes a Pool, @@ -498,6 +505,7 @@ namespace librados librados::WatchCtx *ctx); int unwatch(const std::string& o, uint64_t handle); int notify(const std::string& o, uint64_t ver, bufferlist& bl); + int list_watchers(const std::string& o, std::list *out_watchers); void set_notify_timeout(uint32_t timeout); // assert version for next sync operations diff --git a/src/librados/librados.cc b/src/librados/librados.cc index 5a81a267f2b6e..0b7eaf9785056 100644 --- a/src/librados/librados.cc +++ b/src/librados/librados.cc @@ -211,6 +211,14 @@ void librados::ObjectOperation::omap_cmp( o->omap_cmp(assertions, prval); } +void librados::ObjectReadOperation::list_watchers( + list *out_watchers, + int *prval) +{ + ::ObjectOperation *o = (::ObjectOperation *)impl; + o->list_watchers(out_watchers, prval); +} + int librados::IoCtx::omap_get_vals(const std::string& oid, const std::string& start_after, const std::string& filter_prefix, @@ -1018,6 +1026,20 @@ int librados::IoCtx::notify(const string& oid, uint64_t ver, bufferlist& bl) return io_ctx_impl->notify(obj, ver, bl); } +int librados::IoCtx::list_watchers(const std::string& oid, + std::list *out_watchers) +{ + ObjectReadOperation op; + int r; + op.list_watchers(out_watchers, &r); + bufferlist bl; + int ret = operate(oid, &op, &bl); + if (ret < 0) + return ret; + + return r; +} + void librados::IoCtx::set_notify_timeout(uint32_t timeout) { io_ctx_impl->set_notify_timeout(timeout); -- 2.39.5