node/pkg/solana: do not re-trigger scheduled recovery past schedule

Change-Id: I2df48c868caa0b5d93fc5ae53e154ceca0e9a4d7
This commit is contained in:
Leo 2021-10-05 21:36:23 +02:00
parent 3ad6ad2cdd
commit c1502bce13
1 changed files with 10 additions and 7 deletions

View File

@ -126,16 +126,20 @@ func (s *SolanaWatcher) Run(ctx context.Context) error {
timer := time.NewTicker(time.Second * 1)
defer timer.Stop()
recovery := time.NewTimer(recoveryDate.Sub(time.Now().UTC()))
var recovery <-chan time.Time
date := recoveryDate.Sub(time.Now().UTC())
if date >= 0 && s.commitment == rpc.CommitmentFinalized {
logger.Info("waiting for scheduled recovery", zap.Duration("until", date))
recovery = time.NewTimer(date).C
} else {
recovery = make(<-chan time.Time)
}
for {
select {
case <-ctx.Done():
return
case <-recovery.C:
if s.commitment != rpc.CommitmentFinalized {
continue
}
case <-recovery:
logger.Info("executing scheduled recovery")
rCtx, cancel := context.WithTimeout(ctx, rpcTimeout)
@ -266,7 +270,7 @@ func (s *SolanaWatcher) fetchBlock(ctx context.Context, logger *zap.Logger, slot
if emptyRetry < maxEmptyRetry {
go func() {
time.Sleep(retryDelay)
s.fetchBlock(ctx, logger, slot, emptyRetry + 1)
s.fetchBlock(ctx, logger, slot, emptyRetry+1)
}()
}
return true
@ -394,7 +398,6 @@ func (s *SolanaWatcher) processInstruction(ctx context.Context, logger *zap.Logg
len(inst.Accounts), postMessageInstructionNumAccounts)
}
// Decode instruction data (UNTRUSTED)
var data PostMessageData
if err := borsh.Deserialize(&data, inst.Data[1:]); err != nil {