<< "completion=" << aio_comp << dendl;
aio_comp->get();
- send_request();
+ if (m_bypass_image_cache || true) { // TODO
+ send_request();
+ } else {
+ send_image_cache_request();
+ }
}
template <typename I>
image_ctx.perfcounter->inc(l_librbd_rd_bytes, buffer_ofs);
}
+template <typename I>
+void AioImageRead<I>::send_image_cache_request() {
+ // TODO
+}
+
template <typename I>
void AbstractAioImageWrite<I>::send_request() {
I &image_ctx = this->m_image_ctx;
return tid;
}
+template <typename I>
+void AioImageWrite<I>::send_image_cache_request() {
+ // TODO
+}
+
template <typename I>
void AioImageWrite<I>::send_cache_requests(const ObjectExtents &object_extents,
uint64_t journal_tid) {
return (image_ctx.object_cacher != nullptr && journaling ? 1 : 0);
}
+template <typename I>
+void AioImageDiscard<I>::send_image_cache_request() {
+ // TODO
+}
+
template <typename I>
void AioImageDiscard<I>::send_cache_requests(const ObjectExtents &object_extents,
uint64_t journal_tid) {
image_ctx.perfcounter->inc(l_librbd_aio_flush);
}
+template <typename I>
+void AioImageFlush<I>::send_image_cache_request() {
+ // TODO
+}
+
} // namespace librbd
template class librbd::AioImageRequest<librbd::ImageCtx>;
void send();
void fail(int r);
+ void set_bypass_image_cache() {
+ m_bypass_image_cache = true;
+ }
+
protected:
typedef std::list<AioObjectRequestHandle *> AioObjectRequests;
ImageCtxT &m_image_ctx;
AioCompletion *m_aio_comp;
Extents m_image_extents;
+ bool m_bypass_image_cache = false;
AioImageRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
Extents &&image_extents)
}
virtual void send_request() = 0;
+ virtual void send_image_cache_request() = 0;
+
virtual aio_type_t get_aio_type() const = 0;
virtual const char *get_request_type() const = 0;
};
}
protected:
- virtual void send_request();
+ virtual void send_request() override;
+ virtual void send_image_cache_request() override;
+
virtual aio_type_t get_aio_type() const {
return AIO_TYPE_READ;
}
void assemble_extent(const ObjectExtent &object_extent, bufferlist *bl);
+ virtual void send_image_cache_request() override;
+
virtual void send_cache_requests(const ObjectExtents &object_extents,
uint64_t journal_tid);
}
virtual void prune_object_extents(ObjectExtents &object_extents) override;
+
+ virtual void send_image_cache_request() override;
+
virtual uint32_t get_cache_request_count(bool journaling) const override;
virtual void send_cache_requests(const ObjectExtents &object_extents,
uint64_t journal_tid);
using typename AioImageRequest<ImageCtxT>::AioObjectRequests;
virtual void send_request();
+ virtual void send_image_cache_request() override;
+
virtual aio_type_t get_aio_type() const {
return AIO_TYPE_FLUSH;
}
#include "ImageWriteback.h"
#include "include/buffer.h"
#include "common/dout.h"
+#include "librbd/AioCompletion.h"
#include "librbd/AioImageRequest.h"
#include "librbd/ImageCtx.h"
ldout(cct, 20) << "image_extents=" << image_extents << ", "
<< "on_finish=" << on_finish << dendl;
- // TODO
+ AioCompletion *aio_comp = AioCompletion::create_and_start(on_finish,
+ &m_image_ctx,
+ AIO_TYPE_READ);
+ AioImageRead<I> req(m_image_ctx, aio_comp, std::move(image_extents), nullptr,
+ bl, fadvise_flags);
+ req.set_bypass_image_cache();
+ req.send();
}
template <typename I>
ldout(cct, 20) << "image_extents=" << image_extents << ", "
<< "on_finish=" << on_finish << dendl;
- // TODO
+ AioCompletion *aio_comp = AioCompletion::create_and_start(on_finish,
+ &m_image_ctx,
+ AIO_TYPE_WRITE);
+ AioImageWrite<I> req(m_image_ctx, aio_comp, std::move(image_extents),
+ std::move(bl), fadvise_flags);
+ req.set_bypass_image_cache();
+ req.send();
}
template <typename I>
<< "length=" << length << ", "
<< "on_finish=" << on_finish << dendl;
- // TODO
+ AioCompletion *aio_comp = AioCompletion::create_and_start(on_finish,
+ &m_image_ctx,
+ AIO_TYPE_DISCARD);
+ AioImageDiscard<I> req(m_image_ctx, aio_comp, offset, length);
+ req.set_bypass_image_cache();
+ req.send();
}
template <typename I>
CephContext *cct = m_image_ctx.cct;
ldout(cct, 20) << "on_finish=" << on_finish << dendl;
- // TODO
+ AioCompletion *aio_comp = AioCompletion::create_and_start(on_finish,
+ &m_image_ctx,
+ AIO_TYPE_FLUSH);
+ AioImageFlush<I> req(m_image_ctx, aio_comp);
+ req.set_bypass_image_cache();
+ req.send();
}
} // namespace cache