virtual void get_image_size(uint64_t snap_id, uint64_t* size,
Context* on_finish) = 0;
- virtual void read(io::AioCompletion* aio_comp, uint64_t snap_id,
+ virtual bool read(io::AioCompletion* aio_comp, uint64_t snap_id,
io::Extents&& image_extents, io::ReadResult&& read_result,
int op_flags, int read_flags,
const ZTracer::Trace &parent_trace) = 0;
ldout(cct, 20) << dendl;
*dispatch_result = io::DISPATCH_RESULT_COMPLETE;
- m_format->read(aio_comp, io_context->read_snap().value_or(CEPH_NOSNAP),
- std::move(image_extents), std::move(read_result), op_flags,
- read_flags, parent_trace);
- return true;
+ return m_format->read(aio_comp, io_context->read_snap().value_or(CEPH_NOSNAP),
+ std::move(image_extents), std::move(read_result),
+ op_flags, read_flags, parent_trace);
}
template <typename I>
on_finish->complete(0);
}
-template <typename I>
-void NativeFormat<I>::read(
- io::AioCompletion* aio_comp, uint64_t snap_id, io::Extents&& image_extents,
- io::ReadResult&& read_result, int op_flags, int read_flags,
- const ZTracer::Trace &parent_trace) {
- auto cct = m_image_ctx->cct;
- ldout(cct, 20) << "snap_id=" << snap_id << ", "
- << "image_extents=" << image_extents << dendl;
-
- auto io_context = m_image_ctx->duplicate_data_io_context();
- if (snap_id != CEPH_NOSNAP) {
- io_context->read_snap(snap_id);
- }
-
- auto req = io::ImageDispatchSpec::create_read(
- *m_image_ctx, io::IMAGE_DISPATCH_LAYER_MIGRATION, aio_comp,
- std::move(image_extents), std::move(read_result), io_context, op_flags,
- read_flags, {});
- req->send();
-}
-
template <typename I>
void NativeFormat<I>::list_snaps(io::Extents&& image_extents,
io::SnapIds&& snap_ids, int list_snaps_flags,
void get_image_size(uint64_t snap_id, uint64_t* size,
Context* on_finish) override;
- void read(io::AioCompletion* aio_comp, uint64_t snap_id,
+ bool read(io::AioCompletion* aio_comp, uint64_t snap_id,
io::Extents&& image_extents, io::ReadResult&& read_result,
int op_flags, int read_flags,
- const ZTracer::Trace &parent_trace) override;
+ const ZTracer::Trace &parent_trace) override {
+ return false;
+ }
void list_snaps(io::Extents&& image_extents, io::SnapIds&& snap_ids,
int list_snaps_flags, io::SnapshotDelta* snapshot_delta,
}
template <typename I>
-void RawFormat<I>::read(
+bool RawFormat<I>::read(
io::AioCompletion* aio_comp, uint64_t snap_id, io::Extents&& image_extents,
io::ReadResult&& read_result, int op_flags, int read_flags,
const ZTracer::Trace &parent_trace) {
if (snap_id != CEPH_NOSNAP) {
aio_comp->fail(-EINVAL);
- return;
+ return true;
}
aio_comp->read_result = std::move(read_result);
// raw directly maps the image-extent IO down to a byte IO extent
m_stream->read(std::move(image_extents), &ctx->bl, ctx);
+ return true;
}
template <typename I>
void get_image_size(uint64_t snap_id, uint64_t* size,
Context* on_finish) override;
- void read(io::AioCompletion* aio_comp, uint64_t snap_id,
+ bool read(io::AioCompletion* aio_comp, uint64_t snap_id,
io::Extents&& image_extents, io::ReadResult&& read_result,
int op_flags, int read_flags,
const ZTracer::Trace &parent_trace) override;
&ctx2, m_image_ctx, io::AIO_TYPE_READ);
bufferlist bl;
io::ReadResult read_result{&bl};
- mock_raw_format.read(aio_comp, CEPH_NOSNAP, {{123, 123}},
- std::move(read_result), 0, 0, {});
+ ASSERT_TRUE(mock_raw_format.read(aio_comp, CEPH_NOSNAP, {{123, 123}},
+ std::move(read_result), 0, 0, {}));
ASSERT_EQ(123, ctx2.wait());
ASSERT_EQ(expect_bl, bl);