Handle bitcoind rpc error in resyncIndex

This commit is contained in:
Martin Boehm 2018-03-01 01:15:25 +01:00
parent b556d0354e
commit 39675d4eed

View File

@ -493,13 +493,18 @@ func connectBlocksParallel(
running := make([]bool, numWorkers) running := make([]bool, numWorkers)
work := func(i int) { work := func(i int) {
defer wg.Done() defer wg.Done()
var err error
var block *bchain.Block
for hh := range hch { for hh := range hch {
running[i] = true running[i] = true
block, err := chain.GetBlockWithoutHeader(hh.hash, hh.height) for {
if err != nil { block, err = chain.GetBlockWithoutHeader(hh.hash, hh.height)
glog.Error("Connect block ", hh.height, " ", hh.hash, " error ", err) if err != nil {
running[i] = false glog.Error("Connect block ", hh.height, " ", hh.hash, " error ", err, ". Retrying...")
continue time.Sleep(time.Millisecond * 500)
} else {
break
}
} }
if *dryRun { if *dryRun {
running[i] = false running[i] = false
@ -523,18 +528,20 @@ ConnectLoop:
select { select {
case <-chanOsSignal: case <-chanOsSignal:
// wait for the workers to finish block // wait for the workers to finish block
i := 0
WaitAgain: WaitAgain:
for { for ; i < 60; i++ {
for _, r := range running { for _, r := range running {
if r { if r {
glog.Info("Waiting for workers to finish ", running) glog.Info("Waiting ", i, "s for workers to finish ", running)
time.Sleep(time.Millisecond * 500) time.Sleep(time.Millisecond * 1000)
continue WaitAgain continue WaitAgain
} }
} }
err = errors.New(fmt.Sprint("connectBlocksParallel interrupted at height ", h)) break
break ConnectLoop
} }
err = errors.New(fmt.Sprint("connectBlocksParallel interrupted at height ", h))
break ConnectLoop
default: default:
hash, err = chain.GetBlockHash(h) hash, err = chain.GetBlockHash(h)
if err != nil { if err != nil {