Repository navigation
Epoch: record one delivery result per batch operator per duty epoch - #659
Conversation
sysio.epoch::advance walked the expiring group once per active outpost and sent sysio.opreg::recorddel and termcheck for every (outpost, member) pair, so each duty epoch wrote one dellog row per outpost. termcheck's thresholds and the min_terminate_window_ms bound count duty epochs, so the extra rows scaled the miss ladder with the outpost count. With the two launch outposts a full outage tripped the consecutive-miss rail after three duty epochs instead of six. An operator that kept missing one outpost interleaved a hit with every miss, so the consecutive rail never fired for it; only the percent rail could, and with enough outposts its miss rate falls under that threshold too. advance now combines each member's result across the active outposts before recording it. A member counts as delivered only if it delivered to every active outpost, and gets exactly one recorddel and one termcheck per duty epoch. The non-canonical-delivery slash collection stays per outpost and is still flushed ahead of the delivery records. An epoch with no active outpost records nothing, as before. The sysio.opreg docs now describe that cadence and termcheck's configured thresholds. sysio.epoch.wasm is rebuilt; its ABI is unchanged.
…very-record-per-duty-epoch
…very-record-per-duty-epoch The rotation fixture keeps master's native-WIRE bond and bootstrap flag and adds this branch's outpost selector. The walk checks the fresh roster on every registered outpost, so find_outbound_envelope now walks the table instead of probing ids below 32, which a two-outpost walk outgrows. sysio.epoch.wasm is rebuilt from the merged sources. Change-Id: I1bb7a0d3a9cb59aec0c3f1c98af55739030157cb
Change-Id: I993837341880f71d7d165fe1c739abdd2a4c398a
huangminghuang
left a comment
There was a problem hiding this comment.
Reviewed at head 3b78bc7. Fresh-state pre-launch behavior and focused tests look correct. Approval assumes deployments carrying legacy per-outpost dellog state will be reset before launch.
…very-record-per-duty-epoch Keeps this branch's table-walking readers (find_outbound_envelope, table_rows, delivered_dellog_count) over #684's yield-function swap in their old bodies; table_rows now decodes with fixture_abi_yield_function(). Change-Id: I524ac7050be1daa84124d9ac272c3a1b0f8d16c9
…very-record-per-duty-epoch Takes #658; sysio.epoch.wasm is rebuilt from the merged sources. Change-Id: I39193040495e4a4417e5377cc9043f4bb7b7664e
With no active outpost, advance must send no recorddel or termcheck, since "delivered to every active outpost" would hold vacuously. The test also activates an outpost afterwards and checks that recording resumes. Change-Id: I5937099759bcbc567754afdbeebdaec5d68a9e4b
huangminghuang
left a comment
There was a problem hiding this comment.
Re-reviewed current head 1cf719f against base 70e499f. No actionable findings. The zero-active-outpost regression addresses the prior low-priority finding. Fresh contract and test builds passed; sysio_msgch_chain_tests passed 31/31 (2,200 assertions), the focused operator-registry cadence test passed, and the rebuilt epoch WASM matches the committed artifact. The deployment is prelaunch, so no legacy delivery-log migration is required. Remote build-matrix jobs were still pending at review time.
Brings in #651, #659 and #701. sysio.epoch.wasm is rebuilt from the merged sources, and every other contract matches its committed wasm and ABI. MAX_OPERATORS_PER_EPOCH keeps the cap of 7 with #659's cost wording, one recorddel and termcheck per member. #659's shared rotation walk now checks the window roster: a member terminated as its group expires is no longer listed.
Brings in #692 (merged as a62f42c, superseding this branch's copies of its commits), #592, #659, #658, #651 and the rest of master. - `buildenv` keeps #592's retention: shipped rows are erased once packed, the chain links come from the newest `byoutepoch` row, and the acknowledged-prefix sweep runs before the inbound PROCESSED sweep. - `shipped_attestations` reads the newest `outenvelopes` row, since unacknowledged emits now stay, and the new readers decode with `fixture_abi_yield_function()` after #684's sweep. - Two locals in `buildenv` are renamed so they no longer shadow (`by_queue`, `inbound`). - `sysio.msgch.wasm` rebuilt.
sysio.epoch::advancesentsysio.opreg::recorddelandtermcheckfor every (outpost, member) pair of the expiring batch-operator group, so each duty epoch wrote one delivery row per active outpost.termcheck's thresholds and themin_terminate_window_msbound count duty epochs, so the extra rows scaled the miss ladder by the outpost count:advancenow records one result per member per duty epoch, delivered only if the member reached every active outpost, followed by onetermcheck. Non-canonical slashes are still collected per outpost and sent first. An epoch with no active outpost records nothing, as before.Notes
sysio.epoch.wasmis rebuilt; ABIs are unchanged. Thesysio.opregand README changes are docs only.noncanonical_delivery_slashes_before_terminationupdated for one row per duty epoch; an advance with no active outpost sends norecorddelortermcheck.MAX_OPERATORS_PER_EPOCHdoc this PR edits and also rebuildssysio.epoch.wasm; whichever lands later fixes that doc and rebuilds the wasm from the merged sources.