]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: disable local affinity for IoCtx::exec() and aio_exec() calls
authorYehuda Sadeh <ysadehwe@ibm.com>
Thu, 9 May 2024 17:30:54 +0000 (13:30 -0400)
committerCasey Bodley <cbodley@redhat.com>
Thu, 12 Dec 2024 22:11:13 +0000 (17:11 -0500)
These calls are read calls but can and have been used as write calls,
which doesn't work with local (and balanced) affinity.

Signed-off-by: Yehuda Sadeh <ysadehwe@ibm.com>
src/librados/IoCtxImpl.cc
src/librados/IoCtxImpl.h
src/osdc/Objecter.h

index 92990cc40353fdfd03e8c8a7fd073e9ce8362ec8..ebac8a100cfe2b43c6fc7d5b49dbd82c639a0943 100644 (file)
@@ -682,7 +682,8 @@ int librados::IoCtxImpl::operate(const object_t& oid, ::ObjectOperation *o,
 int librados::IoCtxImpl::operate_read(const object_t& oid,
                                      ::ObjectOperation *o,
                                      bufferlist *pbl,
-                                     int flags)
+                                     int flags,
+                                      int flags_mask)
 {
   if (!o->size())
     return 0;
@@ -701,6 +702,7 @@ int librados::IoCtxImpl::operate_read(const object_t& oid,
     oid, oloc,
     *o, snap_seq, pbl,
     flags | extra_op_flags,
+    flags_mask,
     onack, &ver);
   objecter->op_submit(objecter_op);
 
@@ -741,7 +743,7 @@ int librados::IoCtxImpl::aio_operate_read(const object_t &oid,
   trace.event("init root span");
   Objecter::Op *objecter_op = objecter->prepare_read_op(
     oid, oloc,
-    *o, snap_seq, pbl, flags | extra_op_flags,
+    *o, snap_seq, pbl, flags | extra_op_flags, -1,
     oncomplete, &c->objver, nullptr, 0, &trace);
   objecter->op_submit(objecter_op, &c->tid);
   trace.event("rados operate read submitted");
@@ -883,7 +885,7 @@ int librados::IoCtxImpl::aio_sparse_read(const object_t oid,
 
   Objecter::Op *o = objecter->prepare_read_op(
     oid, oloc,
-    onack->m_ops, snapid, NULL, extra_op_flags,
+    onack->m_ops, snapid, NULL, extra_op_flags, -1,
     onack, &c->objver);
   objecter->op_submit(o, &c->tid);
   return 0;
@@ -932,7 +934,7 @@ int librados::IoCtxImpl::aio_cmpext(const object_t& oid,
   onack->m_ops.cmpext(off, cmp_len, cmp_buf, NULL);
 
   Objecter::Op *o = objecter->prepare_read_op(
-    oid, oloc, onack->m_ops, snap_seq, NULL, extra_op_flags, onack, &c->objver);
+    oid, oloc, onack->m_ops, snap_seq, NULL, extra_op_flags, -1, onack, &c->objver);
   objecter->op_submit(o, &c->tid);
   return 0;
 }
@@ -1311,7 +1313,7 @@ int librados::IoCtxImpl::exec(const object_t& oid,
   ::ObjectOperation rd;
   prepare_assert_ops(&rd);
   rd.call(cls, method, inbl);
-  return operate_read(oid, &rd, &outbl);
+  return operate_read(oid, &rd, &outbl, 0, ~(CEPH_OSD_FLAG_LOCALIZE_READS | CEPH_OSD_FLAG_BALANCE_READS));
 }
 
 int librados::IoCtxImpl::aio_exec(const object_t& oid, AioCompletionImpl *c,
@@ -1331,7 +1333,7 @@ int librados::IoCtxImpl::aio_exec(const object_t& oid, AioCompletionImpl *c,
   prepare_assert_ops(&rd);
   rd.call(cls, method, inbl);
   Objecter::Op *o = objecter->prepare_read_op(
-    oid, oloc, rd, snap_seq, outbl, extra_op_flags, oncomplete, &c->objver);
+    oid, oloc, rd, snap_seq, outbl, extra_op_flags, ~(CEPH_OSD_FLAG_LOCALIZE_READS | CEPH_OSD_FLAG_BALANCE_READS), oncomplete, &c->objver);
   objecter->op_submit(o, &c->tid);
   return 0;
 }
@@ -1357,7 +1359,7 @@ int librados::IoCtxImpl::aio_exec(const object_t& oid, AioCompletionImpl *c,
   prepare_assert_ops(&rd);
   rd.call(cls, method, inbl);
   Objecter::Op *o = objecter->prepare_read_op(
-    oid, oloc, rd, snap_seq, &c->bl, extra_op_flags, oncomplete, &c->objver);
+    oid, oloc, rd, snap_seq, &c->bl, extra_op_flags, ~(CEPH_OSD_FLAG_LOCALIZE_READS | CEPH_OSD_FLAG_BALANCE_READS), oncomplete, &c->objver);
   objecter->op_submit(o, &c->tid);
   return 0;
 }
index 23c402d7b5dfde883042b277dd05383f6363b3da..c0dece81e59ad159221da724879a73b7fc79aee0 100644 (file)
@@ -155,7 +155,7 @@ struct librados::IoCtxImpl {
   int rmxattr(const object_t& oid, const char *name);
 
   int operate(const object_t& oid, ::ObjectOperation *o, ceph::real_time *pmtime, int flags=0, const jspan_context *otel_trace = nullptr);
-  int operate_read(const object_t& oid, ::ObjectOperation *o, bufferlist *pbl, int flags=0);
+  int operate_read(const object_t& oid, ::ObjectOperation *o, bufferlist *pbl, int flags=0, int flags_mask=-1);
   int aio_operate(const object_t& oid, ::ObjectOperation *o,
                  AioCompletionImpl *c, const SnapContext& snap_context,
                  const ceph::real_time *pmtime, int flags,
index fcddcc55b8607843791a687b6f63ce1cb0ea6b2d..800d1a54e5331d72766a2626390f36508f78189d 100644 (file)
@@ -3092,12 +3092,13 @@ public:
   Op *prepare_read_op(
     const object_t& oid, const object_locator_t& oloc,
     ObjectOperation& op,
-    snapid_t snapid, ceph::buffer::list *pbl, int flags,
+    snapid_t snapid, ceph::buffer::list *pbl,
+    int flags, int flags_mask,
     Context *onack, version_t *objver = NULL,
     int *data_offset = NULL,
     uint64_t features = 0,
     ZTracer::Trace *parent_trace = nullptr) {
-    Op *o = new Op(oid, oloc, std::move(op.ops), get_read_flags(flags), onack, objver,
+    Op *o = new Op(oid, oloc, std::move(op.ops), get_read_flags(flags) & flags_mask, onack, objver,
                   data_offset, parent_trace);
     o->priority = op.priority;
     o->snapid = snapid;
@@ -3118,7 +3119,7 @@ public:
     Context *onack, version_t *objver = NULL,
     int *data_offset = NULL,
     uint64_t features = 0) {
-    Op *o = prepare_read_op(oid, oloc, op, snapid, pbl, flags, onack, objver,
+    Op *o = prepare_read_op(oid, oloc, op, snapid, pbl, flags, -1, onack, objver,
                            data_offset);
     if (features)
       o->features = features;