]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/librbd/io/ObjectDispatch.cc
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / librbd / io / ObjectDispatch.cc
index 4f3baa451f7e739b0283e5176f9c7f32a34203f3..a31cc74eac36a64a10d5ad8f1646022b29734be7 100644 (file)
@@ -3,7 +3,7 @@
 
 #include "librbd/io/ObjectDispatch.h"
 #include "common/dout.h"
-#include "common/WorkQueue.h"
+#include "librbd/AsioEngine.h"
 #include "librbd/ImageCtx.h"
 #include "librbd/Utils.h"
 #include "librbd/io/ObjectRequest.h"
@@ -28,25 +28,23 @@ void ObjectDispatch<I>::shut_down(Context* on_finish) {
   auto cct = m_image_ctx->cct;
   ldout(cct, 5) << dendl;
 
-  m_image_ctx->op_work_queue->queue(on_finish, 0);
+  m_image_ctx->asio_engine->post(on_finish, 0);
 }
 
 template <typename I>
 bool ObjectDispatch<I>::read(
-    uint64_t object_no, uint64_t object_off, uint64_t object_len,
-    librados::snap_t snap_id, int op_flags, const ZTracer::Trace &parent_trace,
-    ceph::bufferlist* read_data, ExtentMap* extent_map,
-    int* object_dispatch_flags, DispatchResult* dispatch_result,
-    Context** on_finish, Context* on_dispatched) {
+    uint64_t object_no, ReadExtents* extents, IOContext io_context,
+    int op_flags, int read_flags, const ZTracer::Trace &parent_trace,
+    uint64_t* version, int* object_dispatch_flags,
+    DispatchResult* dispatch_result, Context** on_finish,
+    Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
-  ldout(cct, 20) << data_object_name(m_image_ctx, object_no) << " "
-                 << object_off << "~" << object_len << dendl;
+  ldout(cct, 20) << "object_no=" << object_no << " " << *extents << dendl;
 
   *dispatch_result = DISPATCH_RESULT_COMPLETE;
-  auto req = new ObjectReadRequest<I>(m_image_ctx, object_no, object_off,
-                                      object_len, snap_id, op_flags,
-                                      parent_trace, read_data, extent_map,
-                                      on_dispatched);
+  auto req = new ObjectReadRequest<I>(m_image_ctx, object_no, extents,
+                                      io_context, op_flags, read_flags,
+                                      parent_trace, version, on_dispatched);
   req->send();
   return true;
 }
