Avoid dropping sidecars tracker on block import in Gloas#10788
Conversation
StefanBratanov
left a comment
There was a problem hiding this comment.
LGTM but added few comments which I think would make it better
| return factory.createAvailabilityChecker(block); | ||
| } | ||
|
|
||
| @Override |
There was a problem hiding this comment.
I feel like we can get rid of createAvailabilityCheckerOnBlock and createAvailabilityCheckerOnExecutionPayloadEnvelope and have only createAvailabilityChecker and this boolean method and have a simple if in on_block, I think better naming is isDataAvailabilityDeferredUntilExecutionPayloadProcessing.
| } | ||
| } | ||
|
|
||
| @Override |
There was a problem hiding this comment.
I think we should have instead of the two new methods added to BlockEventsListener:
public interface DataAvailabilitySampler extends BlockEventsListener, ReceivedBlockEventsChannel, ReceivedExecutionPayloadEventsChannelTo avoid repetition and delegation.
There was a problem hiding this comment.
Not sure about this as well
So we keep onNewBlock, removeAllForBlock and enableBlockImportOnCompletion in BlockEventsListener and still use it in DasSamplerBasic and BlockBlobSidecarsTrackersPoolImpl
But we also subscribe DasSamplerBasic and BlockBlobSidecarsTrackersPoolImpl to events in ReceivedBlockEventsChannel so it's spread between 2 sources
There was a problem hiding this comment.
ive moved only payload event
looks good
| block.getSlot(), | ||
| block.getRoot(), | ||
| result.toLogString()); | ||
| if (!forkChoiceUtil.isDataAvailabilityCheckDeferredToExecutionPayloadEnvelope()) { |
There was a problem hiding this comment.
I think it's fine to print it, it would just say not required
There was a problem hiding this comment.
that's why i've removed it
it is confusing
you have 2 da checks on one block and one says not required, and you start requesting sidecars after that
what's happening?
not required = no blobs
There was a problem hiding this comment.
yeah actually it's ok it's just an if
There was a problem hiding this comment.
moved it to availability checker
…n we should drop in Gloas
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
Reviewed by Cursor Bugbot for commit b155024. Configure here.


PR Description
Keep DAS sampling trackers alive after block import when DA is deferred to the execution payload envelope.
Adds block/payload import lifecycle hooks so Gloas cleanup happens after payload import, not after block import, without milestone checks in BlockManager.
This prevents cancelling the in-flight DA check before recovered data columns can satisfy it.
Fixed Issue(s)
Documentation
doc-change-requiredlabel to this PR if updates are required.Changelog
Note
Medium Risk
Changes when fork-choice DA completes and when sampling state is cleared on Gloas; incorrect timing could fail or prematurely pass DA checks. Payload gossip dedup behavior on failed imports also changes.
Overview
Defers DAS tracker teardown for Gloas so data-column sampling is not cancelled when the beacon block imports before the execution payload envelope finishes DA.
ForkChoiceUtilexposesisDataAvailabilityCheckDeferredToExecutionPayloadEnvelope()(true on Gloas); Gloas runs the data-column availability checker on payload envelope import and passesSignedExecutionPayloadEnvelopeinto the checker factory.BlockManagerroutes block import throughBlockEventsListener.onBlockImportedand notifiesExecutionPayloadEventsListenerafter payload import;DasSamplerBasicskipsremoveAllForBlockon block import when deferral applies, prunes trackers on payload import, and avoids slot-based cleanup for imported blocks until then.DefaultExecutionPayloadManagerdropsrecentSeenExecutionPayloadswhen fork-choice payload import fails or errors so gossip can retry.AvailabilityCheckeraddsgetAndLogAvailabilityCheckResultused fromForkChoiceinstead of inline DA logging.Reviewed by Cursor Bugbot for commit 386aa94. Bugbot is set up for automated code reviews on this repo. Configure here.