From eec05ce860a0a2d77702a89dc804912edd275dd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Duffeck?= Date: Mon, 3 Jul 2023 10:53:02 +0200 Subject: [PATCH] Lock the proper file --- pkg/storage/utils/decomposedfs/lookup/lookup.go | 2 +- .../utils/decomposedfs/metadata/messagepack_backend.go | 8 ++------ pkg/storage/utils/decomposedfs/upload/processing.go | 4 ++-- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/pkg/storage/utils/decomposedfs/lookup/lookup.go b/pkg/storage/utils/decomposedfs/lookup/lookup.go index 1bf151449e3..53f72bb3ed2 100644 --- a/pkg/storage/utils/decomposedfs/lookup/lookup.go +++ b/pkg/storage/utils/decomposedfs/lookup/lookup.go @@ -312,7 +312,7 @@ func (lu *Lookup) CopyMetadataWithSourceLock(ctx context.Context, sourcePath, ta switch { case lockedSource == nil: return errors.New("no lock provided") - case lockedSource.File.Name() != lu.MetadataBackend().MetadataPath(sourcePath): + case lockedSource.File.Name() != lu.MetadataBackend().MetadataPath(sourcePath)+".lock": return errors.New("lockpath does not match filepath") } diff --git a/pkg/storage/utils/decomposedfs/metadata/messagepack_backend.go b/pkg/storage/utils/decomposedfs/metadata/messagepack_backend.go index b24ecc36254..97502afd23a 100644 --- a/pkg/storage/utils/decomposedfs/metadata/messagepack_backend.go +++ b/pkg/storage/utils/decomposedfs/metadata/messagepack_backend.go @@ -150,15 +150,11 @@ func (b MessagePackBackend) saveAttributes(ctx context.Context, path string, set _, subspan := tracer.Start(ctx, "lockedfile.OpenFile") f, err = lockedfile.OpenFile(lockPath, os.O_RDWR|os.O_CREATE, 0600) subspan.End() - } else { - _, subspan := tracer.Start(ctx, "os.OpenFile") - f, err = os.OpenFile(lockPath, os.O_RDWR|os.O_CREATE, 0600) - subspan.End() + defer f.Close() } if err != nil { return err } - defer f.Close() // Read current state _, subspan := tracer.Start(ctx, "os.ReadFile") @@ -202,7 +198,7 @@ func (b MessagePackBackend) saveAttributes(ctx context.Context, path string, set go func() { _ = b.metaCache.PushToCache(b.cacheKey(path), attribs) }() - return f.Close() + return nil } func (b MessagePackBackend) loadAttributes(ctx context.Context, path string, source io.Reader) (map[string][]byte, error) { diff --git a/pkg/storage/utils/decomposedfs/upload/processing.go b/pkg/storage/utils/decomposedfs/upload/processing.go index 41ac0e43455..bfb5156a935 100644 --- a/pkg/storage/utils/decomposedfs/upload/processing.go +++ b/pkg/storage/utils/decomposedfs/upload/processing.go @@ -329,7 +329,7 @@ func initNewNode(upload *Upload, n *node.Node, fsize uint64) (*lockedfile.File, } // create and write lock new node metadata - f, err := lockedfile.OpenFile(upload.lu.MetadataBackend().MetadataPath(n.InternalPath()), os.O_RDWR|os.O_CREATE, 0600) + f, err := lockedfile.OpenFile(upload.lu.MetadataBackend().MetadataPath(n.InternalPath())+".lock", os.O_RDWR|os.O_CREATE, 0600) if err != nil { return nil, err } @@ -403,7 +403,7 @@ func updateExistingNode(upload *Upload, n *node.Node, spaceID string, fsize uint targetPath := n.InternalPath() // write lock existing node before reading treesize or tree time - f, err := lockedfile.OpenFile(upload.lu.MetadataBackend().MetadataPath(targetPath), os.O_RDWR, 0600) + f, err := lockedfile.OpenFile(upload.lu.MetadataBackend().MetadataPath(targetPath)+".lock", os.O_RDWR|os.O_CREATE, 0600) if err != nil { return nil, err }