From 10e5addc4ca7be8d7e4cfb2574e6ad8b81df8258 Mon Sep 17 00:00:00 2001 From: Arve Knudsen Date: Thu, 14 Apr 2022 10:56:56 +0200 Subject: [PATCH] Use correct filesystem/network path separators when uploading blocks Signed-off-by: Arve Knudsen --- CHANGELOG.md | 1 + pkg/block/block.go | 4 ++-- pkg/objstore/objstore.go | 12 +++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eec84630ad..26ef3bba85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ We use *breaking :warning:* to mark changes that are not backward compatible (re ## Unreleased ### Fixed +- [#5281](https://github.com/thanos-io/thanos/pull/5281) Blocks: Use correct separators for filesystem paths and object storage paths respectively. ### Added diff --git a/pkg/block/block.go b/pkg/block/block.go index d29478ac10..d44b4c283b 100644 --- a/pkg/block/block.go +++ b/pkg/block/block.go @@ -145,11 +145,11 @@ func upload(ctx context.Context, logger log.Logger, bkt objstore.Bucket, bdir st return errors.Wrap(err, "encode meta file") } - if err := objstore.UploadDir(ctx, logger, bkt, path.Join(bdir, ChunksDirname), path.Join(id.String(), ChunksDirname)); err != nil { + if err := objstore.UploadDir(ctx, logger, bkt, filepath.Join(bdir, ChunksDirname), path.Join(id.String(), ChunksDirname)); err != nil { return cleanUp(logger, bkt, id, errors.Wrap(err, "upload chunks")) } - if err := objstore.UploadFile(ctx, logger, bkt, path.Join(bdir, IndexFilename), path.Join(id.String(), IndexFilename)); err != nil { + if err := objstore.UploadFile(ctx, logger, bkt, filepath.Join(bdir, IndexFilename), path.Join(id.String(), IndexFilename)); err != nil { return cleanUp(logger, bkt, id, errors.Wrap(err, "upload index")) } diff --git a/pkg/objstore/objstore.go b/pkg/objstore/objstore.go index f66b74fe80..c2f3c12643 100644 --- a/pkg/objstore/objstore.go +++ b/pkg/objstore/objstore.go @@ -7,7 +7,9 @@ import ( "bytes" "context" "io" + "io/fs" "os" + "path" "path/filepath" "strings" "time" @@ -178,15 +180,19 @@ func UploadDir(ctx context.Context, logger log.Logger, bkt Bucket, srcdir, dstdi if !df.IsDir() { return errors.Errorf("%s is not a directory", srcdir) } - return filepath.Walk(srcdir, func(src string, fi os.FileInfo, err error) error { + return filepath.WalkDir(srcdir, func(src string, d fs.DirEntry, err error) error { if err != nil { return err } - if fi.IsDir() { + if d.IsDir() { return nil } - dst := filepath.Join(dstdir, strings.TrimPrefix(src, srcdir)) + srcRel, err := filepath.Rel(srcdir, src) + if err != nil { + return errors.Wrap(err, "getting relative path") + } + dst := path.Join(dstdir, filepath.ToSlash(srcRel)) return UploadFile(ctx, logger, bkt, src, dst) }) }