From af176311c4768fad3d6ca630e4f769e3012d2283 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Thu, 9 May 2024 09:42:50 -0400 Subject: [PATCH] objclass: change objclass exec read calls to write ones where needed Many of the exec calls were using a read version of the API while they were calling a write objclass method. This modifies the calls to use the write API. Fixes: https://tracker.ceph.com/issues/65889 Signed-off-by: Yehuda Sadeh --- src/cls/lua/cls_lua_client.cc | 5 +- src/cls/numops/cls_numops_client.cc | 12 +++-- src/cls/otp/cls_otp_client.cc | 4 +- src/cls/rbd/cls_rbd_client.cc | 84 +++++++++++++++++------------ src/cls/rgw/cls_rgw_client.cc | 12 +++-- src/test/cls_lua/test_cls_lua.cc | 5 +- src/test/cls_sdk/test_cls_sdk.cc | 17 ++++-- 7 files changed, 92 insertions(+), 47 deletions(-) diff --git a/src/cls/lua/cls_lua_client.cc b/src/cls/lua/cls_lua_client.cc index 0e6544a2693..b19cfa9c7b3 100644 --- a/src/cls/lua/cls_lua_client.cc +++ b/src/cls/lua/cls_lua_client.cc @@ -29,6 +29,9 @@ namespace cls_lua_client { bufferlist inbl; encode(op, inbl); - return ioctx.exec(oid, "lua", "eval_bufferlist", inbl, output); + librados::ObjectWriteOperation wop; + int rval; + wop.exec("lua", "eval_bufferlist", inbl, &output, &rval); + return ioctx.operate(oid, &wop); } } diff --git a/src/cls/numops/cls_numops_client.cc b/src/cls/numops/cls_numops_client.cc index fa1a69f2e22..a111a9b655b 100644 --- a/src/cls/numops/cls_numops_client.cc +++ b/src/cls/numops/cls_numops_client.cc @@ -28,7 +28,7 @@ namespace rados { const std::string& key, double value_to_add) { - bufferlist in, out; + bufferlist in; encode(key, in); std::stringstream stream; @@ -36,7 +36,10 @@ namespace rados { encode(stream.str(), in); - return ioctx->exec(oid, "numops", "add", in, out); + librados::ObjectWriteOperation op; + op.exec("numops", "add", in); + + return ioctx->operate(oid, &op); } int sub(librados::IoCtx *ioctx, @@ -60,7 +63,10 @@ namespace rados { encode(stream.str(), in); - return ioctx->exec(oid, "numops", "mul", in, out); + librados::ObjectWriteOperation op; + op.exec("numops", "mul", in); + + return ioctx->operate(oid, &op); } int div(librados::IoCtx *ioctx, diff --git a/src/cls/otp/cls_otp_client.cc b/src/cls/otp/cls_otp_client.cc index 0ba55571f8d..2462a0dc69d 100644 --- a/src/cls/otp/cls_otp_client.cc +++ b/src/cls/otp/cls_otp_client.cc @@ -68,7 +68,9 @@ namespace rados { bufferlist in; bufferlist out; encode(op, in); - int r = ioctx.exec(oid, "otp", "otp_check", in, out); + librados::ObjectWriteOperation wop; + wop.exec("otp", "otp_check", in); + int r = ioctx.operate(oid, &wop); if (r < 0) { return r; } diff --git a/src/cls/rbd/cls_rbd_client.cc b/src/cls/rbd/cls_rbd_client.cc index fca2d0ea18b..bc98e427cb0 100644 --- a/src/cls/rbd/cls_rbd_client.cc +++ b/src/cls/rbd/cls_rbd_client.cc @@ -1873,9 +1873,9 @@ int mirror_mode_set(librados::IoCtx *ioctx, bufferlist in_bl; encode(static_cast(mirror_mode), in_bl); - bufferlist out_bl; - int r = ioctx->exec(RBD_MIRRORING, "rbd", "mirror_mode_set", in_bl, - out_bl); + librados::ObjectWriteOperation op; + op.exec("rbd", "mirror_mode_set", in_bl); + int r = ioctx->operate(RBD_MIRRORING, &op); if (r < 0) { return r; } @@ -2002,9 +2002,9 @@ int mirror_peer_remove(librados::IoCtx *ioctx, bufferlist in_bl; encode(uuid, in_bl); - bufferlist out_bl; - int r = ioctx->exec(RBD_MIRRORING, "rbd", "mirror_peer_remove", in_bl, - out_bl); + librados::ObjectWriteOperation op; + op.exec("rbd", "mirror_peer_remove", in_bl); + int r = ioctx->operate(RBD_MIRRORING, &op); if (r < 0) { return r; } @@ -2018,9 +2018,9 @@ int mirror_peer_set_client(librados::IoCtx *ioctx, encode(uuid, in_bl); encode(client_name, in_bl); - bufferlist out_bl; - int r = ioctx->exec(RBD_MIRRORING, "rbd", "mirror_peer_set_client", - in_bl, out_bl); + librados::ObjectWriteOperation op; + op.exec("rbd", "mirror_peer_set_client", in_bl); + int r = ioctx->operate(RBD_MIRRORING, &op); if (r < 0) { return r; } @@ -2034,9 +2034,9 @@ int mirror_peer_set_cluster(librados::IoCtx *ioctx, encode(uuid, in_bl); encode(cluster_name, in_bl); - bufferlist out_bl; - int r = ioctx->exec(RBD_MIRRORING, "rbd", "mirror_peer_set_cluster", - in_bl, out_bl); + librados::ObjectWriteOperation op; + op.exec("rbd", "mirror_peer_set_cluster", in_bl); + int r = ioctx->operate(RBD_MIRRORING, &op); if (r < 0) { return r; } @@ -2050,9 +2050,9 @@ int mirror_peer_set_direction( encode(uuid, in_bl); encode(static_cast(mirror_peer_direction), in_bl); - bufferlist out_bl; - int r = ioctx->exec(RBD_MIRRORING, "rbd", "mirror_peer_set_direction", - in_bl, out_bl); + librados::ObjectWriteOperation op; + op.exec("rbd", "mirror_peer_set_direction", in_bl); + int r = ioctx->operate(RBD_MIRRORING, &op); if (r < 0) { return r; } @@ -2630,39 +2630,47 @@ int group_dir_list(librados::IoCtx *ioctx, const std::string &oid, int group_dir_add(librados::IoCtx *ioctx, const std::string &oid, const std::string &name, const std::string &id) { - bufferlist in, out; + bufferlist in; encode(name, in); encode(id, in); - return ioctx->exec(oid, "rbd", "group_dir_add", in, out); + librados::ObjectWriteOperation op; + op.exec("rbd", "group_dir_add", in); + return ioctx->operate(oid, &op); } int group_dir_rename(librados::IoCtx *ioctx, const std::string &oid, const std::string &src, const std::string &dest, const std::string &id) { - bufferlist in, out; + bufferlist in; encode(src, in); encode(dest, in); encode(id, in); - return ioctx->exec(oid, "rbd", "group_dir_rename", in, out); + librados::ObjectWriteOperation op; + op.exec("rbd", "group_dir_rename", in); + return ioctx->operate(oid, &op); } int group_dir_remove(librados::IoCtx *ioctx, const std::string &oid, const std::string &name, const std::string &id) { - bufferlist in, out; + bufferlist in; encode(name, in); encode(id, in); - return ioctx->exec(oid, "rbd", "group_dir_remove", in, out); + librados::ObjectWriteOperation op; + op.exec("rbd", "group_dir_remove", in); + return ioctx->operate(oid, &op); } int group_image_remove(librados::IoCtx *ioctx, const std::string &oid, const cls::rbd::GroupImageSpec &spec) { - bufferlist bl, bl2; + bufferlist bl; encode(spec, bl); - return ioctx->exec(oid, "rbd", "group_image_remove", bl, bl2); + librados::ObjectWriteOperation op; + op.exec("rbd", "group_image_remove", bl); + return ioctx->operate(oid, &op); } int group_image_list(librados::IoCtx *ioctx, @@ -2692,28 +2700,34 @@ int group_image_list(librados::IoCtx *ioctx, int group_image_set(librados::IoCtx *ioctx, const std::string &oid, const cls::rbd::GroupImageStatus &st) { - bufferlist bl, bl2; + bufferlist bl; encode(st, bl); - return ioctx->exec(oid, "rbd", "group_image_set", bl, bl2); + librados::ObjectWriteOperation op; + op.exec("rbd", "group_image_set", bl); + return ioctx->operate(oid, &op); } int image_group_add(librados::IoCtx *ioctx, const std::string &oid, const cls::rbd::GroupSpec &group_spec) { - bufferlist bl, bl2; + bufferlist bl; encode(group_spec, bl); - return ioctx->exec(oid, "rbd", "image_group_add", bl, bl2); + librados::ObjectWriteOperation op; + op.exec("rbd", "image_group_add", bl); + return ioctx->operate(oid, &op); } int image_group_remove(librados::IoCtx *ioctx, const std::string &oid, const cls::rbd::GroupSpec &group_spec) { - bufferlist bl, bl2; + bufferlist bl; encode(group_spec, bl); - return ioctx->exec(oid, "rbd", "image_group_remove", bl, bl2); + librados::ObjectWriteOperation op; + op.exec("rbd", "image_group_remove", bl); + return ioctx->operate(oid, &op); } void image_group_get_start(librados::ObjectReadOperation *op) @@ -2753,9 +2767,11 @@ int group_snap_set(librados::IoCtx *ioctx, const std::string &oid, const cls::rbd::GroupSnapshot &snapshot) { using ceph::encode; - bufferlist inbl, outbl; + bufferlist inbl; encode(snapshot, inbl); - int r = ioctx->exec(oid, "rbd", "group_snap_set", inbl, outbl); + librados::ObjectWriteOperation op; + op.exec("rbd", "group_snap_set", inbl); + int r = ioctx->operate(oid, &op); return r; } @@ -2763,9 +2779,11 @@ int group_snap_remove(librados::IoCtx *ioctx, const std::string &oid, const std::string &snap_id) { using ceph::encode; - bufferlist inbl, outbl; + bufferlist inbl; encode(snap_id, inbl); - return ioctx->exec(oid, "rbd", "group_snap_remove", inbl, outbl); + librados::ObjectWriteOperation op; + op.exec("rbd", "group_snap_remove", inbl); + return ioctx->operate(oid, &op); } int group_snap_get_by_id(librados::IoCtx *ioctx, const std::string &oid, diff --git a/src/cls/rgw/cls_rgw_client.cc b/src/cls/rgw/cls_rgw_client.cc index bb6eb4d13e7..a965b11f381 100644 --- a/src/cls/rgw/cls_rgw_client.cc +++ b/src/cls/rgw/cls_rgw_client.cc @@ -481,7 +481,9 @@ int cls_rgw_bi_put(librados::IoCtx& io_ctx, const string oid, const rgw_cls_bi_e rgw_cls_bi_put_op call; call.entry = entry; encode(call, in); - int r = io_ctx.exec(oid, RGW_CLASS, RGW_BI_PUT, in, out); + librados::ObjectWriteOperation op; + op.exec(RGW_CLASS, RGW_BI_PUT, in); + int r = io_ctx.operate(oid, &op); if (r < 0) return r; @@ -1223,7 +1225,9 @@ int cls_rgw_set_bucket_resharding(librados::IoCtx& io_ctx, const string& oid, cls_rgw_set_bucket_resharding_op call; call.entry = entry; encode(call, in); - return io_ctx.exec(oid, RGW_CLASS, RGW_SET_BUCKET_RESHARDING, in, out); + librados::ObjectWriteOperation op; + op.exec(RGW_CLASS, RGW_SET_BUCKET_RESHARDING, in); + return io_ctx.operate(oid, &op); } int cls_rgw_clear_bucket_resharding(librados::IoCtx& io_ctx, const string& oid) @@ -1231,7 +1235,9 @@ int cls_rgw_clear_bucket_resharding(librados::IoCtx& io_ctx, const string& oid) bufferlist in, out; cls_rgw_clear_bucket_resharding_op call; encode(call, in); - return io_ctx.exec(oid, RGW_CLASS, RGW_CLEAR_BUCKET_RESHARDING, in, out); + librados::ObjectWriteOperation op; + op.exec(RGW_CLASS, RGW_CLEAR_BUCKET_RESHARDING, in); + return io_ctx.operate(oid, &op); } int cls_rgw_get_bucket_resharding(librados::IoCtx& io_ctx, const string& oid, diff --git a/src/test/cls_lua/test_cls_lua.cc b/src/test/cls_lua/test_cls_lua.cc index a7d09aba464..0bc3876941d 100644 --- a/src/test/cls_lua/test_cls_lua.cc +++ b/src/test/cls_lua/test_cls_lua.cc @@ -1100,7 +1100,10 @@ TEST_F(ClsLua, Json) { inbl.append(json_test_script); - int ret = ioctx.exec(oid, "lua", "eval_json", inbl, outbl); + librados::ObjectWriteOperation wop; + int rval; + wop.exec("lua", "eval_json", inbl, &outbl, &rval); + int ret = ioctx.operate(oid, &wop); ASSERT_EQ(ret, 0); std::string out(outbl.c_str(), outbl.length()); diff --git a/src/test/cls_sdk/test_cls_sdk.cc b/src/test/cls_sdk/test_cls_sdk.cc index 44b32196b3a..775c8c3ff37 100644 --- a/src/test/cls_sdk/test_cls_sdk.cc +++ b/src/test/cls_sdk/test_cls_sdk.cc @@ -13,8 +13,10 @@ TEST(ClsSDK, TestSDKCoverageWrite) { IoCtx ioctx; cluster.ioctx_create(pool_name.c_str(), ioctx); - bufferlist in, out; - ASSERT_EQ(0, ioctx.exec("myobject", "sdk", "test_coverage_write", in, out)); + bufferlist in; + librados::ObjectWriteOperation op; + op.exec("sdk", "test_coverage_write", in); + ASSERT_EQ(0, ioctx.operate("myobject", &op)); ASSERT_EQ(0, destroy_one_pool_pp(pool_name, cluster)); } @@ -26,9 +28,14 @@ TEST(ClsSDK, TestSDKCoverageReplay) { IoCtx ioctx; cluster.ioctx_create(pool_name.c_str(), ioctx); - bufferlist in, out; - ASSERT_EQ(0, ioctx.exec("myobject", "sdk", "test_coverage_write", in, out)); - ASSERT_EQ(0, ioctx.exec("myobject", "sdk", "test_coverage_replay", in, out)); + bufferlist in; + librados::ObjectWriteOperation op; + op.exec("sdk", "test_coverage_write", in); + ASSERT_EQ(0, ioctx.operate("myobject", &op)); + + librados::ObjectWriteOperation op2; + op2.exec("sdk", "test_coverage_replay", in); + ASSERT_EQ(0, ioctx.operate("myobject", &op2)); ASSERT_EQ(0, destroy_one_pool_pp(pool_name, cluster)); } -- 2.39.5