From: Sage Weil Date: Sat, 6 Dec 2014 02:00:04 +0000 (-0800) Subject: rgw: switch to new watch/notify API X-Git-Tag: v0.91~72 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=dc67cd69604ec4e4df846b818ec739dc7b09a537;p=ceph.git rgw: switch to new watch/notify API Note that we don't use it properly, yet! Signed-off-by: Sage Weil --- diff --git a/src/rgw/rgw_cache.h b/src/rgw/rgw_cache.h index c0a0e243af76..f5d1b20ee4bd 100644 --- a/src/rgw/rgw_cache.h +++ b/src/rgw/rgw_cache.h @@ -201,7 +201,10 @@ class RGWCache : public T } int distribute_cache(const string& normal_name, rgw_obj& obj, ObjectCacheInfo& obj_info, int op); - int watch_cb(int opcode, uint64_t ver, bufferlist& bl); + int watch_cb(uint64_t notify_id, + uint64_t cookie, + uint64_t notifier_id, + bufferlist& bl); public: RGWCache() {} @@ -554,7 +557,10 @@ int RGWCache::distribute_cache(const string& normal_name, rgw_obj& obj, Objec } template -int RGWCache::watch_cb(int opcode, uint64_t ver, bufferlist& bl) +int RGWCache::watch_cb(uint64_t notify_id, + uint64_t cookie, + uint64_t notifier_id, + bufferlist& bl) { RGWCacheNotifyInfo info; diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 2c53454389be..dd251b82c695 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -1206,13 +1206,23 @@ int RGWPutObjProcessor_Atomic::do_complete(string& etag, time_t *mtime, time_t s return r; } -class RGWWatcher : public librados::WatchCtx { +class RGWWatcher : public librados::WatchCtx2 { RGWRados *rados; public: RGWWatcher(RGWRados *r) : rados(r) {} - void notify(uint8_t opcode, uint64_t ver, bufferlist& bl) { - ldout(rados->ctx(), 10) << "RGWWatcher::notify() opcode=" << (int)opcode << " ver=" << ver << " bl.length()=" << bl.length() << dendl; - rados->watch_cb(opcode, ver, bl); + void handle_notify(uint64_t notify_id, + uint64_t cookie, + uint64_t notifier_id, + bufferlist& bl) { + ldout(rados->ctx(), 10) << "RGWWatcher::handle_notify() " + << " notify_id " << notify_id + << " cookie " << cookie + << " notifier " << notifier_id + << " bl.length()=" << bl.length() << dendl; + rados->watch_cb(notify_id, cookie, notifier_id, bl); + } + void handle_error(uint64_t cookie, int err) { + // FIXME } }; @@ -1463,7 +1473,7 @@ void RGWRados::finalize_watch() if (notify_oid.empty()) continue; uint64_t watch_handle = watch_handles[i]; - control_pool_ctx.unwatch(notify_oid, watch_handle); + control_pool_ctx.unwatch(watch_handle); RGWWatcher *watcher = watchers[i]; delete watcher; @@ -1598,7 +1608,7 @@ int RGWRados::init_watch() RGWWatcher *watcher = new RGWWatcher(this); watchers[i] = watcher; - r = control_pool_ctx.watch(notify_oid, 0, &watch_handles[i], watcher); + r = control_pool_ctx.watch(notify_oid, &watch_handles[i], watcher); if (r < 0) return r; } @@ -5804,7 +5814,7 @@ int RGWRados::distribute(const string& key, bufferlist& bl) pick_control_oid(key, notify_oid); ldout(cct, 10) << "distributing notification oid=" << notify_oid << " bl.length()=" << bl.length() << dendl; - int r = control_pool_ctx.notify(notify_oid, 0, bl); + int r = control_pool_ctx.notify(notify_oid, bl, 0, NULL); return r; } diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index f38b3ac3df34..b15827d3dbd8 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -1766,7 +1766,10 @@ public: virtual int init_watch(); virtual void finalize_watch(); virtual int distribute(const string& key, bufferlist& bl); - virtual int watch_cb(int opcode, uint64_t ver, bufferlist& bl) { return 0; } + virtual int watch_cb(uint64_t notify_id, + uint64_t cookie, + uint64_t notifier_id, + bufferlist& bl) { return 0; } void pick_control_oid(const string& key, string& notify_oid); void *create_context(void *user_ctx) {