Fix: do not keep adding if BlockPut failed in all destinations

This commit is contained in:
Hector Sanjuan 2020-05-17 02:50:54 +02:00
parent a6f16fed05
commit 890499a5aa

View File

@ -52,9 +52,11 @@ func (ba *BlockAdder) Add(ctx context.Context, node ipld.Node) error {
)
var successfulDests []peer.ID
numErrs := 0
for i, e := range errs {
if e != nil {
logger.Errorf("BlockPut on %s: %s", ba.dests[i], e)
numErrs++
}
// RPCErrors include server errors (wrong RPC methods), client
@ -67,7 +69,11 @@ func (ba *BlockAdder) Add(ctx context.Context, node ipld.Node) error {
successfulDests = append(successfulDests, ba.dests[i])
}
if len(successfulDests) == 0 {
// If all requests resulted in errors, fail.
// Successful dests will have members when no errors happened
// or when an error happened but it was not an RPC error.
// As long as BlockPut worked in 1 destination, we move on.
if numErrs == len(ba.dests) || len(successfulDests) == 0 {
return ErrBlockAdder
}