]> git.proxmox.com Git - ceph.git/blame - ceph/src/librbd/managed_lock/BreakRequest.h
update sources to v12.1.0
[ceph.git] / ceph / src / librbd / managed_lock / BreakRequest.h
CommitLineData
7c673cae
FG
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3
4#ifndef CEPH_LIBRBD_MANAGED_LOCK_BREAK_REQUEST_H
5#define CEPH_LIBRBD_MANAGED_LOCK_BREAK_REQUEST_H
6
7#include "include/int_types.h"
8#include "include/buffer.h"
9#include "msg/msg_types.h"
10#include <list>
11#include <string>
12#include <boost/optional.hpp>
13#include "librbd/managed_lock/Types.h"
14
15class Context;
16class ContextWQ;
17class obj_watch_t;
18
19namespace librados { class IoCtx; }
20
21namespace librbd {
22
23class ImageCtx;
24template <typename> class Journal;
25
26namespace managed_lock {
27
28template <typename ImageCtxT = ImageCtx>
29class BreakRequest {
30public:
31 static BreakRequest* create(librados::IoCtx& ioctx, ContextWQ *work_queue,
32 const std::string& oid, const Locker &locker,
31f18b77 33 bool exclusive, bool blacklist_locker,
7c673cae
FG
34 uint32_t blacklist_expire_seconds,
35 bool force_break_lock, Context *on_finish) {
31f18b77
FG
36 return new BreakRequest(ioctx, work_queue, oid, locker, exclusive,
37 blacklist_locker, blacklist_expire_seconds,
38 force_break_lock, on_finish);
7c673cae
FG
39 }
40
41 void send();
42
43private:
44 /**
45 * @verbatim
46 *
47 * <start>
48 * |
49 * v
50 * GET_WATCHERS
51 * |
52 * v
31f18b77
FG
53 * GET_LOCKER
54 * |
55 * v
7c673cae
FG
56 * BLACKLIST (skip if disabled)
57 * |
58 * v
59 * BREAK_LOCK
60 * |
61 * v
62 * <finish>
63 *
64 * @endvertbatim
65 */
66
67 librados::IoCtx &m_ioctx;
68 CephContext *m_cct;
69 ContextWQ *m_work_queue;
70 std::string m_oid;
71 Locker m_locker;
31f18b77 72 bool m_exclusive;
7c673cae
FG
73 bool m_blacklist_locker;
74 uint32_t m_blacklist_expire_seconds;
75 bool m_force_break_lock;
76 Context *m_on_finish;
77
78 bufferlist m_out_bl;
79
80 std::list<obj_watch_t> m_watchers;
81 int m_watchers_ret_val;
82
31f18b77
FG
83 Locker m_refreshed_locker;
84
7c673cae
FG
85 BreakRequest(librados::IoCtx& ioctx, ContextWQ *work_queue,
86 const std::string& oid, const Locker &locker,
31f18b77
FG
87 bool exclusive, bool blacklist_locker,
88 uint32_t blacklist_expire_seconds, bool force_break_lock,
89 Context *on_finish);
7c673cae
FG
90
91 void send_get_watchers();
92 void handle_get_watchers(int r);
93
31f18b77
FG
94 void send_get_locker();
95 void handle_get_locker(int r);
96
7c673cae
FG
97 void send_blacklist();
98 void handle_blacklist(int r);
99
100 void send_break_lock();
101 void handle_break_lock(int r);
102
103 void finish(int r);
104
105};
106
107} // namespace managed_lock
108} // namespace librbd
109
110extern template class librbd::managed_lock::BreakRequest<librbd::ImageCtx>;
111
112#endif // CEPH_LIBRBD_MANAGED_LOCK_BREAK_REQUEST_H