From 860a74f8a57ca3e69e59fd84416dc3a55650be3e Mon Sep 17 00:00:00 2001 From: Shiwen Cheng Date: Sat, 28 Sep 2024 07:47:33 +0800 Subject: [PATCH] fix(backup): fix DBRetentionAndShardFromPath parsing error between-different-os (#25362) Split paths by both forward and back slashes. Closes https://github.com/influxdata/influxdb/issues/25361 --- cmd/influxd/backup_util/backup_util.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cmd/influxd/backup_util/backup_util.go b/cmd/influxd/backup_util/backup_util.go index c4dd9e8adbe..86620a0bea5 100644 --- a/cmd/influxd/backup_util/backup_util.go +++ b/cmd/influxd/backup_util/backup_util.go @@ -8,8 +8,8 @@ import ( "io" "os" "path/filepath" + "regexp" "sort" - "strings" "sync/atomic" internal "github.com/influxdata/influxdb/cmd/influxd/backup_util/internal" @@ -219,10 +219,12 @@ func (w *CountingWriter) BytesWritten() int64 { return atomic.LoadInt64(&w.Total) } -// retentionAndShardFromPath will take the shard relative path and split it into the -// retention policy name and shard ID. The first part of the path should be the database name. +var separatorRegexp = regexp.MustCompile(`[/\\]`) + +// DBRetentionAndShardFromPath will take the shard relative path and split it into the +// database name, retention policy name and shard ID. The first part of the path should be the database name. func DBRetentionAndShardFromPath(path string) (db, retention, shard string, err error) { - a := strings.Split(path, string(filepath.Separator)) + a := separatorRegexp.Split(path, -1) if len(a) != 3 { return "", "", "", fmt.Errorf("expected database, retention policy, and shard id in path: %s", path) }