utxonursery: properly set height hint when recovering commit sweep
This commit alters the restart logic in the nursery to load channel close summaries from disk when restarting the process of sweeping commit txns. The channel close summary contains a closing height, which is used to set the lower bound of the height hint when resubscribing to spend notifications.
This commit is contained in:
parent
926949ef0f
commit
aaebc28206
@ -302,7 +302,7 @@ func (u *utxoNursery) Start() error {
|
||||
// NOTE: The next two steps *may* spawn go routines, thus from this
|
||||
// point forward, we must close the nursery's quit channel if we detect
|
||||
// any failures during startup to ensure they terminate.
|
||||
if err := u.reloadPreschool(lastGraduatedHeight); err != nil {
|
||||
if err := u.reloadPreschool(); err != nil {
|
||||
newBlockChan.Cancel()
|
||||
close(u.quit)
|
||||
return err
|
||||
@ -608,14 +608,39 @@ func (u *utxoNursery) NurseryReport(
|
||||
|
||||
// reloadPreschool re-initializes the chain notifier with all of the outputs
|
||||
// that had been saved to the "preschool" database bucket prior to shutdown.
|
||||
func (u *utxoNursery) reloadPreschool(heightHint uint32) error {
|
||||
func (u *utxoNursery) reloadPreschool() error {
|
||||
psclOutputs, err := u.cfg.Store.FetchPreschools()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// For each of the preschool outputs stored in the nursery store, load
|
||||
// it's close summary from disk so that we can get an accurate height
|
||||
// hint from which to start our range for spend notifications.
|
||||
for i := range psclOutputs {
|
||||
err := u.registerPreschoolConf(&psclOutputs[i], heightHint)
|
||||
kid := &psclOutputs[i]
|
||||
chanPoint := kid.OriginChanPoint()
|
||||
|
||||
// Load the close summary for this output's channel point.
|
||||
closeSummary, err := u.cfg.DB.FetchClosedChannel(chanPoint)
|
||||
if err == channeldb.ErrClosedChannelNotFound {
|
||||
// This should never happen since the close summary
|
||||
// should only be removed after the channel has been
|
||||
// swept completely.
|
||||
utxnLog.Warnf("Close summary not found for "+
|
||||
"chan_point=%v, can't determine height hint"+
|
||||
"to sweep commit txn", chanPoint)
|
||||
continue
|
||||
|
||||
} else if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Use the close height from the channel summary as our height
|
||||
// hint to drive our spend notifications, with our confirmation
|
||||
// depth as a buffer for reorgs.
|
||||
heightHint := closeSummary.CloseHeight - u.cfg.ConfDepth
|
||||
err = u.registerPreschoolConf(kid, heightHint)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user