Bug #57629
Updated by Samuel Just over 1 year ago
<pre> /home/sam/git-checkouts/ceph2/build/bin/crimson-osd -i 0 -c /home/sam/git-checkouts/ceph2/build/ceph.conf --mkfs --key AQDipStj9WAlNhAA9y0F8t9XWwuwsFxiZs7WSQ== --osd-uuid 7048b403-07c2-474e-afc1-380394a4ca6e --smp 1 --cpuset 0 --debug WARN 2022-09-22 00:01:39,378 [shard 0] seastar - Creation of perf_event based stall detector failed, falling back to posix timer: std::system_error (error system:13, perf_event_open() failed: Permission denied) INFO 2022-09-22 00:01:39,379 [shard 0] seastar - Created fair group io-queue-0, capacity rate 2147483:2147483, limit 12582912, rate 16777216 (factor 1), threshold 2000 INFO 2022-09-22 00:01:39,379 [shard 0] seastar - Created io group dev(0), length limit 4194304:4194304, rate 2147483647:2147483647 INFO 2022-09-22 00:01:39,379 [shard 0] seastar - Created io queue dev(0) capacities: 512:2000/2000 1024:3000/3000 2048:5000/5000 4096:9000/9000 8192:17000/17000 16384:33000/33000 32768:65000/65000 65536:129000/129000 131072:257000/257000 Segmentation fault on shard 0. Backtrace: 0# realloc at /home/sam/git-checkouts/ceph2/src/seastar/src/core/memory.cc:544 1# OPENSSL_LH_insert in /lib64/libcrypto.so.3 2# 0x00007F06EE0960E3 in /lib64/libcrypto.so.3 3# 0x00007F06EDFBD2E4 in /lib64/libcrypto.so.3 4# 0x00007F06ED1B7029 in /lib64/libc.so.6 5# CRYPTO_THREAD_run_once in /lib64/libcrypto.so.3 6# OPENSSL_init_crypto in /lib64/libcrypto.so.3 7# 0x00007F06EDF74C23 in /lib64/libcrypto.so.3 8# ERR_set_mark in /lib64/libcrypto.so.3 9# CONF_modules_load_file_ex in /lib64/libcrypto.so.3 10# 0x00007F06EDFBE5A0 in /lib64/libcrypto.so.3 11# 0x00007F06ED1B7029 in /lib64/libc.so.6 12# CRYPTO_THREAD_run_once in /lib64/libcrypto.so.3 13# OPENSSL_init_crypto in /lib64/libcrypto.so.3 14# 0x00007F06EE08FA7E in /lib64/libcrypto.so.3 15# 0x00007F06EDF953B1 in /lib64/libcrypto.so.3 16# EVP_CipherInit_ex in /lib64/libcrypto.so.3 17# ceph::crypto::onwire::rxtx_t::create_handler_pair(crimson::common::CephContext*, AuthConnectionMeta const&, bool, bool) at /home/sam/git-checkouts/ceph2/src/msg/async/crypto_onwire.cc:180 18# crimson::net::ProtocolV2::handle_auth_reply()::{lambda(ceph::msgr::v2::Tag)#1}::operator()(ceph::msgr::v2::Tag) const::{lambda()#4}::operator()() const at /home/sam/git-checkouts/ceph2/src/crimson/net/ProtocolV2.cc:560 19# crimson::net::ProtocolV2::handle_auth_reply()::{lambda(ceph::msgr::v2::Tag)#1}::operator()(ceph::msgr::v2::Tag) const at /home/sam/git-checkouts/ceph2/src/seastar/include/seastar/core/future.hh:2141 20# seastar::future_state_base::any::available() const at /home/sam/git-checkouts/ceph2/src/seastar/include/seastar/core/future.hh:459 21# seastar::reactor::run_tasks(seastar::reactor::task_queue&) at /home/sam/git-checkouts/ceph2/src/seastar/src/core/reactor.cc:2353 22# seastar::reactor::run_some_tasks() at /home/sam/git-checkouts/ceph2/src/seastar/src/core/reactor.cc:2766 23# seastar::reactor::do_run() at /home/sam/git-checkouts/ceph2/src/seastar/src/core/reactor.cc:2935 24# seastar::reactor::run() at /home/sam/git-checkouts/ceph2/src/seastar/src/core/reactor.cc:2823 25# seastar::app_template::run_deprecated(int, char**, std::function<void ()>&&) at /home/sam/git-checkouts/ceph2/src/seastar/src/core/app-template.cc:266 26# seastar::app_template::run(int, char**, std::function<seastar::future<int> ()>&&) at /home/sam/git-checkouts/ceph2/src/seastar/src/core/app-template.cc:156 27# main at /usr/include/c++/12/bits/std_function.h:334 28# 0x00007F06ED14E590 in /lib64/libc.so.6 29# __libc_start_main in /lib64/libc.so.6 30# _start in /home/sam/git-checkouts/ceph2/build/bin/crimson-osd </pre> On a branch based on 73ce96de86bd59e2d926ac238126d74d06364f14 from main, diff (should be irrelevant, but included for completeness): diff: <pre> diff --git a/src/crimson/osd/osd_operations/client_request.cc b/src/crimson/osd/osd_operations/client_request.cc index fca707f9851..8d6c587c751 100644 --- a/src/crimson/osd/osd_operations/client_request.cc +++ b/src/crimson/osd/osd_operations/client_request.cc @@ -202,13 +202,14 @@ ClientRequest::process_op(instance_handle_t &ihref, Ref<PG> &pg) [this, pg]() mutable { return do_recover_missing(pg, m->get_hobj()); }).then_interruptible([this, pg, &ihref]() mutable { - return pg->already_complete(m->get_reqid()).then_unpack_interruptible( - [this, pg, &ihref](bool completed, int ret) mutable + return pg->already_complete(m->get_reqid()).then_interruptible( + [this, pg, &ihref](auto completed) mutable -> PG::load_obc_iertr::future<seq_mode_t> { if (completed) { auto reply = crimson::make_message<MOSDOpReply>( - m.get(), ret, pg->get_osdmap_epoch(), + m.get(), completed->err, pg->get_osdmap_epoch(), CEPH_OSD_FLAG_ACK | CEPH_OSD_FLAG_ONDISK, false); + reply->set_reply_versions(completed->version, completed->user_version); return conn->send(std::move(reply)).then([] { return seastar::make_ready_future<seq_mode_t>(seq_mode_t::OUT_OF_ORDER); }); diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index 15b61225752..18e597e9938 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -1445,7 +1445,7 @@ bool PG::is_degraded_or_backfilling_object(const hobject_t& soid) const { return false; } -PG::interruptible_future<std::tuple<bool, int>> +PG::interruptible_future<std::optional<PG::complete_op_t>> PG::already_complete(const osd_reqid_t& reqid) { eversion_t version; @@ -1455,11 +1455,15 @@ PG::already_complete(const osd_reqid_t& reqid) if (peering_state.get_pg_log().get_log().get_request( reqid, &version, &user_version, &ret, &op_returns)) { - return backend->request_committed(reqid, version).then([ret] { - return seastar::make_ready_future<std::tuple<bool, int>>(true, ret); + complete_op_t dupinfo{ + user_version, + version, + ret}; + return backend->request_committed(reqid, version).then([dupinfo] { + return seastar::make_ready_future<std::optional<complete_op_t>>(dupinfo); }); } else { - return seastar::make_ready_future<std::tuple<bool, int>>(false, 0); + return seastar::make_ready_future<std::optional<complete_op_t>>(std::nullopt); } } diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index 7a5d6f7075e..1fb8d4dbbc9 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -711,7 +711,14 @@ public: return &it->second; } } - interruptible_future<std::tuple<bool, int>> already_complete(const osd_reqid_t& reqid); + + struct complete_op_t { + const version_t user_version; + const eversion_t version; + const int err; + }; + interruptible_future<std::optional<complete_op_t>> + already_complete(const osd_reqid_t& reqid); int get_recovery_op_priority() const { int64_t pri = 0; get_pgpool().info.opts.get(pool_opts_t::RECOVERY_OP_PRIORITY, &pri); </pre>