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
};
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);
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);
};