From 77dfe5f1fdc30f4777b85abcb97ffe622547eb98 Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Mon, 25 Sep 2023 11:01:51 +0100 Subject: [PATCH] pacer: fix b2 deadlock by defaulting max connections to unlimited Before this change, the maximum number of connections was set to 10. This means that b2 could deadlock while uploading multipart uploads due to a lock being held longer than it should have been. --- fs/pacer.go | 2 +- lib/pacer/pacer.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/pacer.go b/fs/pacer.go index c8bac2230..00515623a 100644 --- a/fs/pacer.go +++ b/fs/pacer.go @@ -29,7 +29,7 @@ func NewPacer(ctx context.Context, c pacer.Calculator) *Pacer { p := &Pacer{ Pacer: pacer.New( pacer.InvokerOption(pacerInvoker), - pacer.MaxConnectionsOption(ci.Checkers+ci.Transfers), + // pacer.MaxConnectionsOption(ci.Checkers+ci.Transfers), pacer.RetriesOption(retries), pacer.CalculatorOption(c), ), diff --git a/lib/pacer/pacer.go b/lib/pacer/pacer.go index 4b1cbb37b..6cfcb84d6 100644 --- a/lib/pacer/pacer.go +++ b/lib/pacer/pacer.go @@ -75,7 +75,7 @@ type Paced func() (bool, error) // New returns a Pacer with sensible defaults. func New(options ...Option) *Pacer { opts := pacerOptions{ - maxConnections: 10, + maxConnections: 0, retries: 3, } for _, o := range options { @@ -103,7 +103,7 @@ func New(options ...Option) *Pacer { // SetMaxConnections sets the maximum number of concurrent connections. // Setting the value to 0 will allow unlimited number of connections. // Should not be changed once you have started calling the pacer. -// By default this will be set to fs.Config.Checkers. +// By default this will be 0. func (p *Pacer) SetMaxConnections(n int) { p.mu.Lock() defer p.mu.Unlock()