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_IO_QUEUE_IMAGE_DISPATCH_H
5 #define CEPH_LIBRBD_IO_QUEUE_IMAGE_DISPATCH_H
7 #include "librbd/io/ImageDispatchInterface.h"
8 #include "include/int_types.h"
9 #include "include/buffer.h"
10 #include "common/zipkin_trace.h"
11 #include "common/Throttle.h"
12 #include "librbd/io/ReadResult.h"
13 #include "librbd/io/Types.h"
26 template <typename
> class FlushTracker
;
28 template <typename ImageCtxT
>
29 class QueueImageDispatch
: public ImageDispatchInterface
{
31 QueueImageDispatch(ImageCtxT
* image_ctx
);
32 ~QueueImageDispatch();
34 ImageDispatchLayer
get_dispatch_layer() const override
{
35 return IMAGE_DISPATCH_LAYER_QUEUE
;
38 void shut_down(Context
* on_finish
) override
;
41 AioCompletion
* aio_comp
, Extents
&&image_extents
,
42 ReadResult
&&read_result
, IOContext io_context
, int op_flags
,
43 int read_flags
, const ZTracer::Trace
&parent_trace
, uint64_t tid
,
44 std::atomic
<uint32_t>* image_dispatch_flags
,
45 DispatchResult
* dispatch_result
, Context
** on_finish
,
46 Context
* on_dispatched
) override
;
48 AioCompletion
* aio_comp
, Extents
&&image_extents
, bufferlist
&&bl
,
49 int op_flags
, const ZTracer::Trace
&parent_trace
,
50 uint64_t tid
, std::atomic
<uint32_t>* image_dispatch_flags
,
51 DispatchResult
* dispatch_result
, Context
** on_finish
,
52 Context
* on_dispatched
) override
;
54 AioCompletion
* aio_comp
, Extents
&&image_extents
,
55 uint32_t discard_granularity_bytes
, const ZTracer::Trace
&parent_trace
,
56 uint64_t tid
, std::atomic
<uint32_t>* image_dispatch_flags
,
57 DispatchResult
* dispatch_result
, Context
** on_finish
,
58 Context
* on_dispatched
) override
;
60 AioCompletion
* aio_comp
, Extents
&&image_extents
, bufferlist
&&bl
,
61 int op_flags
, const ZTracer::Trace
&parent_trace
,
62 uint64_t tid
, std::atomic
<uint32_t>* image_dispatch_flags
,
63 DispatchResult
* dispatch_result
, Context
** on_finish
,
64 Context
* on_dispatched
) override
;
65 bool compare_and_write(
66 AioCompletion
* aio_comp
, Extents
&&image_extents
,
67 bufferlist
&&cmp_bl
, bufferlist
&&bl
, uint64_t *mismatch_offset
,
68 int op_flags
, const ZTracer::Trace
&parent_trace
,
69 uint64_t tid
, std::atomic
<uint32_t>* image_dispatch_flags
,
70 DispatchResult
* dispatch_result
, Context
** on_finish
,
71 Context
* on_dispatched
) override
;
73 AioCompletion
* aio_comp
, FlushSource flush_source
,
74 const ZTracer::Trace
&parent_trace
, uint64_t tid
,
75 std::atomic
<uint32_t>* image_dispatch_flags
,
76 DispatchResult
* dispatch_result
, Context
** on_finish
,
77 Context
* on_dispatched
) override
;
80 AioCompletion
* aio_comp
, Extents
&& image_extents
, SnapIds
&& snap_ids
,
81 int list_snaps_flags
, SnapshotDelta
* snapshot_delta
,
82 const ZTracer::Trace
&parent_trace
, uint64_t tid
,
83 std::atomic
<uint32_t>* image_dispatch_flags
,
84 DispatchResult
* dispatch_result
, Context
** on_finish
,
85 Context
* on_dispatched
) override
{
89 bool invalidate_cache(Context
* on_finish
) override
{
94 ImageCtxT
* m_image_ctx
;
96 FlushTracker
<ImageCtxT
>* m_flush_tracker
;
98 void handle_finished(int r
, uint64_t tid
);
100 bool enqueue(bool read_op
, uint64_t tid
, DispatchResult
* dispatch_result
,
101 Context
** on_finish
, Context
* on_dispatched
);
106 } // namespace librbd
108 extern template class librbd::io::QueueImageDispatch
<librbd::ImageCtx
>;
110 #endif // CEPH_LIBRBD_IO_QUEUE_IMAGE_DISPATCH_H