// ReingestOutdated finds old ledgers and reimports them. func (i *System) ReingestOutdated() (n int, err error) { q := history.Q{Repo: i.HorizonDB} // NOTE: this loop will never terminate if some bug were cause a ledger // reingestion to silently fail. for { outdated := []int32{} err = q.OldestOutdatedLedgers(&outdated, CurrentVersion) if err != nil { return } if len(outdated) == 0 { return } log. WithField("lowest_sequence", outdated[0]). WithField("batch_size", len(outdated)). Info("reingest: outdated") var start, end int32 flush := func() error { ingested, ferr := i.ReingestRange(start, end) if ferr != nil { return ferr } n += ingested return nil } for idx := range outdated { seq := outdated[idx] if start == 0 { start = seq end = seq continue } if seq == end+1 { end = seq continue } err = flush() if err != nil { return } start = seq end = seq } err = flush() if err != nil { return } } }