Bug #65491
Updated by Matan Breizman about 1 month ago
<pre><code class="diff"> 2024-04-11T12:39:43.111 INFO:tasks.rados.rados.0.smithi112.stderr:Error: racing read on 65 returned version 12 rather than version 11 </code></pre> See requests *16777355* and *16777354* from osd.1 pg[3.2]: <pre><code class="diff"> 12:39:31,074 v 18'9 active+clean ClientRequest::with_pg_int: client_request(id=16777353).0: pg active, entering process[_pg]_op 12:39:31,074 v 18'9 active+clean ClientRequest::with_pg_int: client_request(id=16777353).0: pg active, entering process[_pg]_op 12:39:31,074 do_recover_missing check for recovery, 3:414dc9d4:::smithi11232367-65:head 12:39:31,077 v 18'9 active+clean ClientRequest::with_pg_int: client_request(id=16777354).0: pg active, entering process[_pg]_op 12:39:31,077 v 18'9 active+clean ClientRequest::with_pg_int: client_request(id=16777355).0: pg active, entering process[_pg]_op 12:39:31,077 v 18'9 active+clean ClientRequest::with_pg_int: client_request(id=16777355).0: pg active, entering process[_pg]_op 12:39:31,090 do_recover_missing check for recovery, 3:414dc9d4:::smithi11232367-65:head 12:39:31,090 do_recover_missing check for recovery, 3:414dc9d4:::smithi11232367-65:head 12:39:31,152 v 18'10 active+clean ClientRequest::process_op: client_request(id=16777353).0: checking already_complete 12:39:31,153 do_recover_missing check for recovery, 3:414dc9d4:::smithi11232367-65:head 12:39:31,153 v 18'10 active+clean ClientRequest::process_op: client_request(id=16777354).0: checking already_complete 12:39:31,153 do_recover_missing check for recovery, 3:414dc9d4:::smithi11232367-65:head 12:39:31,153 v 18'10 active+clean ClientRequest::process_op: client_request(id=16777353).0: entering process stage 12:39:31,154 v 18'10 active+clean ClientRequest::process_op: client_request(id=16777353).0: in process stage, calling do_process 12:39:31,220 v 18'11 active+clean ClientRequest::with_pg_int: client_request(id=16777353).0: process[_pg]_op complete, completing handle 12:39:31,220 v 18'11 active+clean ClientRequest::with_pg_int: client_request(id=16777353).0: process[_pg]_op complete, completing handle 12:39:31,221 v 18'11 active+clean ClientRequest::with_pg_int: client_request(id=16777353).0: exit 12:39:31,221 v 18'11 active+clean ClientRequest::process_op: client_request(id=16777355).0: checking already_complete 12:39:31,221 v 18'11 active+clean ClientRequest::process_op: client_request(id=16777355).0: checking already_complete 12:39:31,221 v 18'11 active+clean ClientRequest::process_op: client_request(id=16777354).0: entering process stage 12:39:31,222 v 18'11 active+clean ClientRequest::process_op: client_request(id=16777354).0: in process stage, calling do_process ***Version bump*** 12:39:31,224 v 18'11 active+clean PeeringState::append_log append_log log((0'0,18'11], crt=18'12) {18'12 (18'12) modify 3:414dc9d4:::smithi11232367-65:head 12:39:31,225 v 18'12 active+clean PeeringState::add_log_entry add_log_entry 18'12 (18'12) modify 3:414dc9d4:::smithi11232367-65:head ****************** *************************************************** ***** OSD.3 (not this) was killed and revived ***** 12:39:31.250 INFO:tasks.thrashosds.thrasher:Killing osd 3, live_osds are [0, 1, 2, 3] 12:39:36.322 INFO:tasks.thrashosds.thrasher:Reviving osd 3 *************************************************** *************************************************** 12:39:40,928 v 18'12 unknown ClientRequest::Orderer::requeue: requeueing client_request(id=16777354) 12:39:40,928 v 18'12 unknown ClientRequest::Orderer::requeue: requeueing client_request(id=16777354) 12:39:40,929 v 18'12 unknown ClientRequest::Orderer::requeue: requeueing client_request(id=16777355) 12:39:40,935 v 18'12 peering ClientRequest::with_pg_int: client_request(id=16777355).0: interrupted due to crimson::common::actingset_changed (acting set changed) 12:39:40,937 v 18'12 peering ClientRequest::with_pg_int: client_request(id=16777354).0: interrupted due to crimson::common::actingset_changed (acting set changed) 12:39:40,937 v 18'12 peering ClientRequest::with_pg_int: client_request(id=16777354).0: interrupted due to crimson::common::actingset_changed (acting set changed) 12:39:40,956 v 18'12 peering ClientRequest::with_pg_int: client_request(id=16777354).0: exit 12:39:41,838 v 18'12 unknown ClientRequest::Orderer::requeue: requeueing client_request(id=16777354) 12:39:41,839 v 18'12 unknown ClientRequest::Orderer::requeue: requeueing client_request(id=16777355) 12:39:41,857 v 18'12 unknown ClientRequest::with_pg_int: client_request(id=16777354).1: interrupted due to crimson::common::actingset_changed (acting set changed) 12:39:41,858 v 18'12 unknown ClientRequest::with_pg_int: client_request(id=16777354).1: exit 12:39:41,871 v 18'12 peering ClientRequest::with_pg_int: client_request(id=16777355).1: interrupted due to crimson::common::actingset_changed (acting set changed) 12:39:41,872 v 18'12 peering ClientRequest::with_pg_int: client_request(id=16777355).1: exit 12:39:42,985 v 18'12 active+degraded ClientRequest::with_pg_int: client_request(id=16777354).2: pg active, entering process[_pg]_op 12:39:42,986 do_recover_missing check for recovery, 3:414dc9d4:::smithi11232367-65:head 12:39:42,986 do_recover_missing need to wait for recovery, 3:414dc9d4:::smithi11232367-65:head 12:39:42,986 v 18'12 active+degraded ClientRequest::with_pg_int: client_request(id=16777355).2: pg active, entering process[_pg]_op 12:39:42,986 v 18'12 active+degraded BackgroundRecoveryT<T>::start: start 12:39:42,986 v 18'12 active+degraded UrgentRecovery::do_recovery: do_recovery 12:39:43,104 v 18'12 active+recovery_wait ClientRequest::process_op: client_request(id=16777354).2: checking already_complete 12:39:43,105 v 18'12 active+recovery_wait ClientRequest::with_pg_int: client_request(id=16777354).2: process[_pg]_op complete, completing handle 12:39:43,105 do_recover_missing check for recovery, 3:414dc9d4:::smithi11232367-65:head 12:39:43,106 v 18'12 active+recovery_wait ClientRequest::process_op: client_request(id=16777355).2: checking already_complete 12:39:43,106 v 18'12 active+recovery_wait ClientRequest::with_pg_int: client_request(id=16777354).2: exit 12:39:43,106 v 18'12 active+recovery_wait ClientRequest::process_op: client_request(id=16777355).2: entering process stage 12:39:43,107 v 18'12 active+recovery_wait ClientRequest::process_op: client_request(id=16777355).2: in process stage, calling do_process 12:39:43,112 v 18'12 active+recovery_wait ClientRequest::with_pg_int: client_request(id=16777355).2: process[_pg]_op complete, completing handle 12:39:43,113 v 18'12 active+recovery_wait ClientRequest::with_pg_int: client_request(id=16777355).2: exit 12:39:43,117 v 18'12 active+recovering BackgroundRecoveryT<T>::start: start 12:39:43,117 v 18'12 active+recovering BackgroundRecoveryT<T>::start: start 12:39:43,119 v 18'12 active+recovering PeeringState::needs_recovery is recovered 12:39:43,119 v 18'12 active+recovering PeeringState::needs_backfill does not need backfill 12:39:43,121 v 18'12 active PeeringState::needs_recovery is recovered </code></pre> *Hypothesis 1:* Note: 'entering process[_pg]_op' is called before 'recover_missing'. 16777354 and 16777355 are in 'entering process[_pg]_op' concurrently, UrgentRecovery::do_recovery may have been scheduled by 16777355 and not by 16777354 (reordered) was in 'wait wait for recovery'. recovery. <pre><code class="diff"> 16777354: entering process[_pg]_op 16777355: entering process[_pg]_op _Unkownid_ : UrgentRecovery::do_recovery: do_recovery 16777354: process[_pg]_op complete, completing handle 16777355: process[_pg]_op complete, completing handle </code></pre> _Unkownid_: reqid is not printed (Added logs in first comment). *Hypothesis 2:* See: 'Version bump'. Version was bumped to 12 and then both requests were requeued (requeueing client_request). When both started originally started with 11. _Need more info.._ *More info:* Sanitized log notes: * client_request(id=16777354, detail=m=[osd_op(client.4281.0:268 3.2 3:414dc9d4:::smithi11232367-65:head {setxattr _header (56) in=63b, truncate 3075648} snapc 0={} ondisk+write+known_if_redirected+supports_pool_eio e17)]) * client_request(id=16777355, detail=m=[osd_op(client.4281.0:269 3.2 3:414dc9d4:::smithi11232367-65:head {read 0~1} snapc 0={} ondisk+read+rwordered+known_if_redirected+supports_pool_eio e17)]) osd.1 handling the read req: <pre><code class="diff"> DEBUG 2024-04-11 12:39:43,107 [shard 2:main] osd - do_osd_ops_execute: object 3:414dc9d4:::smithi11232367-65:head - handling op read </code></pre> -See: https://gist.github.com/Matan-B/02e88c375760c1cb29f87d39de9122c9 - https://pulpito.ceph.com/matan-2024-04-11_11:23:27-crimson-rados-wip-matanb-crimson-replicated-testing-distro-crimson-smithi/7652230 https://pulpito.ceph.com/matan-2024-04-11_11:23:27-crimson-rados-wip-matanb-crimson-replicated-testing-distro-crimson-smithi/7652234/