wlog: use filepath for getting checkpoint number

This changes usage of path to be replaced with path/filepath, allowing
for filepath.Base to properly return the base directory on systems where
`/` is not the standard path separator.

This resolves an issue on Windows where intermediate folders containing
a `.` were incorrectly considered to be a part of the checkpoint name.

Related to grafana/agent#3826.

Signed-off-by: Robert Fratto <robertfratto@gmail.com>
This commit is contained in:
Robert Fratto 2023-05-10 12:38:02 -04:00
parent bd98fc8c45
commit 9e4e2a4a51
No known key found for this signature in database

View file

@ -18,7 +18,7 @@ import (
"io" "io"
"math" "math"
"os" "os"
"path" "path/filepath"
"strconv" "strconv"
"strings" "strings"
"time" "time"
@ -156,7 +156,7 @@ func NewWatcher(metrics *WatcherMetrics, readerMetrics *LiveReaderMetrics, logge
writer: writer, writer: writer,
metrics: metrics, metrics: metrics,
readerMetrics: readerMetrics, readerMetrics: readerMetrics,
walDir: path.Join(dir, "wal"), walDir: filepath.Join(dir, "wal"),
name: name, name: name,
sendExemplars: sendExemplars, sendExemplars: sendExemplars,
sendHistograms: sendHistograms, sendHistograms: sendHistograms,
@ -691,7 +691,7 @@ func (w *Watcher) readCheckpoint(checkpointDir string, readFn segmentReadFn) err
func checkpointNum(dir string) (int, error) { func checkpointNum(dir string) (int, error) {
// Checkpoint dir names are in the format checkpoint.000001 // Checkpoint dir names are in the format checkpoint.000001
// dir may contain a hidden directory, so only check the base directory // dir may contain a hidden directory, so only check the base directory
chunks := strings.Split(path.Base(dir), ".") chunks := strings.Split(filepath.Base(dir), ".")
if len(chunks) != 2 { if len(chunks) != 2 {
return 0, errors.Errorf("invalid checkpoint dir string: %s", dir) return 0, errors.Errorf("invalid checkpoint dir string: %s", dir)
} }