]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/librbd/Watcher.h
update sources to 12.2.7
[ceph.git] / ceph / src / librbd / Watcher.h
index 39009027d9ebc4756bd466b0d6f555e53614975b..518fbdd015e555ea6804e84331eca1c8c1a3bd1a 100644 (file)
@@ -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);
 
 };