Skip to content

BN: New syncing algorithm#7921

Open
cheatfate wants to merge 39 commits intounstablefrom
syncv3
Open

BN: New syncing algorithm#7921
cheatfate wants to merge 39 commits intounstablefrom
syncv3

Conversation

@cheatfate
Copy link
Copy Markdown
Contributor

This is continuation of #7578

@github-actions
Copy link
Copy Markdown

github-actions bot commented Feb 6, 2026

Unit Test Results

0 files   -        12  0 suites   - 2 768   0s ⏱️ - 1h 1m 4s
0 tests  - 13 592  0 ✔️  - 13 045  0 💤  - 547  0 ±0 
0 runs   - 71 776  0 ✔️  - 71 066  0 💤  - 710  0 ±0 

Results for commit ec515ea. ± Comparison against base commit 85412f5.

♻️ This comment has been updated with latest results.

cheatfate added 25 commits April 9, 2026 15:11
More changes.

Add sync access to engine events.
Remove any changes to callbacks.

Add groupSidecars(DataColumnsByRootIdentifier).

Addressing some TODOs in overseer.

Add missing shortLog()

Replace one more TODO.

Addressing column intersection TODO.

Add event handlers.

Update events implementation.

Add some debugging logs.

Fix crash.

Fix some issues and add some more debug logging.

Move all the blocks received on `range` step to the BlockBuffer.

Upgrade BlockBuffer.

Fix assertion crash.

Fix how sidecars checking procedures.

Do fixes of byroot sync.

Fix compilation issues.

Add loop pause when there is no work to do.

Fix incremental math.

Make blobs and columns lists in logs smaller.
Remove some debugging log statements.

Actively reload how columns/blobs are logged.

Investigation of peer's endless loop issue.

Add performance meters.

Fix performance counter issues.

Add finalization event pruning.
Enable range syncing.

Post rebase fixes.

Add more conditions to peerPause.
Fix assertion crash.
Add overseer debug statistics.

Fix missing dag access.

Add earliest_available_slot handling.
Enable all the modes.
Add heuristic infinite-loop detection handler.

Add some debugging logs.

Fix compilation issue.

Add more debugging statements.

Move debugging statements.

Add some more information to debug logging.

Change SyncQueue[T].push method to return number of slots advanced.

Add debug information about current checkpoints stored in dag.

Restore inclusion proof verifications.

Add async control to block buffer.

Do not enter block range downloading in case when block buffer is almost full.

Add more debugging on RangeBuffer.

Use RangeBuffer shortLog.

Fix block buffer advance when empty responses being processed.

Fix sync_queue cyrillic C characters.

Remove block_buffer asynchronous handlers.

Removal of Checkpoints from SyncDag, maintain single Queues structure.

Removal of checkpoints part 2.

Fix pruning for blockBuffer and blobQuarantine.

Add more debugging statements.

Add logs for investigation lighthouse issue with range response.

Fix getSidecarSlot().
Add inpSlot to shortLog(SyncQueue).

More changes in getSidecarSlot().

Address runtime crash.

Make SyncQueue return negative integer when rewind is happen.
Adjust SyncQueue tests.
Add earliest_available_slot logging.

Address all the warnings.

Validate early empty sidecar responses.

Add more debugging output.

More debugging output.

Add SyncQueue synchronization after rewinds.
Refactor doRangeSidecarStep.

Make block_buffer accept blocks before initSlot.

VerifierError.MissingSidecars should not affect failures count.

Disable byRoot syncing while rangeSync is active.

Post-rebase fixes.

Fix peer management in Overseer.

Update pause detector.

Fix block_buffer.peekRange() returns incorrect number of blocks.
Add test.

Fix compilation.

More fixes to block_buffer.peekRange().

Add parent_root into slimLog(blocks).

Add SyncQueue synchronization for blocks loop.

Fix sidecars step should not be active when sidecars are not needed.
Fix rewinds for blocks step.

Sidecars check should be done before request has been made.

Remove initSlot from BlockRangeBuffer.
Fix updateQueues(), eliminate dups.
Fix getBlockBlobsMap().

Fix blocks queue should not rewind sidecars queue, if its not running yet.

Add SyncPushResponse result for SyncQueue.push().
Adopt tests for it.
Fix maybeFinalized = true for sidecars step.
Replace SyncBlock -> BlockId in SyncQueue.

Add one more step in debugging MissingParent error returned by BlockProcessor.

Add more debugging statements to SyncQueue.

Make requests non-relevant more strict.

Add more debug statements to verifiers.

Fix compilation issue.

Add blob index checking to response utils.
Add some debug statements into overseer.
Make MissingSidecars error strict.

Disable blob/column quarantine pruning in sidecars step.

Add blob_quarantine logging.
Disable blob_quarantine pruning.

Disable rewind syncing for blocks step.

Add blob/column quarantine pruning for failing/empty requests.
Fix sidecar queue syncing with blocks queue process.

Store blobs/columns in quarantine right before pushing request to avoid one more leak step.

Dissect ColumnMap from blob_quarantine to its own module.

Move BlockBuffer tests to test suite.
Add invalidate() function to BlockBuffer and tests.

Add BlockBuffer invalidation.

Update backfill queues in updateQueues().

