fix: stack review follow-ups for #120-#127 - #135
Conversation
… releases - the watch has no receiver (the proposer borrows the sender), so `send` failed and discarded every value: the backpressure brake read 0 forever - `send_replace` stores unconditionally; publish from the pending manager on both suspension and drain so the count falls back to 0 once parents resolve - drop the duplicate publish in the cert manager; `insert_pending` already owns it - red test: suspend, drain, assert the watch reads 0 - addresses the PR #127 (perf/hot-path-optimizations) review blocker: proposer livelock on backpressure drain; the fix also covers the dead-watch case the review missed
- `MARK_BACKUP_VERSION` was written but never read on restore; bcs is positional, so a reshaped backup could decode into wrong marks instead of being refused - `#[must_use]` on `SealMarks`/`ForwardMarks`: dropping the handle silently discards the capability the arm minted; one test was doing exactly that - addresses the PR #120 (feature/txpool-in-flight-tracker-core) review: unchecked `MarkBackup::version` and the missing `#[must_use]` on the arm handles
…ting - boot recovery already drops a parked ref with no `Batches` row; a corrupt row used the infallible decode and aborted the node on the same defensive path - addresses the PR #123 (feature/txpool-ordering-and-proposer-hardening) review: infallible `decode` in `reconstruct_parked`
- `ok_or_eyre` takes a `Display` value, so the braces were emitted literally - addresses the PR #125 (feature/txpool-in-flight-tracker-forwarding-affinity) review: `ok_or_eyre` literal at both `node_inner.rs` sites
- `elapsed_ms` was stamped after the quorum result had already arrived, so it logged the resolution overhead, never the wait; `AwaitingQuorum` now carries the spawn instant - fix "becuase" in the max-batch-size error text - addresses the PR #124 (feature/txpool-in-flight-tracker-builder-pipeline) review: `elapsed_ms` always ~0, plus the typo nit
- the `Vec<Bytes>` identity with `Vec<Vec<u8>>` was asserted only in a comment; the pin encodes both and cross-decodes the old bytes into the new variant - addresses the PR #125 (feature/txpool-in-flight-tracker-forwarding-affinity) review: the `Vec<Bytes>` wire identity was comment-only
- the post-drain twin logs; the pre-drain snapshot swallowed the `JoinError`, leaving no trace when the node entered the drain with no backup - note at `max_tx_lifetime` that reth applies it to the queued sub-pool only - addresses the PR #121 (feature/txpool-reth-pool-maintenance) review: swallowed `JoinError`; the `max_tx_lifetime` note answers the same review's eviction concern, which misread the knob
f653415 to
02563e4
Compare
|
Claude finished @bronxyz's task in 3m 20s —— View job
PR Review: fix/stack-review-followupsSeven targeted follow-up fixes with red-first tests. The stale doc comment flagged in the previous review pass has been corrected. One prior suggestion remains outstanding; everything else is correct. What changed since the last passThe Findings
|
Security Scan - CodeSeverity: HIGH, CRITICAL No vulnerabilities found View scan results |
Summary
sendfailed and stored nothing - the count read 0 forever.send_replaceon both suspend and drain.MARK_BACKUP_VERSIONon restore plus#[must_use]on the arm handles; infallibledecodeon a parked body at boot;ok_or_eyreliteral braces;elapsed_msstamped after the quorum result; a bcs pin forWorkerGossip::Txn(Vec<Bytes>); a swallowedJoinErrorin the pre-drain txpool backup.Stack 9/9 of the txpool in-flight tracker and observer-forwarder series.
Review findings deliberately not taken, with the reason:
max_tx_lifetime: 5 min(feat: adopt reth pool maintenance and persist the txpool across restarts #121): the review misread the knob; reth applies it toqueued_transactions()only (maintain.rs:276-284), a pending tx is never lifetime-evicted. Documented at the site.biased;on the engine-updateselect!(refactor: extract the engine-update loop with an injectable interval #126): arms commute, a missed shutdown pick costs one idempotent tick;test_failed_report_leaves_txs_selectable_and_seq_unconsumed(feat: seal integrity and batch-seq normalization under a new hardfork #122): it gives a buggy seal path room to mark/persist; the correct path never does either, so there is nothing to poll for.RethRpcModule::Txpool(fix: harden batch ordering, proposer requeue, and boot recovery #123): operator--http.apiconfig, enabled deliberately bye460f8fd; mempool contents are gossiped, so the privacy premise does not hold.release_droppeduncalled,update_canonical_state_asyncunwired, staleorphan_batchescomments, redundantgc_round == 0guard.connected.containson a 4-7 member committee,gauge.sub(0),SeqCstin a test mock,stash_restoreoverwrite guard,anchor: 0inSealMarks::mark(the sealing policy hasmin_anchor_advance: 0).Surface areas touched
eth_*,rayls_*, faucet)rayls-contracts/)etc/, scripts, Docker, compose).github/workflows/,Makefile)doc/, in-crate READMEs, root docs)Breaking / compatibility
None. The gossip pin proves
Vec<Bytes>andVec<Vec<u8>>bcs-encode identically; a mark backup from another schema version is now discarded on restore instead of applied, which only affects a node-local file.Test plan
suspended_cert_count_follows_the_drain,arm_rejects_a_backup_from_another_schema_version,reconstruct_drops_a_parked_batch_whose_body_is_corrupt,worker_gossip_txn_payload_is_bcs_identical_to_vec_vec_u8.make checkclean; 534/534 tests in the touched crates (primary,evm,storage,worker,batch-builder,orchestrator); clippy warnings only in untouched files.