mirror of
https://github.com/arnaucube/hermez-node.git
synced 2026-02-07 03:16:45 +01:00
Fix timers resetting in coordinator loops
This commit is contained in:
@@ -494,7 +494,7 @@ func (c *Coordinator) Start() {
|
|||||||
|
|
||||||
c.wg.Add(1)
|
c.wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
waitDuration := longWaitDuration
|
waitCh := time.After(longWaitDuration)
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-c.ctx.Done():
|
case <-c.ctx.Done():
|
||||||
@@ -506,23 +506,24 @@ func (c *Coordinator) Start() {
|
|||||||
continue
|
continue
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
log.Errorw("Coordinator.handleMsg", "err", err)
|
log.Errorw("Coordinator.handleMsg", "err", err)
|
||||||
waitDuration = c.cfg.SyncRetryInterval
|
waitCh = time.After(c.cfg.SyncRetryInterval)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
waitDuration = longWaitDuration
|
waitCh = time.After(longWaitDuration)
|
||||||
case <-time.After(waitDuration):
|
case <-waitCh:
|
||||||
if !c.stats.Synced() {
|
if !c.stats.Synced() {
|
||||||
waitDuration = longWaitDuration
|
waitCh = time.After(longWaitDuration)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if err := c.syncStats(c.ctx, &c.stats); c.ctx.Err() != nil {
|
if err := c.syncStats(c.ctx, &c.stats); c.ctx.Err() != nil {
|
||||||
|
waitCh = time.After(longWaitDuration)
|
||||||
continue
|
continue
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
log.Errorw("Coordinator.syncStats", "err", err)
|
log.Errorw("Coordinator.syncStats", "err", err)
|
||||||
waitDuration = c.cfg.SyncRetryInterval
|
waitCh = time.After(c.cfg.SyncRetryInterval)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
waitDuration = longWaitDuration
|
waitCh = time.After(longWaitDuration)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|||||||
@@ -253,7 +253,7 @@ func (p *Pipeline) Start(batchNum common.BatchNum,
|
|||||||
|
|
||||||
p.wg.Add(1)
|
p.wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
waitDuration := zeroDuration
|
waitCh := time.After(zeroDuration)
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-p.ctx.Done():
|
case <-p.ctx.Done():
|
||||||
@@ -263,31 +263,32 @@ func (p *Pipeline) Start(batchNum common.BatchNum,
|
|||||||
case statsVars := <-p.statsVarsCh:
|
case statsVars := <-p.statsVarsCh:
|
||||||
p.stats = statsVars.Stats
|
p.stats = statsVars.Stats
|
||||||
p.syncSCVars(statsVars.Vars)
|
p.syncSCVars(statsVars.Vars)
|
||||||
case <-time.After(waitDuration):
|
case <-waitCh:
|
||||||
// Once errAtBatchNum != 0, we stop forging
|
// Once errAtBatchNum != 0, we stop forging
|
||||||
// batches because there's been an error and we
|
// batches because there's been an error and we
|
||||||
// wait for the pipeline to be stopped.
|
// wait for the pipeline to be stopped.
|
||||||
if p.getErrAtBatchNum() != 0 {
|
if p.getErrAtBatchNum() != 0 {
|
||||||
waitDuration = p.cfg.ForgeRetryInterval
|
waitCh = time.After(p.cfg.ForgeRetryInterval)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
batchNum = p.state.batchNum + 1
|
batchNum = p.state.batchNum + 1
|
||||||
batchInfo, err := p.handleForgeBatch(p.ctx, batchNum)
|
batchInfo, err := p.handleForgeBatch(p.ctx, batchNum)
|
||||||
if p.ctx.Err() != nil {
|
if p.ctx.Err() != nil {
|
||||||
|
waitCh = time.After(p.cfg.ForgeRetryInterval)
|
||||||
continue
|
continue
|
||||||
} else if tracerr.Unwrap(err) == errLastL1BatchNotSynced ||
|
} else if tracerr.Unwrap(err) == errLastL1BatchNotSynced ||
|
||||||
tracerr.Unwrap(err) == errForgeNoTxsBeforeDelay ||
|
tracerr.Unwrap(err) == errForgeNoTxsBeforeDelay ||
|
||||||
tracerr.Unwrap(err) == errForgeBeforeDelay {
|
tracerr.Unwrap(err) == errForgeBeforeDelay {
|
||||||
waitDuration = p.cfg.ForgeRetryInterval
|
waitCh = time.After(p.cfg.ForgeRetryInterval)
|
||||||
continue
|
continue
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
p.setErrAtBatchNum(batchNum)
|
p.setErrAtBatchNum(batchNum)
|
||||||
waitDuration = p.cfg.ForgeRetryInterval
|
|
||||||
p.coord.SendMsg(p.ctx, MsgStopPipeline{
|
p.coord.SendMsg(p.ctx, MsgStopPipeline{
|
||||||
Reason: fmt.Sprintf(
|
Reason: fmt.Sprintf(
|
||||||
"Pipeline.handleForgBatch: %v", err),
|
"Pipeline.handleForgBatch: %v", err),
|
||||||
FailedBatchNum: batchNum,
|
FailedBatchNum: batchNum,
|
||||||
})
|
})
|
||||||
|
waitCh = time.After(p.cfg.ForgeRetryInterval)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
p.lastForgeTime = time.Now()
|
p.lastForgeTime = time.Now()
|
||||||
@@ -297,6 +298,7 @@ func (p *Pipeline) Start(batchNum common.BatchNum,
|
|||||||
case batchChSentServerProof <- batchInfo:
|
case batchChSentServerProof <- batchInfo:
|
||||||
case <-p.ctx.Done():
|
case <-p.ctx.Done():
|
||||||
}
|
}
|
||||||
|
waitCh = time.After(zeroDuration)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|||||||
@@ -416,7 +416,7 @@ func (q *Queue) Push(batchInfo *BatchInfo) {
|
|||||||
|
|
||||||
// Run the TxManager
|
// Run the TxManager
|
||||||
func (t *TxManager) Run(ctx context.Context) {
|
func (t *TxManager) Run(ctx context.Context) {
|
||||||
waitDuration := longWaitDuration
|
waitCh := time.After(longWaitDuration)
|
||||||
|
|
||||||
var statsVars statsVars
|
var statsVars statsVars
|
||||||
select {
|
select {
|
||||||
@@ -471,11 +471,11 @@ func (t *TxManager) Run(ctx context.Context) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
t.queue.Push(batchInfo)
|
t.queue.Push(batchInfo)
|
||||||
waitDuration = t.cfg.TxManagerCheckInterval
|
waitCh = time.After(t.cfg.TxManagerCheckInterval)
|
||||||
case <-time.After(waitDuration):
|
case <-waitCh:
|
||||||
queuePosition, batchInfo := t.queue.Next()
|
queuePosition, batchInfo := t.queue.Next()
|
||||||
if batchInfo == nil {
|
if batchInfo == nil {
|
||||||
waitDuration = longWaitDuration
|
waitCh = time.After(longWaitDuration)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if err := t.checkEthTransactionReceipt(ctx, batchInfo); ctx.Err() != nil {
|
if err := t.checkEthTransactionReceipt(ctx, batchInfo); ctx.Err() != nil {
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ const longWaitDuration = 999 * time.Hour
|
|||||||
// const provingDuration = 2 * time.Second
|
// const provingDuration = 2 * time.Second
|
||||||
|
|
||||||
func (s *Mock) runProver(ctx context.Context) {
|
func (s *Mock) runProver(ctx context.Context) {
|
||||||
waitDuration := longWaitDuration
|
waitCh := time.After(longWaitDuration)
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
@@ -153,21 +153,21 @@ func (s *Mock) runProver(ctx context.Context) {
|
|||||||
case msg := <-s.msgCh:
|
case msg := <-s.msgCh:
|
||||||
switch msg.value {
|
switch msg.value {
|
||||||
case "cancel":
|
case "cancel":
|
||||||
waitDuration = longWaitDuration
|
waitCh = time.After(longWaitDuration)
|
||||||
s.Lock()
|
s.Lock()
|
||||||
if !s.status.IsReady() {
|
if !s.status.IsReady() {
|
||||||
s.status = prover.StatusCodeAborted
|
s.status = prover.StatusCodeAborted
|
||||||
}
|
}
|
||||||
s.Unlock()
|
s.Unlock()
|
||||||
case "prove":
|
case "prove":
|
||||||
waitDuration = s.provingDuration
|
waitCh = time.After(s.provingDuration)
|
||||||
s.Lock()
|
s.Lock()
|
||||||
s.status = prover.StatusCodeBusy
|
s.status = prover.StatusCodeBusy
|
||||||
s.Unlock()
|
s.Unlock()
|
||||||
}
|
}
|
||||||
msg.ackCh <- true
|
msg.ackCh <- true
|
||||||
case <-time.After(waitDuration):
|
case <-waitCh:
|
||||||
waitDuration = longWaitDuration
|
waitCh = time.After(longWaitDuration)
|
||||||
s.Lock()
|
s.Lock()
|
||||||
if s.status != prover.StatusCodeBusy {
|
if s.status != prover.StatusCodeBusy {
|
||||||
s.Unlock()
|
s.Unlock()
|
||||||
|
|||||||
Reference in New Issue
Block a user