Skip to content

Commit b35e2ba

Browse files
authored
fix: improve chain rollback handling for cached headers (#788)
Fixes #787 Signed-off-by: Aurora Gaffney <[email protected]>
1 parent 8a75370 commit b35e2ba

File tree

2 files changed

+13
-15
lines changed

2 files changed

+13
-15
lines changed

chain/chain.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -220,15 +220,22 @@ func (c *Chain) Rollback(point ocommon.Point) error {
220220
}
221221
// Check headers for rollback point
222222
if len(c.headers) > 0 {
223-
for idx, header := range c.headers {
223+
// Iterate backwards to make deletion safe
224+
var header ledger.BlockHeader
225+
for i := len(c.headers) - 1; i >= 0; i-- {
226+
header = c.headers[i]
227+
// Remove headers after rollback slot
228+
if header.SlotNumber() > point.Slot {
229+
c.headers = slices.Delete(c.headers, i, i+1)
230+
continue
231+
}
224232
if header.SlotNumber() == point.Slot &&
225233
string(header.Hash().Bytes()) == string(point.Hash) {
226-
// Remove headers after rollback point
227-
if idx < len(c.headers)-1 {
228-
c.headers = slices.Delete(c.headers, idx+1, len(c.headers))
229-
}
230234
return nil
231235
}
236+
if header.SlotNumber() < point.Slot {
237+
return ErrBlockNotFound
238+
}
232239
}
233240
}
234241
// Lookup block for rollback point

ledger/chainsync.go

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -137,16 +137,7 @@ func (ls *LedgerState) handleEventChainsyncBlockHeader(e ChainsyncEvent) error {
137137
}
138138
// Add header to chain
139139
if err := ls.chain.AddBlockHeader(e.BlockHeader); err != nil {
140-
if !errors.As(err, &chain.BlockNotFitChainTipError{}) {
141-
return fmt.Errorf("failed adding chain block header: %w", err)
142-
}
143-
ls.config.Logger.Warn(
144-
fmt.Sprintf(
145-
"ignoring chainsync block header: %s",
146-
err,
147-
),
148-
)
149-
return nil
140+
return fmt.Errorf("failed adding chain block header: %w", err)
150141
}
151142
// Wait for additional block headers before fetching block bodies if we're
152143
// far enough out from upstream tip

0 commit comments

Comments
 (0)