@@ -54,7 +52,7 @@ bool ObjectDispatch<I>::read(
 template <typename I>
 bool ObjectDispatch<I>::discard(
     uint64_t object_no, uint64_t object_off, uint64_t object_len,
-    const ::SnapContext &snapc, int discard_flags,
+    IOContext io_context, int discard_flags,
     const ZTracer::Trace &parent_trace, int* object_dispatch_flags,
     uint64_t* journal_tid, DispatchResult* dispatch_result,
     Context** on_finish, Context* on_dispatched) {
@@ -64,7 +62,7 @@ bool ObjectDispatch<I>::discard(
 
   *dispatch_result = DISPATCH_RESULT_COMPLETE;
   auto req = new ObjectDiscardRequest<I>(m_image_ctx, object_no, object_off,
-                                         object_len, snapc, discard_flags,
+                                         object_len, io_context, discard_flags,
                                          parent_trace, on_dispatched);
   req->send();
   return true;
@@ -73,7 +71,8 @@ bool ObjectDispatch<I>::discard(
 template <typename I>
 bool ObjectDispatch<I>::write(
     uint64_t object_no, uint64_t object_off, ceph::bufferlist&& data,
-    const ::SnapContext &snapc, int op_flags,
+    IOContext io_context, int op_flags, int write_flags,
+    std::optional<uint64_t> assert_version,
     const ZTracer::Trace &parent_trace, int* object_dispatch_flags,
     uint64_t* journal_tid, DispatchResult* dispatch_result,
     Context** on_finish, Context* on_dispatched) {
@@ -83,7 +82,8 @@ bool ObjectDispatch<I>::write(
 
   *dispatch_result = DISPATCH_RESULT_COMPLETE;
   auto req = new ObjectWriteRequest<I>(m_image_ctx, object_no, object_off,
-                                       std::move(data), snapc, op_flags,
+                                       std::move(data), io_context, op_flags,
+                                       write_flags, assert_version,
                                        parent_trace, on_dispatched);
   req->send();
   return true;
@@ -93,7 +93,7 @@ template <typename I>
 bool ObjectDispatch<I>::write_same(
     uint64_t object_no, uint64_t object_off, uint64_t object_len,
     LightweightBufferExtents&& buffer_extents, ceph::bufferlist&& data,
-    const ::SnapContext &snapc, int op_flags,
+    IOContext io_context, int op_flags,
     const ZTracer::Trace &parent_trace, int* object_dispatch_flags,
     uint64_t* journal_tid, DispatchResult* dispatch_result,
     Context** on_finish, Context* on_dispatched) {
@@ -104,8 +104,9 @@ bool ObjectDispatch<I>::write_same(
   *dispatch_result = DISPATCH_RESULT_COMPLETE;
   auto req = new ObjectWriteSameRequest<I>(m_image_ctx, object_no,
                                            object_off, object_len,
-                                           std::move(data), snapc, op_flags,
-                                           parent_trace, on_dispatched);
+                                           std::move(data), io_context,
+                                           op_flags, parent_trace,
+                                           on_dispatched);
   req->send();
   return true;
 }
@@ -113,7 +114,7 @@ bool ObjectDispatch<I>::write_same(
 template <typename I>
 bool ObjectDispatch<I>::compare_and_write(
     uint64_t object_no, uint64_t object_off, ceph::bufferlist&& cmp_data,
-    ceph::bufferlist&& write_data, const ::SnapContext &snapc, int op_flags,
+    ceph::bufferlist&& write_data, IOContext io_context, int op_flags,
     const ZTracer::Trace &parent_trace, uint64_t* mismatch_offset,
     int* object_dispatch_flags, uint64_t* journal_tid,
     DispatchResult* dispatch_result, Context** on_finish,
@@ -126,9 +127,30 @@ bool ObjectDispatch<I>::compare_and_write(
   auto req = new ObjectCompareAndWriteRequest<I>(m_image_ctx, object_no,
                                                  object_off,
                                                  std::move(cmp_data),
-                                                 std::move(write_data), snapc,
-                                                 mismatch_offset, op_flags,
-                                                 parent_trace, on_dispatched);
+                                                 std::move(write_data),
+                                                 io_context, mismatch_offset,
+                                                 op_flags, parent_trace,
+                                                 on_dispatched);
+  req->send();
+  return true;
+}
+
+template <typename I>
+bool ObjectDispatch<I>::list_snaps(
+    uint64_t object_no, io::Extents&& extents, SnapIds&& snap_ids,
+    int list_snap_flags, const ZTracer::Trace &parent_trace,
+    SnapshotDelta* snapshot_delta, int* object_dispatch_flags,
+    DispatchResult* dispatch_result, Context** on_finish,
+    Context* on_dispatched) {
+  auto cct = m_image_ctx->cct;
+  ldout(cct, 20) << data_object_name(m_image_ctx, object_no) << " "
+                 << "extents=" << extents << ", "
+                 << "snap_ids=" << snap_ids << dendl;
+
+  *dispatch_result = DISPATCH_RESULT_COMPLETE;
+  auto req = ObjectListSnapsRequest<I>::create(
+    m_image_ctx, object_no, std::move(extents), std::move(snap_ids),
+    list_snap_flags, parent_trace, snapshot_delta, on_dispatched);
   req->send();
   return true;
 }