Skip to content

Commit

Permalink
DasLongPollCustody: make gossip wait timeout depending on the slot du…
Browse files Browse the repository at this point in the history
…ration to accommodate shorter slot configs (like 2 sec per slot)
  • Loading branch information
Nashatyrev committed Dec 30, 2024
1 parent c94a807 commit 311e9a3
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,26 @@

public class DasLongPollCustody implements UpdatableDataColumnSidecarCustody, SlotEventsChannel {

public interface GossipWaitTimeoutCalculator {
/**
* Returns the duration to wait for a column to be gossiped
*/
Duration getGossipWaitTimeout(UInt64 slot);
}

private final UpdatableDataColumnSidecarCustody delegate;
private final AsyncRunner asyncRunner;
private final Duration waitPeriodForCurrentSlot;
private final GossipWaitTimeoutCalculator gossipWaitTimeoutCalculator;

@VisibleForTesting final PendingRequests pendingRequests = new PendingRequests();

public DasLongPollCustody(
final UpdatableDataColumnSidecarCustody delegate,
final AsyncRunner asyncRunner,
final Duration waitPeriodForCurrentSlot) {
GossipWaitTimeoutCalculator gossipWaitTimeoutCalculator) {
this.delegate = delegate;
this.asyncRunner = asyncRunner;
this.waitPeriodForCurrentSlot = waitPeriodForCurrentSlot;
this.gossipWaitTimeoutCalculator = gossipWaitTimeoutCalculator;
}

@Override
Expand Down Expand Up @@ -101,6 +108,7 @@ private SafeFuture<Optional<DataColumnSidecar>> addPendingRequest(

@Override
public void onSlot(final UInt64 slot) {
Duration waitPeriodForCurrentSlot = gossipWaitTimeoutCalculator.getGossipWaitTimeout(slot);
asyncRunner
.runAfterDelay(
() -> pendingRequests.setNoWaitSlot(slot.increment()), waitPeriodForCurrentSlot)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public class DasLongPollCustodyTest {
private final DataStructureUtil dataStructureUtil = new DataStructureUtil(0, spec);
private final Duration currentSlotTimeout = ofSeconds(3);
private final DasLongPollCustody custody =
new DasLongPollCustody(custodyImpl, stubAsyncRunner, currentSlotTimeout);
new DasLongPollCustody(custodyImpl, stubAsyncRunner, __ -> currentSlotTimeout);

private final BeaconBlock block10 = blockResolver.addBlock(10, true);
private final DataColumnSidecar sidecar10_0 = createSidecar(block10, 0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -745,9 +745,16 @@ protected void initDasCustody() {
eventChannels.subscribe(SlotEventsChannel.class, dataColumnSidecarCustodyImpl);
eventChannels.subscribe(FinalizedCheckpointChannel.class, dataColumnSidecarCustodyImpl);

DasLongPollCustody.GossipWaitTimeoutCalculator gossipWaitTimeoutCalculator =
slot -> {
Duration slotDuration =
Duration.ofSeconds(spec.atSlot(slot).getConfig().getSecondsPerSlot());
return slotDuration.dividedBy(3);
};

DasLongPollCustody dasLongPollCustody =
new DasLongPollCustody(
dataColumnSidecarCustodyImpl, operationPoolAsyncRunner, Duration.ofSeconds(5));
dataColumnSidecarCustodyImpl, operationPoolAsyncRunner, gossipWaitTimeoutCalculator);
eventChannels.subscribe(SlotEventsChannel.class, dasLongPollCustody);

DataColumnSidecarByRootCustodyImpl dataColumnSidecarByRootCustody =
Expand Down

0 comments on commit 311e9a3

Please sign in to comment.