Post-rebase fixes.

MissingSidecars should not affect rewinds.

Add more debugging values to overseer.

Remove sync_dag debugging logs.

Start root sync earlier.

Fix issue with block validation response check.

Update performance counters.

Fix crash.

Remove code duplicates from performance counters.

Some fixes for roots syncing.

Add peerLog logging.

Fix sidecars syncer conditions.
Remove some debugging log statements.

Remove peer_log.

Remove some debugging log statements.

Missing sidecars helper functions.

Simplify getMissingSidecarIndices(columns).

Add missing sidecar indices to logs, so it possible to track columns progress.

Fix test_quarantine.

Add some columns debugging statements.

Attempt to fix weird chronicles assertion.

Fix column distribution and rate logging.

Fix `You should not pop so many requests` assertion crash and start using PeerEntry's column map.

Add quarantine shortLog to check what is happening.

Add shortLog(columns).

Do not request columns if we already have it.

Fix new columns calculations.

One more fix.

Optimize getMissingSidecarIndices() and introduce getMissingColumnsMap() to blob_quarantine.
Add incl()/excl() functions to ColumnMap.
Fix peer columns detection logic in doRangeSidecarStep().

Some updates to blob_quarantine.
Refactoring doPeerUpdateRootsSidecars().

Add SyncDag path to main debug log statement.

Investigating blobs in columns age, more logs and fixes.

Still unclear where columns are lost.

Remove blob quarantine processing after finalization.

Fix: Do not remove blobs/columns on MissingSidecars/MissingParent errors.

Fix compilation issue.

Log full root map to understand why there missing blocks.
Log when anonymous gossip messages incoming.
Log blocks and sidecars by root differently.

Fix use sidecarless quarantine as source of blocks too.
Fix missingSidecars flag calculation in Gossip event handler.

Fix BlockBuffer not properly handles MissingParent detection.

Fix not-in-range detection for sidecars queue.

Fix compilation problem.

Enable earliest_avalailable_slot check.

Add peer_map to by root sidecars requests.

Earliest available slot is only for columns, not blocks.

Post-rebase fixes.

Add MissingSidecars cleanups.
Add SyncDag pruning on finalized epoch change.

Fix pruning errors.

Proper backfill check.

One more fix to backfill detection algorithm.

Update backfill queue limits calculation.

Fix compilation error.

One more calculation update.

Refactor sidecars queue limits calculation methods.

Add edge cases handling.

Make one edge-case non-fatal to avoid syncing being stuck.

Post-rebase fixes.

Fix block monitoring event loop.
Add maintenance loop to keep block buffers properly cleaned up.

Increase period when rootsync starts.

Fix SECONDS_PER_SLOT issue.

Tuning getStatusPeriod() function to be more precise in edge-cases.

Remove unnecessary helpers.

Do some BlockBuffer adding refactoring and fixing tests.

Update AllTests.

SLOT_DURATION.

Fix REST handlers.

Fix peer's status stale information should not appear too early.

Initialize SyncDag with genesis root/slot to avoid downloading.

Genesis is special case not an ordinary root.

One more place for genesis handling.

Another one more genesis fix.

Fix crash when backfill is not needed.

Post-rebase fixes.

Eliminate warnings.

Post-rebase fixes.

Fix getMissingColumnsMap() and getMissingSidecarIndices().

Fix defect crash.

Add BlockRootsBuffer pruning mechanism.
Fix peer_map logging.

Add preemptive cleanups of blocks and sidecars while syncing.

Fix Future.join() leaks.

Use wall epoch instead of dag epoch for blobs/columns horizon calculations.

Temporarily disable SyncOverseer from start, to check if RSS leak is still present.

Temporarily disable BlockGossip event emit.

Minimize some logging.

Add temporary libbacktrace fix.

Revert "Temporarily disable SyncOverseer from start, to check if RSS leak is still present."

This reverts commit 0b58244.

Add some log modifications.

Fix SyncQueue finish mechanisms with proper tests.

Fix some compilation issues.

Fix ColumnMap tests.

Update AllTests.

Revert "Add temporary libbacktrace fix."

This reverts commit 51f73b1.

Make `New` requests logs appear only for non-empty requests.
Introduce late monitoring loop.

Post-rebase fixes.

Add late_block_monitoring loop.

Fix lint.

Blob quarantine should refresh blocks not only when columns get inserted but also when columns get requested.

Add implementation for late loop to discover blocks in orphans and in sidecarless.

Post-rebase fixes.

Adjust number of epochs before root syncing start.
Fix edge case when SQ uses single supernode to get sidecars.
Adopt test.
Cleanup quarantine for NonRelevant responses too.
Fix warnings.
Optimize big log statements a bit.
Fix getForwardSidecarStartSlot().
Improve updateQueues logging.
Fix columns slimLog.
Add block buffer reset in updateQueues.
Add early empty response test for roots response.
Fix backfill status messages.
Remove distribution log values.
Add /nimbus/v1/debug/sync/queues REST call for debugging purposes.
Adjust maxBlocksPerRequest to 4 and maxSidecarsPerRequest to 128.
Fix sync_dag.prune() to cleanup references.
Fix Invalid block processor should mark block for re-downloading.
Change short map for columns.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant