From 5ac1e6a65693999f54cc06943db6ceda990a421b Mon Sep 17 00:00:00 2001 From: machine424 Date: Thu, 29 May 2025 09:35:33 +0200 Subject: [PATCH] fix(test): fall back to default direct I/O requirements in tests when statx isn't supported by using a higher lever util Signed-off-by: machine424 --- tsdb/fileutil/direct_io_writer.go | 12 +++++++----- tsdb/fileutil/direct_io_writer_test.go | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/tsdb/fileutil/direct_io_writer.go b/tsdb/fileutil/direct_io_writer.go index cf20504006..793d081481 100644 --- a/tsdb/fileutil/direct_io_writer.go +++ b/tsdb/fileutil/direct_io_writer.go @@ -27,7 +27,7 @@ import ( const ( // the defaults are deliberately set higher to cover most setups. - // On Linux >= 6.14, statx(2) https://man7.org/linux/man-pages/man2/statx.2.html will be later + // On Linux >= 6.1, statx(2) https://man7.org/linux/man-pages/man2/statx.2.html will be later // used to fetch the exact alignment restrictions. defaultAlignment = 4096 defaultBufSize = 4096 @@ -249,8 +249,10 @@ func (b *directIOWriter) Reset(f *os.File) error { return nil } +// fileDirectIORqmts fetches alignment requirements via Statx, falling back to default +// values when unsupported. func fileDirectIORqmts(f *os.File) (*directIORqmts, error) { - alignmentRqmts, err := fetchDirectIORqmts(f.Fd()) + alignmentRqmts, err := fetchDirectIORqmtsFromStatx(f.Fd()) switch { case errors.Is(err, errStatxNotSupported): alignmentRqmts = defaultDirectIORqmts() @@ -378,9 +380,9 @@ func defaultDirectIORqmts() *directIORqmts { } } -// fetchDirectIORqmts retrieves direct I/O alignment requirements for a file descriptor using statx -// when possible. -func fetchDirectIORqmts(fd uintptr) (*directIORqmts, error) { +// fetchDirectIORqmtsFromStatx tries to retrieve direct I/O alignment requirements for the +// file descriptor using statx. +func fetchDirectIORqmtsFromStatx(fd uintptr) (*directIORqmts, error) { var stat unix.Statx_t flags := unix.AT_SYMLINK_NOFOLLOW | unix.AT_EMPTY_PATH | unix.AT_STATX_DONT_SYNC mask := unix.STATX_DIOALIGN diff --git a/tsdb/fileutil/direct_io_writer_test.go b/tsdb/fileutil/direct_io_writer_test.go index 31ea6fda6e..ea010e5e96 100644 --- a/tsdb/fileutil/direct_io_writer_test.go +++ b/tsdb/fileutil/direct_io_writer_test.go @@ -27,7 +27,7 @@ import ( func directIORqmtsForTest(tb testing.TB) *directIORqmts { f, err := os.OpenFile(path.Join(tb.TempDir(), "foo"), os.O_CREATE|os.O_WRONLY, 0o666) require.NoError(tb, err) - alignmentRqmts, err := fetchDirectIORqmts(f.Fd()) + alignmentRqmts, err := fileDirectIORqmts(f) require.NoError(tb, err) return alignmentRqmts }