wallet: batch initial block hash catch-up process every 10K blocks

This commit is contained in:
Alex 2017-07-12 18:04:37 -06:00 committed by Olaoluwa Osuntokun
parent c85893de1a
commit 3eb28d2d37

View file

@ -356,21 +356,45 @@ func (w *Wallet) syncWithChain() error {
if err != nil { if err != nil {
return err return err
} }
// Initialize the first database transaction.
tx, err := w.db.BeginReadWriteTx()
if err != nil {
return err
}
ns := tx.ReadWriteBucket(waddrmgrNamespaceKey)
for height := int32(1); height <= bestHeight; height++ { for height := int32(1); height <= bestHeight; height++ {
hash, err := chainClient.GetBlockHash(int64(height)) hash, err := chainClient.GetBlockHash(int64(height))
if err != nil { if err != nil {
tx.Rollback()
return err return err
} }
err = walletdb.Update(w.db, func(tx walletdb.ReadWriteTx) error { err = w.Manager.SetSyncedTo(ns, &waddrmgr.BlockStamp{
ns := tx.ReadWriteBucket(waddrmgrNamespaceKey) Hash: *hash,
return w.Manager.SetSyncedTo(ns, &waddrmgr.BlockStamp{ Height: height,
Hash: *hash,
Height: height,
})
}) })
if err != nil { if err != nil {
tx.Rollback()
return err return err
} }
// Every 10K blocks, commit and start a new database TX.
if height%10000 == 0 {
err = tx.Commit()
if err != nil {
tx.Rollback()
return err
}
tx, err = w.db.BeginReadWriteTx()
if err != nil {
return err
}
ns = tx.ReadWriteBucket(waddrmgrNamespaceKey)
}
}
// Commit (or roll back) the final database transaction.
err = tx.Commit()
if err != nil {
tx.Rollback()
return err
} }
} }