]> git.proxmox.com Git - ceph.git/blame - ceph/src/librbd/io/QueueImageDispatch.h
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / librbd / io / QueueImageDispatch.h
CommitLineData
f67539c2
TL
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_IO_QUEUE_IMAGE_DISPATCH_H
5#define CEPH_LIBRBD_IO_QUEUE_IMAGE_DISPATCH_H
6
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"
14#include <list>
15#include <set>
16
17struct Context;
18
19namespace librbd {
20
21struct ImageCtx;
22
23namespace io {
24
25struct AioCompletion;
26template <typename> class FlushTracker;
27
28template <typename ImageCtxT>
29class QueueImageDispatch : public ImageDispatchInterface {
30public:
31 QueueImageDispatch(ImageCtxT* image_ctx);
32 ~QueueImageDispatch();
33
34 ImageDispatchLayer get_dispatch_layer() const override {
35 return IMAGE_DISPATCH_LAYER_QUEUE;
36 }
37
38 void shut_down(Context* on_finish) override;
39
40 bool read(
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;
47 bool write(
48 AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
49 IOContext io_context, 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;
53 bool discard(
54 AioCompletion* aio_comp, Extents &&image_extents,
55 uint32_t discard_granularity_bytes, IOContext io_context,
56 const ZTracer::Trace &parent_trace, uint64_t tid,
57 std::atomic<uint32_t>* image_dispatch_flags,
58 DispatchResult* dispatch_result, Context** on_finish,
59 Context* on_dispatched) override;
60 bool write_same(
61 AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&bl,
62 IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace,
63 uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
64 DispatchResult* dispatch_result, Context** on_finish,
65 Context* on_dispatched) override;
66 bool compare_and_write(
67 AioCompletion* aio_comp, Extents &&image_extents, bufferlist &&cmp_bl,
68 bufferlist &&bl, uint64_t *mismatch_offset, IOContext io_context,
69 int op_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
70 std::atomic<uint32_t>* image_dispatch_flags,
71 DispatchResult* dispatch_result, Context** on_finish,
72 Context* on_dispatched) override;
73 bool flush(
74 AioCompletion* aio_comp, FlushSource flush_source,
75 const ZTracer::Trace &parent_trace, uint64_t tid,
76 std::atomic<uint32_t>* image_dispatch_flags,
77 DispatchResult* dispatch_result, Context** on_finish,
78 Context* on_dispatched) override;
79
80 bool list_snaps(
81 AioCompletion* aio_comp, Extents&& image_extents, SnapIds&& snap_ids,
82 int list_snaps_flags, SnapshotDelta* snapshot_delta,
83 const ZTracer::Trace &parent_trace, uint64_t tid,
84 std::atomic<uint32_t>* image_dispatch_flags,
85 DispatchResult* dispatch_result, Context** on_finish,
86 Context* on_dispatched) override {
87 return false;
88 }
89
90 bool invalidate_cache(Context* on_finish) override {
91 return false;
92 }
93
94private:
95 ImageCtxT* m_image_ctx;
96
97 FlushTracker<ImageCtxT>* m_flush_tracker;
98
99 void handle_finished(int r, uint64_t tid);
100
101 bool enqueue(bool read_op, uint64_t tid, DispatchResult* dispatch_result,
102 Context** on_finish, Context* on_dispatched);
103
104};
105
106} // namespace io
107} // namespace librbd
108
109extern template class librbd::io::QueueImageDispatch<librbd::ImageCtx>;
110
111#endif // CEPH_LIBRBD_IO_QUEUE_IMAGE_DISPATCH_H