Merge pull request #1581 from Roasbeef/async-rescan-btcd

chainntnfs/btcdnotify: switch to async rescan call for historical spe…
This commit is contained in:
Olaoluwa Osuntokun 2018-07-21 18:35:12 -07:00 committed by GitHub
commit 925879f0fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -7,12 +7,12 @@ import (
"sync/atomic" "sync/atomic"
"time" "time"
"github.com/lightningnetwork/lnd/chainntnfs"
"github.com/btcsuite/btcd/btcjson" "github.com/btcsuite/btcd/btcjson"
"github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/chaincfg/chainhash"
"github.com/btcsuite/btcd/rpcclient" "github.com/btcsuite/btcd/rpcclient"
"github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcd/wire"
"github.com/btcsuite/btcutil" "github.com/btcsuite/btcutil"
"github.com/lightningnetwork/lnd/chainntnfs"
) )
const ( const (
@ -765,12 +765,21 @@ func (b *BtcdNotifier) RegisterSpendNtfn(outpoint *wire.OutPoint,
// and only arrives in the mempool after the getxout call. // and only arrives in the mempool after the getxout call.
if blockHash != nil { if blockHash != nil {
ops := []*wire.OutPoint{outpoint} ops := []*wire.OutPoint{outpoint}
err = b.chainConn.Rescan(blockHash, nil, ops)
if err != nil { // In order to ensure that we don't block the caller on
// what may be a long rescan, we'll launch a new
// goroutine to handle the async result of the rescan.
asyncResult := b.chainConn.RescanAsync(
blockHash, nil, ops,
)
go func() {
rescanErr := asyncResult.Receive()
if rescanErr != nil {
chainntnfs.Log.Errorf("Rescan for spend "+ chainntnfs.Log.Errorf("Rescan for spend "+
"notification txout failed: %v", err) "notification txout(%x) "+
return nil, err "failed: %v", outpoint, rescanErr)
} }
}()
} }
} }