• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

iotaledger / iota / 32088388059
69%

Build:
DEFAULT BRANCH: develop
Ran 18 Aug 2026 02:21AM UTC
Jobs 1
Files 1062
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

17 Aug 2026 12:17PM UTC coverage: 69.727% (+0.03%) from 69.697%
32088388059

push

github

web-flow
fix(iota-core): tolerate out-of-order validator feedback timestamps (#12528)

# Description of change

`TimeDecayEwma::interval_alpha` asserted `debug_assert!(now >=
self.last_update, "Timestamps must be non-decreasing")`, but that is an
invariant the callers cannot provide, so the assert took down debug
builds under stress load.

There are two independent ways to reach it. First, feedback is stamped
with `Instant::now()` by its recorder — via
`OperationFeedback::ok_now`/`err_now` — *before* that recorder takes the
`client_stats` write lock in
`ValidatorClientMonitor::record_interaction_result`, so two recorders
reporting on the same validator can reach the stats in the opposite
order to their timestamps. `transaction_submitter`, `effects_certifier`
and `transaction_driver` all record concurrently, so this is ordinary
behaviour rather than an edge case.

Second, and needing no concurrency at all: `record_interaction_result`
scores the validator by calling `performance_score` with the incoming
feedback's timestamp, and that reads *every* operation's estimator. Each
operation advances on its own schedule — health checks fire on a timer
while submissions follow load — so a health check stamped behind a
submission reads the submit estimator at a timestamp older than its last
update.

The fix saturates the interval, which folds a late sample in with a
negligible weight instead of letting it rewrite the estimate, and stops
`last_update` moving backwards so a late sample cannot inflate the
intervals measured after it.

Two things worth a reviewer's attention. Release builds were never
affected by the crash, since `Instant::duration_since` saturates rather
than panicking, so this is a debug-only crash — but the `last_update`
change *is* a small behavioural change in release: previously a late
sample rewound the estimator's clock, which inflated the next interval
and so overweighted the next observation. Scoring is now stable against
out-of-order arrival. This... (continued)

5 of 5 new or added lines in 1 file covered. (100.0%)

749 existing lines in 44 files now uncovered.

169918 of 243691 relevant lines covered (69.73%)

464719.67 hits per line

Coverage Regressions

Lines Coverage ∆ File
167
93.56
0.63% crates/starfish/core/src/header_synchronizer.rs
126
56.08
-0.53% crates/iota-localnet/src/commands.rs
99
73.6
2.43% crates/iota-swarm/src/memory/swarm.rs
84
79.79
0.01% crates/iota-swarm-config/src/network_config_builder.rs
56
62.96
4.32% crates/iota-swarm-config/src/genesis_config.rs
21
90.25
-0.3% crates/iota-protocol-config/src/lib.rs
20
86.03
1.95% crates/iota-swarm-config/src/node_config_builder.rs
19
62.68
-1.07% crates/iota-json-rpc-types/src/iota_transaction.rs
17
77.87
-0.94% crates/test-cluster/src/lib.rs
10
96.32
0.0% crates/starfish/config/src/parameters.rs
9
66.67
-18.75% crates/iota-network-stack/src/anemo_ext.rs
8
51.36
0.34% crates/iota-sdk/src/apis/read.rs
7
82.51
-1.16% crates/iota-transaction-builder/src/lib.rs
7
96.81
-0.2% crates/starfish/core/src/dag_state.rs
7
98.82
-0.11% crates/starfish/core/src/peer_responsiveness.rs
6
75.56
-13.33% crates/iota-core/src/starfish_adapter.rs
6
79.46
-5.36% crates/iota-genesis-builder/src/validator_info.rs
6
71.17
-3.68% crates/iota-json-rpc/src/lib.rs
6
88.22
1.31% crates/iota-test-transaction-builder/src/lib.rs
6
74.57
-2.59% crates/iota-types/src/iota_system_state/mod.rs
6
52.77
-1.28% crates/iota-types/src/storage/shared_in_memory_store.rs
5
45.54
-4.95% crates/iota-json-rpc-types/src/object_changes.rs
5
78.32
-0.7% crates/iota-sdk/src/wallet_context.rs
4
92.08
-1.32% crates/iota-core/src/authority/test_authority_builder.rs
4
86.54
-0.46% crates/iota-core/src/grpc_indexes.rs
4
73.47
-2.72% crates/iota-json-rpc-types/src/lib.rs
4
74.89
-0.29% crates/iota-network/src/randomness/mod.rs
4
90.11
-1.52% crates/starfish/core/src/leader_timeout.rs
3
79.37
-1.05% crates/iota-sdk/src/lib.rs
3
66.67
-33.33% crates/iota-types/src/clock.rs
3
83.41
-0.73% crates/starfish/core/src/core_thread.rs
2
91.88
-1.02% crates/iota-core/src/execution_scheduler/execution_scheduler_impl.rs
2
96.78
-0.32% crates/iota-core/src/overload_monitor.rs
2
28.42
-1.05% crates/iota-core/src/transaction_driver/error.rs
2
97.08
-0.07% crates/starfish/core/src/core.rs
1
86.11
-2.78% crates/iota-cluster-test/src/test_case/native_transfer_test.rs
1
91.17
0.04% crates/iota-core/src/authority/authority_per_epoch_store.rs
1
73.12
-0.17% crates/iota-core/src/authority_server/validator.rs
1
82.42
0.11% crates/iota-core/src/checkpoints/mod.rs
1
89.69
-0.34% crates/iota-core/src/connection_monitor.rs
1
92.76
-0.12% crates/iota-core/src/consensus_adapter.rs
1
92.1
-0.11% crates/iota-core/src/epoch/randomness.rs
1
81.85
-0.19% crates/iota-types/src/messages_consensus.rs
1
93.36
-0.07% crates/starfish/core/src/commit_syncer/fast.rs
Jobs
ID Job ID Ran Files Coverage
1 nextest+simtest - 32088388059.1 18 Aug 2026 02:21AM UTC 1062
69.73
GitHub Action Run
Source Files on build 32088388059
  • Tree
  • List 1062
  • Changed 59
  • Source Changed 10
  • Coverage Changed 59
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #32088388059
  • a9914f4f on github
  • Prev Build on develop (#31985103434)
  • Next Build on develop (#32205096332)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc