]> git.proxmox.com Git - ceph.git/blob - ceph/src/librbd/object_map/UpdateRequest.h
update sources to v12.1.0
[ceph.git] / ceph / src / librbd / object_map / UpdateRequest.h
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_UPDATE_REQUEST_H
5 #define CEPH_LIBRBD_OBJECT_MAP_UPDATE_REQUEST_H
6
7 #include "include/int_types.h"
8 #include "librbd/object_map/Request.h"
9 #include "common/bit_vector.hpp"
10 #include "common/zipkin_trace.h"
11 #include "librbd/Utils.h"
12 #include <boost/optional.hpp>
13
14 class Context;
15
16 namespace librbd {
17
18 class ImageCtx;
19
20 namespace object_map {
21
22 template <typename ImageCtxT = librbd::ImageCtx>
23 class UpdateRequest : public Request {
24 public:
25 static UpdateRequest *create(ImageCtx &image_ctx,
26 ceph::BitVector<2> *object_map,
27 uint64_t snap_id, uint64_t start_object_no,
28 uint64_t end_object_no, uint8_t new_state,
29 const boost::optional<uint8_t> &current_state,
30 const ZTracer::Trace &parent_trace,
31 Context *on_finish) {
32 return new UpdateRequest(image_ctx, object_map, snap_id, start_object_no,
33 end_object_no, new_state, current_state,
34 parent_trace, on_finish);
35 }
36
37 UpdateRequest(ImageCtx &image_ctx, ceph::BitVector<2> *object_map,
38 uint64_t snap_id, uint64_t start_object_no,
39 uint64_t end_object_no, uint8_t new_state,
40 const boost::optional<uint8_t> &current_state,
41 const ZTracer::Trace &parent_trace, Context *on_finish)
42 : Request(image_ctx, snap_id, on_finish), m_object_map(*object_map),
43 m_start_object_no(start_object_no), m_end_object_no(end_object_no),
44 m_new_state(new_state), m_current_state(current_state),
45 m_trace(util::create_trace(image_ctx, "update object map", parent_trace))
46 {
47 m_trace.event("start");
48 }
49 virtual ~UpdateRequest() {
50 m_trace.event("finish");
51 }
52
53 void send() override;
54
55 protected:
56 void finish_request() override;
57
58 private:
59 ceph::BitVector<2> &m_object_map;
60 uint64_t m_start_object_no;
61 uint64_t m_end_object_no;
62 uint8_t m_new_state;
63 boost::optional<uint8_t> m_current_state;
64 ZTracer::Trace m_trace;
65 };
66
67 } // namespace object_map
68 } // namespace librbd
69
70 extern template class librbd::object_map::UpdateRequest<librbd::ImageCtx>;
71
72 #endif // CEPH_LIBRBD_OBJECT_MAP_UPDATE_REQUEST_H