From 6b4d8fa91ef37069bab56346251f7441e34407bb Mon Sep 17 00:00:00 2001 From: machine424 Date: Tue, 3 Mar 2026 11:43:40 +0100 Subject: [PATCH] fix: fail early when --enable-feature=use-uncached-io is unsupported Signed-off-by: machine424 --- cmd/prometheus/main.go | 4 ++++ tsdb/fileutil/direct_io_force.go | 4 ++++ tsdb/fileutil/direct_io_linux.go | 4 ++++ tsdb/fileutil/direct_io_unsupported.go | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/cmd/prometheus/main.go b/cmd/prometheus/main.go index 76e424281b..2a6edb5d3a 100644 --- a/cmd/prometheus/main.go +++ b/cmd/prometheus/main.go @@ -77,6 +77,7 @@ import ( "github.com/prometheus/prometheus/tracing" "github.com/prometheus/prometheus/tsdb" "github.com/prometheus/prometheus/tsdb/agent" + "github.com/prometheus/prometheus/tsdb/fileutil" "github.com/prometheus/prometheus/util/compression" "github.com/prometheus/prometheus/util/documentcli" "github.com/prometheus/prometheus/util/features" @@ -319,6 +320,9 @@ func (c *flagConfig) setFeatureListOptions(logger *slog.Logger) error { c.web.EnableTypeAndUnitLabels = true logger.Info("Experimental type and unit labels enabled") case "use-uncached-io": + if !fileutil.UncachedIOSupported() { + return errors.New("experimental Uncached IO is not supported") + } c.tsdb.UseUncachedIO = true logger.Info("Experimental Uncached IO is enabled.") default: diff --git a/tsdb/fileutil/direct_io_force.go b/tsdb/fileutil/direct_io_force.go index 8ae4ef4fd7..aebf93335e 100644 --- a/tsdb/fileutil/direct_io_force.go +++ b/tsdb/fileutil/direct_io_force.go @@ -26,3 +26,7 @@ func NewDirectIOWriter(f *os.File, size int) (BufWriter, error) { func NewBufioWriterWithSize(f *os.File, size int) (BufWriter, error) { return NewDirectIOWriter(f, size) } + +func UncachedIOSupported() bool { + return true +} diff --git a/tsdb/fileutil/direct_io_linux.go b/tsdb/fileutil/direct_io_linux.go index 0640b503f6..869bfe8bb5 100644 --- a/tsdb/fileutil/direct_io_linux.go +++ b/tsdb/fileutil/direct_io_linux.go @@ -27,3 +27,7 @@ func NewBufioWriterWithSize(f *os.File, size int) (BufWriter, error) { func NewDirectIOWriter(f *os.File, size int) (BufWriter, error) { return newDirectIOWriter(f, size) } + +func UncachedIOSupported() bool { + return true +} diff --git a/tsdb/fileutil/direct_io_unsupported.go b/tsdb/fileutil/direct_io_unsupported.go index f17c68705f..8111c93fb7 100644 --- a/tsdb/fileutil/direct_io_unsupported.go +++ b/tsdb/fileutil/direct_io_unsupported.go @@ -27,3 +27,7 @@ func NewBufioWriterWithSize(f *os.File, size int) (BufWriter, error) { func NewDirectIOWriter(*os.File, int) (BufWriter, error) { return nil, errDirectIOUnsupported } + +func UncachedIOSupported() bool { + return false +}