chore(catalyst-ci): Update catalyst-ci to v3.6.5
Home /
Input Output /
hermes
Nov 12, 10-11 AM (1)
Nov 12, 11-12 PM (5)
Nov 12, 12-1 PM (2)
Nov 12, 1-2 PM (2)
Nov 12, 2-3 PM (0)
Nov 12, 3-4 PM (0)
Nov 12, 4-5 PM (0)
Nov 12, 5-6 PM (0)
Nov 12, 6-7 PM (0)
Nov 12, 7-8 PM (0)
Nov 12, 8-9 PM (0)
Nov 12, 9-10 PM (0)
Nov 12, 10-11 PM (0)
Nov 12, 11-12 AM (0)
Nov 13, 12-1 AM (0)
Nov 13, 1-2 AM (1)
Nov 13, 2-3 AM (0)
Nov 13, 3-4 AM (0)
Nov 13, 4-5 AM (0)
Nov 13, 5-6 AM (0)
Nov 13, 6-7 AM (2)
Nov 13, 7-8 AM (0)
Nov 13, 8-9 AM (7)
Nov 13, 9-10 AM (0)
Nov 13, 10-11 AM (2)
Nov 13, 11-12 PM (13)
Nov 13, 12-1 PM (1)
Nov 13, 1-2 PM (2)
Nov 13, 2-3 PM (0)
Nov 13, 3-4 PM (0)
Nov 13, 4-5 PM (0)
Nov 13, 5-6 PM (0)
Nov 13, 6-7 PM (0)
Nov 13, 7-8 PM (0)
Nov 13, 8-9 PM (0)
Nov 13, 9-10 PM (0)
Nov 13, 10-11 PM (0)
Nov 13, 11-12 AM (0)
Nov 14, 12-1 AM (0)
Nov 14, 1-2 AM (1)
Nov 14, 2-3 AM (0)
Nov 14, 3-4 AM (0)
Nov 14, 4-5 AM (0)
Nov 14, 5-6 AM (0)
Nov 14, 6-7 AM (0)
Nov 14, 7-8 AM (0)
Nov 14, 8-9 AM (4)
Nov 14, 9-10 AM (1)
Nov 14, 10-11 AM (1)
Nov 14, 11-12 PM (0)
Nov 14, 12-1 PM (2)
Nov 14, 1-2 PM (0)
Nov 14, 2-3 PM (0)
Nov 14, 3-4 PM (0)
Nov 14, 4-5 PM (0)
Nov 14, 5-6 PM (0)
Nov 14, 6-7 PM (0)
Nov 14, 7-8 PM (0)
Nov 14, 8-9 PM (0)
Nov 14, 9-10 PM (0)
Nov 14, 10-11 PM (0)
Nov 14, 11-12 AM (0)
Nov 15, 12-1 AM (0)
Nov 15, 1-2 AM (0)
Nov 15, 2-3 AM (0)
Nov 15, 3-4 AM (0)
Nov 15, 4-5 AM (0)
Nov 15, 5-6 AM (0)
Nov 15, 6-7 AM (0)
Nov 15, 7-8 AM (0)
Nov 15, 8-9 AM (0)
Nov 15, 9-10 AM (0)
Nov 15, 10-11 AM (0)
Nov 15, 11-12 PM (0)
Nov 15, 12-1 PM (0)
Nov 15, 1-2 PM (0)
Nov 15, 2-3 PM (0)
Nov 15, 3-4 PM (0)
Nov 15, 4-5 PM (0)
Nov 15, 5-6 PM (0)
Nov 15, 6-7 PM (0)
Nov 15, 7-8 PM (0)
Nov 15, 8-9 PM (0)
Nov 15, 9-10 PM (0)
Nov 15, 10-11 PM (0)
Nov 15, 11-12 AM (0)
Nov 16, 12-1 AM (0)
Nov 16, 1-2 AM (0)
Nov 16, 2-3 AM (0)
Nov 16, 3-4 AM (0)
Nov 16, 4-5 AM (0)
Nov 16, 5-6 AM (0)
Nov 16, 6-7 AM (0)
Nov 16, 7-8 AM (0)
Nov 16, 8-9 AM (0)
Nov 16, 9-10 AM (0)
Nov 16, 10-11 AM (0)
Nov 16, 11-12 PM (0)
Nov 16, 12-1 PM (0)
Nov 16, 1-2 PM (0)
Nov 16, 2-3 PM (0)
Nov 16, 3-4 PM (0)
Nov 16, 4-5 PM (0)
Nov 16, 5-6 PM (0)
Nov 16, 6-7 PM (0)
Nov 16, 7-8 PM (0)
Nov 16, 8-9 PM (0)
Nov 16, 9-10 PM (0)
Nov 16, 10-11 PM (0)
Nov 16, 11-12 AM (0)
Nov 17, 12-1 AM (0)
Nov 17, 1-2 AM (0)
Nov 17, 2-3 AM (0)
Nov 17, 3-4 AM (0)
Nov 17, 4-5 AM (0)
Nov 17, 5-6 AM (1)
Nov 17, 6-7 AM (0)
Nov 17, 7-8 AM (0)
Nov 17, 8-9 AM (0)
Nov 17, 9-10 AM (1)
Nov 17, 10-11 AM (2)
Nov 17, 11-12 PM (0)
Nov 17, 12-1 PM (0)
Nov 17, 1-2 PM (0)
Nov 17, 2-3 PM (0)
Nov 17, 3-4 PM (0)
Nov 17, 4-5 PM (0)
Nov 17, 5-6 PM (0)
Nov 17, 6-7 PM (0)
Nov 17, 7-8 PM (0)
Nov 17, 8-9 PM (0)
Nov 17, 9-10 PM (1)
Nov 17, 10-11 PM (0)
Nov 17, 11-12 AM (3)
Nov 18, 12-1 AM (0)
Nov 18, 1-2 AM (0)
Nov 18, 2-3 AM (0)
Nov 18, 3-4 AM (0)
Nov 18, 4-5 AM (0)
Nov 18, 5-6 AM (0)
Nov 18, 6-7 AM (0)
Nov 18, 7-8 AM (0)
Nov 18, 8-9 AM (3)
Nov 18, 9-10 AM (2)
Nov 18, 10-11 AM (1)
Nov 18, 11-12 PM (4)
Nov 18, 12-1 PM (5)
Nov 18, 1-2 PM (1)
Nov 18, 2-3 PM (1)
Nov 18, 3-4 PM (0)
Nov 18, 4-5 PM (0)
Nov 18, 5-6 PM (0)
Nov 18, 6-7 PM (3)
Nov 18, 7-8 PM (0)
Nov 18, 8-9 PM (0)
Nov 18, 9-10 PM (0)
Nov 18, 10-11 PM (0)
Nov 18, 11-12 AM (0)
Nov 19, 12-1 AM (0)
Nov 19, 1-2 AM (0)
Nov 19, 2-3 AM (0)
Nov 19, 3-4 AM (0)
Nov 19, 4-5 AM (0)
Nov 19, 5-6 AM (2)
Nov 19, 6-7 AM (2)
Nov 19, 7-8 AM (2)
Nov 19, 8-9 AM (2)
Nov 19, 9-10 AM (0)
Nov 19, 10-11 AM (0)
83 commits this week
Nov 12, 2025
-
Nov 19, 2025
fix(cardano): add rate limiting to prevent resource exhaustion during indexing
Implement interval-based rate limiting (~100 blocks/sec) in the subscription loop to prevent memory exhaustion and OOM kills during blockchain indexing. Problem: Network produces blocks at high throughput (100s/sec) while WASM processes significantly slower. Resources are created in DashMap BEFORE bounded event queue send() can apply backpressure. Even with a 10K bounded channel, resources accumulate in memory while waiting for queue space, leading to unbounded growth and OOM kills (exit code 137) within minutes. Solution: Rate limit block processing using tokio::time::interval at the TOP of the subscription loop, before pulling blocks from the network. This matches resource creation rate to WASM consumption rate (~100 blocks/sec), preventing accumulation. Changes: - Add BLOCK_RATE_LIMIT_MS constant (10ms interval) - Replace tokio::select! on follower.next() with interval-based tick - Set MissedTickBehavior::Skip to prevent tick accumulation - Add detailed comments explaining resource lifecycle and ordering problem - Add TODO for future lazy resource creation approach Works in conjunction with bounded event queue (10K capacity) - both mechanisms are required because resources exist before backpressure can apply. Note: Rate limiting is a pragmatic fix for the current event-driven architecture. Long-term solution should use lazy resource creation (send Arc<BlockData> in events, create resources on-demand when WASM accesses them) to eliminate the ordering problem entirely
feat(athena): staked ada purge and recover
update cargo lock
Signed-off-by: bkioshn <[email protected]>
Merge branch 'main' into fix/cardano-rte-thread
fix linter and format
Signed-off-by: bkioshn <[email protected]>
rename the option
Merge remote-tracking branch 'origin/main' into feat/arthur/hermes-single-thread-execution-option
chore(catalyst-ci): Update catalyst-ci to v3.6.3
fix(cardano): add rate limiting to prevent resource exhaustion during indexing
Implement interval-based rate limiting (~100 blocks/sec) in the subscription loop to prevent memory exhaustion and system freezes during blockchain indexing. The network can produce hundreds of blocks per second during historical sync, but WASM processing is significantly slower (~30-50 blocks/sec). Without rate limiting, resources accumulate in the DashMap faster than they can be consumed, leading to unbounded memory growth and eventual OOM kills. The rate limiter works in conjunction with the bounded event queue (10K capacity) to provide complete backpressure control. Resources are created before the bounded channel send() can block, so throttling at the production point is essential. Changes: - Add BLOCK_RATE_LIMIT_MS constant (10ms interval) - Replace tokio::select! on follower.next() with interval-based tick - Set MissedTickBehavior::Skip to prevent tick accumulation - Add detailed comments explaining the resource lifecycle and why both bounded channels and rate limiting are necessary This replaces the previous sleep-based throttle with a more idiomatic tokio::time::interval approach that explicitly controls block polling rate.
fix(cardano): add rate limiting to prevent resource exhaustion during indexing
Implement interval-based rate limiting (~100 blocks/sec) in the subscription loop to prevent memory exhaustion and system freezes during blockchain indexing. The network can produce hundreds of blocks per second during historical sync, but WASM processing is significantly slower (~30-50 blocks/sec). Without rate limiting, resources accumulate in the DashMap faster than they can be consumed, leading to unbounded memory growth and eventual OOM kills. The rate limiter works in conjunction with the bounded event queue (10K capacity) to provide complete backpressure control. Resources are created before the bounded channel send() can block, so throttling at the production point is essential. Changes: - Add BLOCK_RATE_LIMIT_MS constant (10ms interval) - Replace tokio::select! on follower.next() with interval-based tick - Set MissedTickBehavior::Skip to prevent tick accumulation - Add detailed comments explaining the resource lifecycle and why both bounded channels and rate limiting are necessary This replaces the previous sleep-based throttle with a more idiomatic tokio::time::interval approach that explicitly controls block polling rate.
fix: replace unbounded event queue with bounded channel to prevent resource exhaustion
Change from unbounded mpsc::channel() to sync_channel(10_000) to provide automatic backpressure when event processing falls behind. Prevents unbounded memory growth and system freezes during high-load blockchain indexing (~20-50MB overhead).
refactor: replace unbounded event queue with bounded channel for backpressure
Replace std::sync::mpsc::channel with sync_channel(1000) to provide automatic backpressure when event processing falls behind, preventing resource exhaustion and system freezes during high-load indexing without hardcoded throttling delays.
refactor: move throttling from individual block queries to subscription indexing loop
Merge fix/cardano-rte-thread: combine timeout/throttling with handle approach
Resolved merge conflicts by combining: - Our branch: timeouts + throttling + shared lock optimizations - Their branch: handle.block_on() pattern + .clone() calls Final implementation: - Uses handle.block_on() for cleaner code - Keeps timeout mechanism for robustness - Maintains throttling for indexing performance - Preserves shared lock optimizations from our branch - Uses .clone() where needed for network ownership
Add throttling to block operations to reduce indexing load
fix: eliminate DashMap resize deadlocks and reduce lock contention
Prevents deadlocks caused by DashMap resize operations locking all shards simultaneously under high concurrency (100+ subscription threads). - Increase DashMap capacity to 512K in ResourceStorage and ApplicationResourceStorage to prevent resize operations that require locking all 2048 shards - Convert 10 cardano host functions from exclusive to shared locks for read-only operations (subscribe_block, get_block, get_tips, transaction queries, etc.) Root cause: DashMap resize with 1K initial capacity triggered under production load, causing threads to deadlock in lock_exclusive_slow() during concurrent inserts. Impact: Eliminates resize deadlocks and dramatically reduces lock contention.
fix: eliminate DashMap resize deadlocks and reduce lock contention
Prevents deadlocks caused by DashMap resize operations locking all shards simultaneously under high concurrency (100+ subscription threads). - Increase DashMap capacity to 512K in ResourceStorage and ApplicationResourceStorage to prevent resize operations that require locking all 2048 shards - Convert 10 cardano host functions from exclusive to shared locks for read-only operations (subscribe_block, get_block, get_tips, transaction queries, etc.) Root cause: DashMap resize with 1K initial capacity triggered under production load, causing threads to deadlock in lock_exclusive_slow() during concurrent inserts. Impact: Eliminates resize deadlocks and dramatically reduces lock contention.
update rbac indexer config
Signed-off-by: bkioshn <[email protected]>
test: update dep to use ccf-follow-point-0
Signed-off-by: bkioshn <[email protected]>
chore(catalyst-ci): Update catalyst-ci to v3.6.2
fix start slot for rbac
Signed-off-by: bkioshn <[email protected]>