Merge pull request #547 from hermeznetwork/fix/coordtimers Fix timers resetting in coordinator loops
arnau 17317030+arnaucube@users.noreply.github.com
Tue, 16 Feb 2021 16:53:21 +0100
4 files changed,
24 insertions(+),
21 deletions(-)
M
coordinator/coordinator.go
→
coordinator/coordinator.go
@@ -494,7 +494,7 @@ }()
c.wg.Add(1) go func() { - waitDuration := longWaitDuration + waitCh := time.After(longWaitDuration) for { select { case <-c.ctx.Done():@@ -506,23 +506,24 @@ if err := c.handleMsg(c.ctx, msg); c.ctx.Err() != nil {
continue } else if err != nil { log.Errorw("Coordinator.handleMsg", "err", err) - waitDuration = c.cfg.SyncRetryInterval + waitCh = time.After(c.cfg.SyncRetryInterval) continue } - waitDuration = longWaitDuration - case <-time.After(waitDuration): + waitCh = time.After(longWaitDuration) + case <-waitCh: if !c.stats.Synced() { - waitDuration = longWaitDuration + waitCh = time.After(longWaitDuration) continue } if err := c.syncStats(c.ctx, &c.stats); c.ctx.Err() != nil { + waitCh = time.After(longWaitDuration) continue } else if err != nil { log.Errorw("Coordinator.syncStats", "err", err) - waitDuration = c.cfg.SyncRetryInterval + waitCh = time.After(c.cfg.SyncRetryInterval) continue } - waitDuration = longWaitDuration + waitCh = time.After(longWaitDuration) } } }()
M
coordinator/pipeline.go
→
coordinator/pipeline.go
@@ -253,7 +253,7 @@ batchChSentServerProof := make(chan *BatchInfo, queueSize)
p.wg.Add(1) go func() { - waitDuration := zeroDuration + waitCh := time.After(zeroDuration) for { select { case <-p.ctx.Done():@@ -263,31 +263,32 @@ return
case statsVars := <-p.statsVarsCh: p.stats = statsVars.Stats p.syncSCVars(statsVars.Vars) - case <-time.After(waitDuration): + case <-waitCh: // Once errAtBatchNum != 0, we stop forging // batches because there's been an error and we // wait for the pipeline to be stopped. if p.getErrAtBatchNum() != 0 { - waitDuration = p.cfg.ForgeRetryInterval + waitCh = time.After(p.cfg.ForgeRetryInterval) continue } batchNum = p.state.batchNum + 1 batchInfo, err := p.handleForgeBatch(p.ctx, batchNum) if p.ctx.Err() != nil { + waitCh = time.After(p.cfg.ForgeRetryInterval) continue } else if tracerr.Unwrap(err) == errLastL1BatchNotSynced || tracerr.Unwrap(err) == errForgeNoTxsBeforeDelay || tracerr.Unwrap(err) == errForgeBeforeDelay { - waitDuration = p.cfg.ForgeRetryInterval + waitCh = time.After(p.cfg.ForgeRetryInterval) continue } else if err != nil { p.setErrAtBatchNum(batchNum) - waitDuration = p.cfg.ForgeRetryInterval p.coord.SendMsg(p.ctx, MsgStopPipeline{ Reason: fmt.Sprintf( "Pipeline.handleForgBatch: %v", err), FailedBatchNum: batchNum, }) + waitCh = time.After(p.cfg.ForgeRetryInterval) continue } p.lastForgeTime = time.Now()@@ -297,6 +298,7 @@ select {
case batchChSentServerProof <- batchInfo: case <-p.ctx.Done(): } + waitCh = time.After(zeroDuration) } } }()
M
coordinator/txmanager.go
→
coordinator/txmanager.go
@@ -416,7 +416,7 @@ // }
// Run the TxManager func (t *TxManager) Run(ctx context.Context) { - waitDuration := longWaitDuration + waitCh := time.After(longWaitDuration) var statsVars statsVars select {@@ -471,11 +471,11 @@ Reason: fmt.Sprintf("forgeBatch send: %v", err)})
continue } t.queue.Push(batchInfo) - waitDuration = t.cfg.TxManagerCheckInterval - case <-time.After(waitDuration): + waitCh = time.After(t.cfg.TxManagerCheckInterval) + case <-waitCh: queuePosition, batchInfo := t.queue.Next() if batchInfo == nil { - waitDuration = longWaitDuration + waitCh = time.After(longWaitDuration) continue } if err := t.checkEthTransactionReceipt(ctx, batchInfo); ctx.Err() != nil {
M
test/proofserver/proofserver.go
→
test/proofserver/proofserver.go
@@ -145,7 +145,7 @@
// const provingDuration = 2 * time.Second func (s *Mock) runProver(ctx context.Context) { - waitDuration := longWaitDuration + waitCh := time.After(longWaitDuration) for { select { case <-ctx.Done():@@ -153,21 +153,21 @@ return
case msg := <-s.msgCh: switch msg.value { case "cancel": - waitDuration = longWaitDuration + waitCh = time.After(longWaitDuration) s.Lock() if !s.status.IsReady() { s.status = prover.StatusCodeAborted } s.Unlock() case "prove": - waitDuration = s.provingDuration + waitCh = time.After(s.provingDuration) s.Lock() s.status = prover.StatusCodeBusy s.Unlock() } msg.ackCh <- true - case <-time.After(waitDuration): - waitDuration = longWaitDuration + case <-waitCh: + waitCh = time.After(longWaitDuration) s.Lock() if s.status != prover.StatusCodeBusy { s.Unlock()