Skip to content

Commit ab00072

Browse files
yehudasacbodley
authored andcommitted
librados: disable local affinity for IoCtx::exec() and aio_exec() calls
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 <[email protected]>
1 parent af17631 commit ab00072

File tree

3 files changed

+14
-11
lines changed

3 files changed

+14
-11
lines changed

src/librados/IoCtxImpl.cc

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -682,7 +682,8 @@ int librados::IoCtxImpl::operate(const object_t& oid, ::ObjectOperation *o,
682682
int librados::IoCtxImpl::operate_read(const object_t& oid,
683683
::ObjectOperation *o,
684684
bufferlist *pbl,
685-
int flags)
685+
int flags,
686+
int flags_mask)
686687
{
687688
if (!o->size())
688689
return 0;
@@ -701,6 +702,7 @@ int librados::IoCtxImpl::operate_read(const object_t& oid,
701702
oid, oloc,
702703
*o, snap_seq, pbl,
703704
flags | extra_op_flags,
705+
flags_mask,
704706
onack, &ver);
705707
objecter->op_submit(objecter_op);
706708

@@ -741,7 +743,7 @@ int librados::IoCtxImpl::aio_operate_read(const object_t &oid,
741743
trace.event("init root span");
742744
Objecter::Op *objecter_op = objecter->prepare_read_op(
743745
oid, oloc,
744-
*o, snap_seq, pbl, flags | extra_op_flags,
746+
*o, snap_seq, pbl, flags | extra_op_flags, -1,
745747
oncomplete, &c->objver, nullptr, 0, &trace);
746748
objecter->op_submit(objecter_op, &c->tid);
747749
trace.event("rados operate read submitted");
@@ -883,7 +885,7 @@ int librados::IoCtxImpl::aio_sparse_read(const object_t oid,
883885

884886
Objecter::Op *o = objecter->prepare_read_op(
885887
oid, oloc,
886-
onack->m_ops, snapid, NULL, extra_op_flags,
888+
onack->m_ops, snapid, NULL, extra_op_flags, -1,
887889
onack, &c->objver);
888890
objecter->op_submit(o, &c->tid);
889891
return 0;
@@ -932,7 +934,7 @@ int librados::IoCtxImpl::aio_cmpext(const object_t& oid,
932934
onack->m_ops.cmpext(off, cmp_len, cmp_buf, NULL);
933935

934936
Objecter::Op *o = objecter->prepare_read_op(
935-
oid, oloc, onack->m_ops, snap_seq, NULL, extra_op_flags, onack, &c->objver);
937+
oid, oloc, onack->m_ops, snap_seq, NULL, extra_op_flags, -1, onack, &c->objver);
936938
objecter->op_submit(o, &c->tid);
937939
return 0;
938940
}
@@ -1311,7 +1313,7 @@ int librados::IoCtxImpl::exec(const object_t& oid,
13111313
::ObjectOperation rd;
13121314
prepare_assert_ops(&rd);
13131315
rd.call(cls, method, inbl);
1314-
return operate_read(oid, &rd, &outbl);
1316+
return operate_read(oid, &rd, &outbl, 0, ~(CEPH_OSD_FLAG_LOCALIZE_READS | CEPH_OSD_FLAG_BALANCE_READS));
13151317
}
13161318

13171319
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,
13311333
prepare_assert_ops(&rd);
13321334
rd.call(cls, method, inbl);
13331335
Objecter::Op *o = objecter->prepare_read_op(
1334-
oid, oloc, rd, snap_seq, outbl, extra_op_flags, oncomplete, &c->objver);
1336+
oid, oloc, rd, snap_seq, outbl, extra_op_flags, ~(CEPH_OSD_FLAG_LOCALIZE_READS | CEPH_OSD_FLAG_BALANCE_READS), oncomplete, &c->objver);
13351337
objecter->op_submit(o, &c->tid);
13361338
return 0;
13371339
}
@@ -1357,7 +1359,7 @@ int librados::IoCtxImpl::aio_exec(const object_t& oid, AioCompletionImpl *c,
13571359
prepare_assert_ops(&rd);
13581360
rd.call(cls, method, inbl);
13591361
Objecter::Op *o = objecter->prepare_read_op(
1360-
oid, oloc, rd, snap_seq, &c->bl, extra_op_flags, oncomplete, &c->objver);
1362+
oid, oloc, rd, snap_seq, &c->bl, extra_op_flags, ~(CEPH_OSD_FLAG_LOCALIZE_READS | CEPH_OSD_FLAG_BALANCE_READS), oncomplete, &c->objver);
13611363
objecter->op_submit(o, &c->tid);
13621364
return 0;
13631365
}

src/librados/IoCtxImpl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ struct librados::IoCtxImpl {
155155
int rmxattr(const object_t& oid, const char *name);
156156

157157
int operate(const object_t& oid, ::ObjectOperation *o, ceph::real_time *pmtime, int flags=0, const jspan_context *otel_trace = nullptr);
158-
int operate_read(const object_t& oid, ::ObjectOperation *o, bufferlist *pbl, int flags=0);
158+
int operate_read(const object_t& oid, ::ObjectOperation *o, bufferlist *pbl, int flags=0, int flags_mask=-1);
159159
int aio_operate(const object_t& oid, ::ObjectOperation *o,
160160
AioCompletionImpl *c, const SnapContext& snap_context,
161161
const ceph::real_time *pmtime, int flags,

src/osdc/Objecter.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3092,12 +3092,13 @@ class Objecter : public md_config_obs_t, public Dispatcher {
30923092
Op *prepare_read_op(
30933093
const object_t& oid, const object_locator_t& oloc,
30943094
ObjectOperation& op,
3095-
snapid_t snapid, ceph::buffer::list *pbl, int flags,
3095+
snapid_t snapid, ceph::buffer::list *pbl,
3096+
int flags, int flags_mask,
30963097
Context *onack, version_t *objver = NULL,
30973098
int *data_offset = NULL,
30983099
uint64_t features = 0,
30993100
ZTracer::Trace *parent_trace = nullptr) {
3100-
Op *o = new Op(oid, oloc, std::move(op.ops), get_read_flags(flags), onack, objver,
3101+
Op *o = new Op(oid, oloc, std::move(op.ops), get_read_flags(flags) & flags_mask, onack, objver,
31013102
data_offset, parent_trace);
31023103
o->priority = op.priority;
31033104
o->snapid = snapid;
@@ -3118,7 +3119,7 @@ class Objecter : public md_config_obs_t, public Dispatcher {
31183119
Context *onack, version_t *objver = NULL,
31193120
int *data_offset = NULL,
31203121
uint64_t features = 0) {
3121-
Op *o = prepare_read_op(oid, oloc, op, snapid, pbl, flags, onack, objver,
3122+
Op *o = prepare_read_op(oid, oloc, op, snapid, pbl, flags, -1, onack, objver,
31223123
data_offset);
31233124
if (features)
31243125
o->features = features;

0 commit comments

Comments
 (0)