X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Flibrbd%2FWatcher.h;h=518fbdd015e555ea6804e84331eca1c8c1a3bd1a;hb=28e407b858acd3bddc89f68583571f771bb42e46;hp=39009027d9ebc4756bd466b0d6f555e53614975b;hpb=dfcb7b53b2e4fcd2a5af0240d4975adc711ab96e;p=ceph.git diff --git a/ceph/src/librbd/Watcher.h b/ceph/src/librbd/Watcher.h index 39009027d..518fbdd01 100644 --- a/ceph/src/librbd/Watcher.h +++ b/ceph/src/librbd/Watcher.h @@ -54,19 +54,17 @@ public: bool is_registered() const { RWLock::RLocker locker(m_watch_lock); - return m_watch_state == WATCH_STATE_REGISTERED; + return is_registered(m_watch_lock); } bool is_unregistered() const { RWLock::RLocker locker(m_watch_lock); - return m_watch_state == WATCH_STATE_UNREGISTERED; + return is_unregistered(m_watch_lock); } protected: enum WatchState { - WATCH_STATE_UNREGISTERED, + WATCH_STATE_IDLE, WATCH_STATE_REGISTERING, - WATCH_STATE_REGISTERED, - WATCH_STATE_ERROR, WATCH_STATE_REWATCHING }; @@ -80,6 +78,13 @@ protected: WatchState m_watch_state; AsyncOpTracker m_async_op_tracker; + bool is_registered(const RWLock&) const { + return (m_watch_state == WATCH_STATE_IDLE && m_watch_handle != 0); + } + bool is_unregistered(const RWLock&) const { + return (m_watch_state == WATCH_STATE_IDLE && m_watch_handle == 0); + } + void send_notify(bufferlist &payload, watcher::NotifyResponse *response = nullptr, Context *on_finish = nullptr); @@ -155,12 +160,15 @@ private: WatchCtx m_watch_ctx; Context *m_unregister_watch_ctx = nullptr; + bool m_watch_error = false; + uint32_t m_blocked_count = 0; void handle_register_watch(int r, Context *on_finish); void rewatch(); void handle_rewatch(int r); + void handle_rewatch_callback(int r); };