1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
3 #ifndef CEPH_LIBRBD_OPERATION_OBJECT_MAP_ITERATE_H
4 #define CEPH_LIBRBD_OPERATION_OBJECT_MAP_ITERATE_H
9 #include "include/int_types.h"
10 #include "include/rbd/object_map_types.h"
11 #include "librbd/AsyncRequest.h"
16 class ProgressContext
;
20 template <typename ImageCtxT
= ImageCtx
>
21 using ObjectIterateWork
= bool(*)(ImageCtxT
&image_ctx
,
23 uint8_t current_state
,
26 template <typename ImageCtxT
= ImageCtx
>
27 class ObjectMapIterateRequest
: public AsyncRequest
<ImageCtxT
> {
29 ObjectMapIterateRequest(ImageCtxT
&image_ctx
, Context
*on_finish
,
30 ProgressContext
&prog_ctx
,
31 ObjectIterateWork
<ImageCtxT
> handle_mismatch
)
32 : AsyncRequest
<ImageCtxT
>(image_ctx
, on_finish
), m_image_ctx(image_ctx
),
33 m_prog_ctx(prog_ctx
), m_handle_mismatch(handle_mismatch
)
40 bool should_complete(int r
) override
;
45 STATE_INVALIDATE_OBJECT_MAP
48 ImageCtxT
&m_image_ctx
;
49 ProgressContext
&m_prog_ctx
;
50 ObjectIterateWork
<ImageCtxT
> m_handle_mismatch
;
51 std::atomic_flag m_invalidate
= ATOMIC_FLAG_INIT
;
54 void send_verify_objects();
55 void send_invalidate_object_map();
57 uint64_t get_image_size() const;
60 } // namespace operation
63 extern template class librbd::operation::ObjectMapIterateRequest
<librbd::ImageCtx
>;