From a4bdbf7844fdcbf240ca63f7ae392eb1a68981a9 Mon Sep 17 00:00:00 2001 From: jerryzhuang Date: Mon, 10 Jul 2023 13:10:06 +0800 Subject: [PATCH] content: reduce the contention between ref lock and boltdb lock tryLock only once to reduce the amount of time the lock is held Signed-off-by: jerryzhuang --- content/local/store.go | 19 ++------------ content/testsuite/testsuite.go | 46 +++++++++++++++++----------------- 2 files changed, 25 insertions(+), 40 deletions(-) diff --git a/content/local/store.go b/content/local/store.go index 5915b6dbf..5eb98e365 100644 --- a/content/local/store.go +++ b/content/local/store.go @@ -31,7 +31,6 @@ import ( "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/filters" "github.com/containerd/containerd/log" - "github.com/containerd/containerd/pkg/randutil" "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" @@ -458,23 +457,9 @@ func (s *store) Writer(ctx context.Context, opts ...content.WriterOpt) (content. if wOpts.Ref == "" { return nil, fmt.Errorf("ref must not be empty: %w", errdefs.ErrInvalidArgument) } - var lockErr error - for count := uint64(0); count < 10; count++ { - if err := tryLock(wOpts.Ref); err != nil { - if !errdefs.IsUnavailable(err) { - return nil, err - } - lockErr = err - } else { - lockErr = nil - break - } - time.Sleep(time.Millisecond * time.Duration(randutil.Intn(1<