neutrinonotify: persist rescan progress.

Adding persistency to neutrino re-scan progress. In case the re-scan
failed in the middle or the node was restarted before the re-scan
has been completed this fix will start from the last point instead
of the beginning.
On long re-scan , such as old channels on mobile devices this is
crucial.
This commit is contained in:
Roei Erez 2021-03-24 15:56:56 +02:00
parent 901c192e9f
commit 935e7144fb

@ -778,6 +778,18 @@ func (n *NeutrinoNotifier) RegisterSpendNtfn(outpoint *wire.OutPoint,
neutrino.EndBlock(&headerfs.BlockStamp{
Height: int32(ntfn.HistoricalDispatch.EndHeight),
}),
neutrino.ProgressHandler(func(processedHeight uint32) {
// We persist the rescan progress to achieve incremental
// behavior across restarts, otherwise long rescans may
// start from the beginning with every restart.
err := n.spendHintCache.CommitSpendHint(
processedHeight,
ntfn.HistoricalDispatch.SpendRequest)
if err != nil {
chainntnfs.Log.Errorf("Failed to update rescan "+
"progress: %v", err)
}
}),
neutrino.QuitChan(n.quit),
)
if err != nil && !strings.Contains(err.Error(), "not found") {