light: fix early erroring (#6905)

This commit is contained in:
Callum Waters
2021-09-07 12:02:16 +02:00
committed by GitHub
parent 73ef2675ce
commit 0f8932f4ef

View File

@@ -239,7 +239,7 @@ func NewClientFromTrustedStore(
}
// Validate the number of witnesses.
if len(c.witnesses) < 1 {
if len(c.witnesses) == 0 {
return nil, ErrNoWitnesses
}
@@ -1001,14 +1001,14 @@ func (c *Client) lightBlockFromPrimary(ctx context.Context, height int64) (*type
case provider.ErrNoResponse, provider.ErrLightBlockNotFound, provider.ErrHeightTooHigh:
// we find a new witness to replace the primary
c.logger.Debug("error from light block request from primary, replacing...",
c.logger.Info("error from light block request from primary, replacing...",
"error", err, "height", height, "primary", c.primary)
return c.findNewPrimary(ctx, height, false)
default:
// The light client has most likely received either provider.ErrUnreliableProvider or provider.ErrBadLightBlock
// These errors mean that the light client should drop the primary and try with another provider instead
c.logger.Error("error from light block request from primary, removing...",
c.logger.Info("error from light block request from primary, removing...",
"error", err, "height", height, "primary", c.primary)
return c.findNewPrimary(ctx, height, true)
}
@@ -1046,7 +1046,7 @@ func (c *Client) findNewPrimary(ctx context.Context, height int64, remove bool)
c.providerMutex.Lock()
defer c.providerMutex.Unlock()
if len(c.witnesses) <= 1 {
if len(c.witnesses) == 0 {
return nil, ErrNoWitnesses
}
@@ -1117,6 +1117,11 @@ func (c *Client) findNewPrimary(ctx context.Context, height int64, remove bool)
}
}
// remove witnesses marked as bad. Removal is done in descending order
if err := c.removeWitnesses(witnessesToRemove); err != nil {
c.logger.Error("failed to remove witnesses", "err", err, "witnessesToRemove", witnessesToRemove)
}
return nil, lastError
}
@@ -1129,7 +1134,7 @@ func (c *Client) compareFirstHeaderWithWitnesses(ctx context.Context, h *types.S
c.providerMutex.Lock()
defer c.providerMutex.Unlock()
if len(c.witnesses) < 1 {
if len(c.witnesses) == 0 {
return ErrNoWitnesses
}
@@ -1171,7 +1176,7 @@ and remove witness. Otherwise, use the different primary`, e.WitnessIndex), "wit
// remove witnesses that have misbehaved
if err := c.removeWitnesses(witnessesToRemove); err != nil {
return err
c.logger.Error("failed to remove witnesses", "err", err, "witnessesToRemove", witnessesToRemove)
}
return nil