]>
git.proxmox.com Git - ceph.git/blob - ceph/src/librbd/object_map/DiffRequest.h
31a7a1bea25056fd51c101a86b049a2210892c7d
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef CEPH_LIBRBD_OBJECT_MAP_DIFF_REQUEST_H
5 #define CEPH_LIBRBD_OBJECT_MAP_DIFF_REQUEST_H
7 #include "include/int_types.h"
8 #include "common/bit_vector.hpp"
9 #include "common/ceph_mutex.h"
10 #include "librbd/object_map/Types.h"
19 namespace object_map
{
21 template <typename ImageCtxT
>
24 static DiffRequest
* create(ImageCtxT
* image_ctx
, uint64_t snap_id_start
,
26 BitVector
<2>* object_diff_state
,
28 return new DiffRequest(image_ctx
, snap_id_start
, snap_id_end
,
29 object_diff_state
, on_finish
);
32 DiffRequest(ImageCtxT
* image_ctx
, uint64_t snap_id_start
,
33 uint64_t snap_id_end
, BitVector
<2>* object_diff_state
,
35 : m_image_ctx(image_ctx
), m_snap_id_start(snap_id_start
),
36 m_snap_id_end(snap_id_end
), m_object_diff_state(object_diff_state
),
37 m_on_finish(on_finish
) {
51 * LOAD_OBJECT_MAP ---/
58 ImageCtxT
* m_image_ctx
;
59 uint64_t m_snap_id_start
;
60 uint64_t m_snap_id_end
;
61 BitVector
<2>* m_object_diff_state
;
64 std::set
<uint64_t> m_snap_ids
;
65 uint64_t m_current_snap_id
= 0;
66 bool m_ignore_enoent
= false;
68 uint64_t m_current_size
= 0;
70 BitVector
<2> m_object_map
;
71 BitVector
<2> m_prev_object_map
;
72 bool m_prev_object_map_valid
= false;
76 void load_object_map(std::shared_lock
<ceph::shared_mutex
>* image_locker
);
77 void handle_load_object_map(int r
);
83 } // namespace object_map
86 extern template class librbd::object_map::DiffRequest
<librbd::ImageCtx
>;
88 #endif // CEPH_LIBRBD_OBJECT_MAP_DIFF_REQUEST_H