From 890499a5aa0c02b5b52b0069e6352f7887528087 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Sun, 17 May 2020 02:50:54 +0200 Subject: [PATCH] Fix: do not keep adding if BlockPut failed in all destinations --- adder/util.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/adder/util.go b/adder/util.go index 9a008c9f..cd168f67 100644 --- a/adder/util.go +++ b/adder/util.go @@ -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 }