]> git.proxmox.com Git - ceph.git/blame - ceph/src/librbd/object_map/SnapshotCreateRequest.h
import 15.2.0 Octopus source
[ceph.git] / ceph / src / librbd / object_map / SnapshotCreateRequest.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_OBJECT_MAP_SNAPSHOT_CREATE_REQUEST_H
5#define CEPH_LIBRBD_OBJECT_MAP_SNAPSHOT_CREATE_REQUEST_H
6
7#include "include/int_types.h"
8#include "common/bit_vector.hpp"
9#include "librbd/object_map/Request.h"
10
11class Context;
9f95a23c 12class RWLock;
7c673cae
FG
13
14namespace librbd {
15
16class ImageCtx;
17
18namespace object_map {
19
20class SnapshotCreateRequest : public Request {
21public:
22 /**
23 * Snapshot create goes through the following state machine:
24 *
25 * @verbatim
26 *
27 * <start>
28 * |
29 * v
30 * STATE_READ_MAP
31 * |
32 * v (skip)
33 * STATE_WRITE_MAP . . . . . . .
34 * | .
35 * v v
36 * STATE_ADD_SNAPSHOT ---> <finish>
37 *
38 * @endverbatim
39 *
40 * The _ADD_SNAPSHOT state is skipped if the FAST_DIFF feature isn't enabled.
41 */
42 enum State {
43 STATE_READ_MAP,
44 STATE_WRITE_MAP,
45 STATE_ADD_SNAPSHOT
46 };
47
9f95a23c
TL
48 SnapshotCreateRequest(ImageCtx &image_ctx, ceph::shared_mutex* object_map_lock,
49 ceph::BitVector<2> *object_map, uint64_t snap_id,
50 Context *on_finish)
7c673cae 51 : Request(image_ctx, snap_id, on_finish),
9f95a23c
TL
52 m_object_map_lock(object_map_lock), m_object_map(*object_map),
53 m_ret_val(0) {
7c673cae
FG
54 }
55
56 void send() override;
57
58protected:
59 bool should_complete(int r) override;
60
61private:
9f95a23c 62 ceph::shared_mutex* m_object_map_lock;
7c673cae
FG
63 ceph::BitVector<2> &m_object_map;
64
9f95a23c 65 State m_state = STATE_READ_MAP;
7c673cae
FG
66 bufferlist m_read_bl;
67 int m_ret_val;
68
69 void send_read_map();
70 void send_write_map();
71 bool send_add_snapshot();
72
73 void update_object_map();
74
75};
76
77} // namespace object_map
78} // namespace librbd
79
80#endif // CEPH_LIBRBD_OBJECT_MAP_SNAPSHOT_CREATE_REQUEST_H