3636import tech .pegasys .teku .spec .datastructures .blobs .DataColumnSidecar ;
3737import tech .pegasys .teku .spec .datastructures .blocks .BeaconBlock ;
3838import tech .pegasys .teku .spec .datastructures .blocks .SignedBeaconBlock ;
39+ import tech .pegasys .teku .spec .datastructures .blocks .SlotAndBlockRoot ;
3940import tech .pegasys .teku .spec .datastructures .util .DataColumnSlotAndIdentifier ;
4041import tech .pegasys .teku .spec .logic .versions .fulu .helpers .MiscHelpersFulu ;
4142import tech .pegasys .teku .statetransition .blobs .RemoteOrigin ;
@@ -56,7 +57,7 @@ public class DasSamplerBasic implements DataAvailabilitySampler, SlotEventsChann
5657 private final CustodyGroupCountManager custodyGroupCountManager ;
5758 private final Map <Bytes32 , DataColumnSamplingTracker > recentlySampledColumnsByRoot =
5859 new ConcurrentHashMap <>(MAX_RECENTLY_SAMPLED_BLOCKS );
59- private final NavigableSet <Bytes32 > orderedSidecarsTrackers = new TreeSet <>();
60+ private final NavigableSet <SlotAndBlockRoot > orderedSidecarsTrackers = new TreeSet <>();
6061
6162 private final AsyncRunner asyncRunner ;
6263 private final RecentChainData recentChainData ;
@@ -182,7 +183,7 @@ private DataColumnSamplingTracker getOrCreateTracker(final UInt64 slot, final By
182183 k -> {
183184 final DataColumnSamplingTracker newTracker =
184185 DataColumnSamplingTracker .create (slot , blockRoot , custodyGroupCountManager );
185- orderedSidecarsTrackers .add (blockRoot );
186+ orderedSidecarsTrackers .add (new SlotAndBlockRoot ( slot , blockRoot ) );
186187 onFirstSeen (slot , blockRoot , newTracker );
187188 return newTracker ;
188189 });
@@ -192,19 +193,19 @@ private DataColumnSamplingTracker getOrCreateTracker(final UInt64 slot, final By
192193
193194 private void makeRoomForNewTracker () {
194195 while (recentlySampledColumnsByRoot .size () > MAX_RECENTLY_SAMPLED_BLOCKS - 1 ) {
195- final Bytes32 toRemove = orderedSidecarsTrackers .pollFirst ();
196+ final SlotAndBlockRoot toRemove = orderedSidecarsTrackers .pollFirst ();
196197 if (toRemove == null ) {
197198 break ;
198199 }
199200 removeAllForBlock (toRemove );
200201 }
201202 }
202203
203- private synchronized void removeAllForBlock (final Bytes32 blockRoot ) {
204- final DataColumnSamplingTracker tracker = recentlySampledColumnsByRoot .remove (blockRoot );
204+ private synchronized void removeAllForBlock (final SlotAndBlockRoot slotAndBlockRoot ) {
205+ final DataColumnSamplingTracker tracker = recentlySampledColumnsByRoot .remove (slotAndBlockRoot . getBlockRoot () );
205206
206207 if (tracker != null ) {
207- orderedSidecarsTrackers .remove (blockRoot );
208+ orderedSidecarsTrackers .remove (slotAndBlockRoot );
208209 // TODO maybe we need something like
209210 // tech.pegasys.teku.statetransition.util.BlockBlobSidecarsTrackersPoolImpl.dropMissingContent
210211 }
@@ -280,7 +281,7 @@ public void onSlot(final UInt64 slot) {
280281 }
281282
282283 public Optional <SignedBeaconBlock > getBlock (final Bytes32 blockRoot ) {
283- LOG . debug ( "Obtaining block for root {} from DasSamplerBasic" , blockRoot );
284- return recentlySampledColumnsByRoot . get ( blockRoot ). getBlock ( );
284+ return Optional . ofNullable ( recentlySampledColumnsByRoot . get ( blockRoot ))
285+ . flatMap ( DataColumnSamplingTracker :: getBlock );
285286 }
286287}
0 commit comments