]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/librbd/managed_lock/BreakRequest.h
update sources to v12.1.0
[ceph.git] / ceph / src / librbd / managed_lock / BreakRequest.h
index 045f629de291e71d1e31a623efb0f80e3bf24b48..6f4f4acab0454492ad707612513ccc35400b194b 100644 (file)
@@ -30,12 +30,12 @@ class BreakRequest {
 public:
   static BreakRequest* create(librados::IoCtx& ioctx, ContextWQ *work_queue,
                               const std::string& oid, const Locker &locker,
-                              bool blacklist_locker,
+                              bool exclusive, bool blacklist_locker,
                               uint32_t blacklist_expire_seconds,
                               bool force_break_lock, Context *on_finish) {
-    return new BreakRequest(ioctx, work_queue, oid, locker, blacklist_locker,
-                            blacklist_expire_seconds, force_break_lock,
-                            on_finish);
+    return new BreakRequest(ioctx, work_queue, oid, locker, exclusive,
+                            blacklist_locker, blacklist_expire_seconds,
+                            force_break_lock, on_finish);
   }
 
   void send();
@@ -50,6 +50,9 @@ private:
    * GET_WATCHERS
    *    |
    *    v
+   * GET_LOCKER
+   *    |
+   *    v
    * BLACKLIST (skip if disabled)
    *    |
    *    v
@@ -66,6 +69,7 @@ private:
   ContextWQ *m_work_queue;
   std::string m_oid;
   Locker m_locker;
+  bool m_exclusive;
   bool m_blacklist_locker;
   uint32_t m_blacklist_expire_seconds;
   bool m_force_break_lock;
@@ -76,14 +80,20 @@ private:
   std::list<obj_watch_t> m_watchers;
   int m_watchers_ret_val;
 
+  Locker m_refreshed_locker;
+
   BreakRequest(librados::IoCtx& ioctx, ContextWQ *work_queue,
                const std::string& oid, const Locker &locker,
-               bool blacklist_locker, uint32_t blacklist_expire_seconds,
-               bool force_break_lock, Context *on_finish);
+               bool exclusive, bool blacklist_locker,
+               uint32_t blacklist_expire_seconds, bool force_break_lock,
+               Context *on_finish);
 
   void send_get_watchers();
   void handle_get_watchers(int r);
 
+  void send_get_locker();
+  void handle_get_locker(int r);
+
   void send_blacklist();
   void handle_blacklist(int r);