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>;