From e499c709f4a9a2fb16d3042093ee55428ce55488 Mon Sep 17 00:00:00 2001 From: Etan Kissling Date: Wed, 8 Mar 2023 19:59:00 +0100 Subject: [PATCH] avoid pruning LC data pre dag.tail.slot (#4702) When using `--history=prune`, `dag.tail.slot` may advance beyond the configured light client data retention period. Update the LC logic so that the `dag.tail.slot` is no longer considered for LC pruning. It is still considered to check whether new data can be produced. --- .../blockchain_dag_light_client.nim | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/beacon_chain/consensus_object_pools/blockchain_dag_light_client.nim b/beacon_chain/consensus_object_pools/blockchain_dag_light_client.nim index b970bc48a..3f61a9b82 100644 --- a/beacon_chain/consensus_object_pools/blockchain_dag_light_client.nim +++ b/beacon_chain/consensus_object_pools/blockchain_dag_light_client.nim @@ -150,7 +150,7 @@ func targetLightClientTailSlot(dag: ChainDAGRef): Slot = let maxPeriods = dag.lcDataStore.maxPeriods headPeriod = dag.head.slot.sync_committee_period - lowSlot = max(dag.tail.slot, dag.cfg.ALTAIR_FORK_EPOCH.start_slot) + lowSlot = dag.cfg.ALTAIR_FORK_EPOCH.start_slot tail = max(headPeriod + 1, maxPeriods.SyncCommitteePeriod) - maxPeriods max(tail.start_slot, lowSlot) @@ -182,7 +182,8 @@ proc initLightClientBootstrapForPeriod( let periodStartSlot = period.start_slot periodEndSlot = periodStartSlot + SLOTS_PER_SYNC_COMMITTEE_PERIOD - 1 - lowSlot = max(periodStartSlot, dag.targetLightClientTailSlot) + tailSlot = max(dag.targetLightClientTailSlot, dag.tail.slot) + lowSlot = max(periodStartSlot, tailSlot) highSlot = min(periodEndSlot, dag.finalizedHead.blck.slot) lowBoundarySlot = lowSlot.nextEpochBoundarySlot highBoundarySlot = highSlot.nextEpochBoundarySlot @@ -286,7 +287,8 @@ proc initLightClientUpdateForPeriod( let periodStartSlot = period.start_slot periodEndSlot = periodStartSlot + SLOTS_PER_SYNC_COMMITTEE_PERIOD - 1 - lowSlot = max(periodStartSlot, dag.targetLightClientTailSlot) + tailSlot = max(dag.targetLightClientTailSlot, dag.tail.slot) + lowSlot = max(periodStartSlot, tailSlot) highSlot = min(periodEndSlot, dag.finalizedHead.blck.slot) fullPeriodCovered = (dag.finalizedHead.slot > periodEndSlot) highBsi = dag.getExistingBlockIdAtSlot(highSlot).valueOr: @@ -677,7 +679,7 @@ proc initLightClientDataCache*(dag: ChainDAGRef) = dag.lcDataStore.db.delNonFinalizedPeriodsFrom(dag.firstNonFinalizedPeriod) # Initialize tail slot - let targetTailSlot = dag.targetLightClientTailSlot + let targetTailSlot = max(dag.targetLightClientTailSlot, dag.tail.slot) dag.lcDataStore.cache.tailSlot = max(dag.head.slot, targetTailSlot) # Import head state