On 2026-03-18 15:50, Claudio Jeker wrote:
> On Sat, Mar 07, 2026 at 06:04:27PM +0200, Atanas Vladimirov wrote:
>> Hi ports,
>>
>> This is a patch to update the Prometheus to the latest 2.x LTS version
>> 2.53.5
>> I'm testing it the last few days and so far so good.
>>
>> Please add me in CC because I'm not subscribed to the ports list.
>>
>> Best wishes,
>> Atanas
>
> The patch does not apply. It seems your mail client tried to be helpful
> and reformatted long lines like the SHA256 lines in distinfo.
>
Sorry for that. I'm sending the patch as attachment now.
Also, I'm trying to send it as plain text below:
###############
Index: Makefile
===================================================================
RCS file: /cvs/ports/sysutils/prometheus/Makefile,v
diff -u -p -r1.23 Makefile
--- Makefile 25 Sep 2023 17:07:36 -0000 1.23
+++ Makefile 7 Mar 2026 15:56:42 -0000
@@ -1,6 +1,6 @@
COMMENT = systems monitoring and alerting toolkit
-V = 2.37.9
+V = 2.53.5
GH_ACCOUNT = prometheus
GH_PROJECT = prometheus
GH_TAGNAME = v${V}
Index: distinfo
===================================================================
RCS file: /cvs/ports/sysutils/prometheus/distinfo,v
diff -u -p -r1.12 distinfo
--- distinfo 6 Sep 2023 10:28:49 -0000 1.12
+++ distinfo 7 Mar 2026 15:56:42 -0000
@@ -1,6 +1,6 @@
-SHA256 (prometheus-2.37.9.tar.gz) =
gSoQplOidWqzAzS9TPBmH5TepeWUw3LTPRNwQHRgpGo=
-SHA256 (prometheus-vendor-2.37.9.tar.gz) =
ea+tEdN2yBEMBYY78U6tPOLI7uorbEhNL3o5/JTxaPI=
-SHA256 (prometheus-web-ui-2.37.9.tar.gz) =
2z6Ohg/dUEwQ5NxTn1wfxwVrKOPJGAWgSXNxb2lX4MA=
-SIZE (prometheus-2.37.9.tar.gz) = 6048911
-SIZE (prometheus-vendor-2.37.9.tar.gz) = 11758451
-SIZE (prometheus-web-ui-2.37.9.tar.gz) = 2390133
+SHA256 (prometheus-2.53.5.tar.gz) =
3ulsQxSyfWLL9Cy6faJccx0+kagkEsIviLKICOC4qYc=
+SHA256 (prometheus-vendor-2.53.5.tar.gz) =
Ib7Qstt7Pk+9c2ypzmILnGiDUaamdFvijmqWTLLjfTk=
+SHA256 (prometheus-web-ui-2.53.5.tar.gz) =
QD0m3gyT3HAtI/mtYYiF6J+2RgAz4a7qLghC3VV33dM=
+SIZE (prometheus-2.53.5.tar.gz) = 6226039
+SIZE (prometheus-vendor-2.53.5.tar.gz) = 15356568
+SIZE (prometheus-web-ui-2.53.5.tar.gz) = 2438498
Index: patches/patch-Makefile
===================================================================
RCS file: /cvs/ports/sysutils/prometheus/patches/patch-Makefile,v
diff -u -p -r1.7 patch-Makefile
--- patches/patch-Makefile 28 Feb 2023 17:54:21 -0000 1.7
+++ patches/patch-Makefile 7 Mar 2026 15:56:42 -0000
@@ -3,7 +3,7 @@ The react build is provided via extra di
Index: Makefile
--- Makefile.orig
+++ Makefile
-@@ -83,7 +83,7 @@ ui-lint:
+@@ -67,7 +67,7 @@ ui-lint:
cd $(UI_PATH) && npm run lint
.PHONY: assets
@@ -12,12 +12,12 @@ Index: Makefile
.PHONY: assets-compress
assets-compress: assets
-@@ -124,7 +124,7 @@ plugins/plugins.go: plugins.yml plugins/generate.go
+@@ -139,7 +139,7 @@ plugins/plugins.go: plugins.yml plugins/generate.go
plugins: plugins/plugins.go
.PHONY: build
--build: assets npm_licenses assets-compress common-build plugins
-+build: assets-compress common-build plugins
+-build: assets npm_licenses assets-compress plugins common-build
++build: assets-compress plugins common-build
.PHONY: bench_tsdb
bench_tsdb: $(PROMU)
Index: patches/patch-Makefile_common
===================================================================
RCS file: /cvs/ports/sysutils/prometheus/patches/patch-Makefile_common,v
diff -u -p -r1.7 patch-Makefile_common
--- patches/patch-Makefile_common 28 Feb 2023 17:54:21 -0000 1.7
+++ patches/patch-Makefile_common 7 Mar 2026 15:56:42 -0000
@@ -3,8 +3,7 @@ Don't fetch promu form internet. This is
Index: Makefile.common
--- Makefile.common.orig
+++ Makefile.common
-@@ -232,11 +232,7 @@ common-docker-manifest:
- promu: $(PROMU)
+@@ -243,11 +243,7 @@ promu: $(PROMU)
$(PROMU):
- $(eval PROMU_TMP := $(shell mktemp -d))
Index: patches/patch-_promu_yml
===================================================================
RCS file: /cvs/ports/sysutils/prometheus/patches/patch-_promu_yml,v
diff -u -p -r1.6 patch-_promu_yml
--- patches/patch-_promu_yml 6 Sep 2023 10:28:49 -0000 1.6
+++ patches/patch-_promu_yml 7 Mar 2026 15:56:42 -0000
@@ -3,18 +3,18 @@ Don't include user and hostname into bui
Index: .promu.yml
--- .promu.yml.orig
+++ .promu.yml
-@@ -16,13 +16,13 @@ build:
- - builtinassets
+@@ -18,12 +18,13 @@
windows:
- builtinassets
-- flags: -a
-+ flags: -v -a
- ldflags: |
+ - stringlabels
+- ldflags: |
- -X github.com/prometheus/common/version.Version={{.Version}}
- -X github.com/prometheus/common/version.Revision={{.Revision}}
- -X github.com/prometheus/common/version.Branch={{.Branch}}
- -X github.com/prometheus/common/version.BuildUser={{user}}@{{host}}
- -X github.com/prometheus/common/version.BuildDate={{date
"20060102-15:04:05"}}
++ flags: -v
++ ldflags: |
+ -X
github.com/prometheus/prometheus/vendor/github.com/prometheus/common/version.Version={{.Version}}
+ -X
github.com/prometheus/prometheus/vendor/github.com/prometheus/common/version.Revision={{.Revision}}
+ -X
github.com/prometheus/prometheus/vendor/github.com/prometheus/common/version.Branch={{.Branch}}
Index: patches/patch-mmap_openbsd
===================================================================
RCS file: /cvs/ports/sysutils/prometheus/patches/patch-mmap_openbsd,v
diff -u -p -r1.3 patch-mmap_openbsd
--- patches/patch-mmap_openbsd 15 Jun 2023 08:52:07 -0000 1.3
+++ patches/patch-mmap_openbsd 7 Mar 2026 15:56:42 -0000
@@ -3,35 +3,42 @@ and https://github.com/prometheus/promet
to make tsdb only use mmap and work around missing UBC support.
diff --git go.mod go.mod
-index 39c3fcb5b..760b39a8b 100644
--- go.mod
+++ go.mod
-@@ -13,7 +13,6 @@ require (
- github.com/dgryski/go-sip13 v0.0.0-20200911182023-62edffca9245
- github.com/digitalocean/godo v1.81.0
- github.com/docker/docker v20.10.24+incompatible
+@@ -17,7 +17,6 @@
+ github.com/dennwc/varint v1.0.0
+ github.com/digitalocean/godo v1.117.0
+ github.com/docker/docker v26.1.5+incompatible
- github.com/edsrzf/mmap-go v1.1.0
- github.com/envoyproxy/go-control-plane v0.10.3
- github.com/envoyproxy/protoc-gen-validate v0.6.7
- github.com/fsnotify/fsnotify v1.5.4
+ github.com/envoyproxy/go-control-plane/envoy v1.32.4
+ github.com/envoyproxy/protoc-gen-validate v1.2.1
+ github.com/facette/natsort v0.0.0-20181210072756-2cd4dd1e2dcb
+
diff --git go.sum go.sum
-index e7aee4a9b..6b323945d 100644
--- go.sum
+++ go.sum
-@@ -202,8 +202,6 @@ github.com/eapache/go-resiliency v1.1.0/go.mod
h1:kFI+JgMyC7bLPUVY133qvEBtVayf5m
+@@ -160,8 +160,6 @@
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod
h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/queue v1.1.0/go.mod
h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/edsrzf/mmap-go v1.0.0/go.mod
h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
-github.com/edsrzf/mmap-go v1.1.0
h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ=
-github.com/edsrzf/mmap-go v1.1.0/go.mod
h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q=
- github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod
h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
- github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod
h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
- github.com/emicklei/go-restful v2.9.5+incompatible/go.mod
h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+ github.com/emicklei/go-restful/v3 v3.11.0
h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
+ github.com/emicklei/go-restful/v3 v3.11.0/go.mod
h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+ github.com/envoyproxy/go-control-plane v0.6.9/go.mod
h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
+
diff --git promql/query_logger.go promql/query_logger.go
-index 716e7749b..8eb1afce0 100644
--- promql/query_logger.go
+++ promql/query_logger.go
-@@ -22,13 +22,13 @@ import (
+@@ -16,7 +16,6 @@
+ import (
+ "context"
+ "encoding/json"
+- "errors"
+ "fmt"
+ "io"
+ "os"
+@@ -25,16 +24,15 @@
"time"
"unicode/utf8"
@@ -46,43 +53,70 @@ index 716e7749b..8eb1afce0 100644
+ mw *fileutil.MmapWriter
getNextIndex chan int
logger log.Logger
+- closer io.Closer
maxConcurrent int
-@@ -81,7 +81,7 @@ func logUnfinishedQueries(filename string, filesize int,
logger log.Logger) {
+ }
+
+@@ -87,24 +85,7 @@
}
}
--func getMMapedFile(filename string, filesize int, logger log.Logger) ([]byte,
error) {
+-type mmapedFile struct {
+- f io.Closer
+- m mmap.MMap
+-}
+-
+-func (f *mmapedFile) Close() error {
+- err := f.m.Unmap()
+- if err != nil {
+- err = fmt.Errorf("mmapedFile: unmapping: %w", err)
+- }
+- if fErr := f.f.Close(); fErr != nil {
+- return errors.Join(fmt.Errorf("close mmapedFile.f: %w", fErr),
err)
+- }
+-
+- return err
+-}
+-
+-func getMMapedFile(filename string, filesize int, logger log.Logger) ([]byte,
io.Closer, error) {
+func getMMapedFile(filename string, filesize int, logger log.Logger)
(*fileutil.MmapWriter, error) {
file, err := os.OpenFile(filename, os.O_CREATE|os.O_RDWR|os.O_TRUNC,
0o666)
if err != nil {
absPath, pathErr := filepath.Abs(filename)
-@@ -92,19 +92,13 @@ func getMMapedFile(filename string, filesize int, logger
log.Logger) ([]byte, er
- return nil, err
+@@ -112,24 +93,16 @@
+ absPath = filename
+ }
+ level.Error(logger).Log("msg", "Error opening query log file",
"file", absPath, "err", err)
+- return nil, nil, err
++ return nil, err
}
- err = file.Truncate(int64(filesize))
-- if err != nil {
++ mw, err := fileutil.NewMmapWriterWithSize(file, filesize)
+ if err != nil {
+- file.Close()
- level.Error(logger).Log("msg", "Error setting filesize.",
"filesize", filesize, "err", err)
-- return nil, err
+- return nil, nil, err
- }
-
- fileAsBytes, err := mmap.Map(file, mmap.RDWR, 0)
-+ mw, err := fileutil.NewMmapWriterWithSize(file, filesize)
- if err != nil {
+- if err != nil {
+- file.Close()
level.Error(logger).Log("msg", "Failed to mmap", "file",
filename, "Attempted size", filesize, "err", err)
- return nil, err
+- return nil, nil, err
++ return nil, err
}
-- return fileAsBytes, err
+- return fileAsBytes, &mmapedFile{f: file, m: fileAsBytes}, err
+ return mw, err
}
func NewActiveQueryTracker(localStoragePath string, maxConcurrent int, logger
log.Logger) *ActiveQueryTracker {
-@@ -116,14 +110,17 @@ func NewActiveQueryTracker(localStoragePath string,
maxConcurrent int, logger lo
+@@ -141,15 +114,17 @@
filename, filesize := filepath.Join(localStoragePath,
"queries.active"), 1+maxConcurrent*entrySize
logUnfinishedQueries(filename, filesize, logger)
-- fileAsBytes, err := getMMapedFile(filename, filesize, logger)
+- fileAsBytes, closer, err := getMMapedFile(filename, filesize, logger)
+ mw, err := getMMapedFile(filename, filesize, logger)
if err != nil {
panic("Unable to create mmap-ed active query log")
@@ -95,11 +129,12 @@ index 716e7749b..8eb1afce0 100644
+ }
activeQueryTracker := ActiveQueryTracker{
- mmapedFile: fileAsBytes,
+- closer: closer,
+ mw: mw,
getNextIndex: make(chan int, maxConcurrent),
logger: logger,
maxConcurrent: maxConcurrent,
-@@ -180,19 +177,27 @@ func (tracker ActiveQueryTracker) GetMaxConcurrent() int
{
+@@ -206,19 +181,27 @@
}
func (tracker ActiveQueryTracker) Delete(insertIndex int) {
@@ -131,11 +166,26 @@ index 716e7749b..8eb1afce0 100644
return i, nil
case <-ctx.Done():
return 0, ctx.Err()
+@@ -227,11 +210,11 @@
+
+ // Close closes tracker.
+ func (tracker *ActiveQueryTracker) Close() error {
+- if tracker == nil || tracker.closer == nil {
++ if tracker == nil || tracker.mw == nil {
+ return nil
+ }
+- if err := tracker.closer.Close(); err != nil {
+- return fmt.Errorf("close ActiveQueryTracker.closer: %w", err)
++ if err := tracker.mw.Close(); err != nil {
++ return fmt.Errorf("close ActiveQueryTracker.mw: %w", err)
+ }
+ return nil
+ }
+
diff --git promql/query_logger_test.go promql/query_logger_test.go
-index ad76fb992..bd92b81af 100644
--- promql/query_logger_test.go
+++ promql/query_logger_test.go
-@@ -19,13 +19,22 @@ import (
+@@ -20,13 +20,20 @@
"testing"
"github.com/grafana/regexp"
@@ -145,12 +195,10 @@ index ad76fb992..bd92b81af 100644
func TestQueryLogging(t *testing.T) {
- fileAsBytes := make([]byte, 4096)
-+ file, err := ioutil.TempFile("", "mmapedFile")
++ dir := t.TempDir()
++ file, err := os.CreateTemp(dir, "mmapedFile")
+ require.NoError(t, err)
+
-+ filename := file.Name()
-+ defer os.Remove(filename)
-+
+ mw, err := fileutil.NewMmapWriterWithSize(file, 4096)
+ require.NoError(t, err)
+
@@ -160,7 +208,7 @@ index ad76fb992..bd92b81af 100644
logger: nil,
getNextIndex: make(chan int, 4),
}
-@@ -45,6 +54,7 @@ func TestQueryLogging(t *testing.T) {
+@@ -46,6 +53,7 @@
`^{"query":"","timestamp_sec":\d+}\x00*,$`,
`^{"query":"SpecialCharQuery{host=\\"2132132\\",
id=123123}","timestamp_sec":\d+}\x00*,$`,
}
@@ -168,17 +216,15 @@ index ad76fb992..bd92b81af 100644
// Check for inserts of queries.
for i := 0; i < 4; i++ {
-@@ -67,9 +77,17 @@ func TestQueryLogging(t *testing.T) {
+@@ -68,9 +76,15 @@
}
func TestIndexReuse(t *testing.T) {
- queryBytes := make([]byte, 1+3*entrySize)
-+ file, err := ioutil.TempFile("", "mmapedFile")
++ dir := t.TempDir()
++ file, err := os.CreateTemp(dir, "mmapedFile")
+ require.NoError(t, err)
+
-+ filename := file.Name()
-+ defer os.Remove(filename)
-+
+ mw, err := fileutil.NewMmapWriterWithSize(file, 1+3*entrySize)
+ require.NoError(t, err)
+
@@ -188,7 +234,7 @@ index ad76fb992..bd92b81af 100644
logger: nil,
getNextIndex: make(chan int, 3),
}
-@@ -91,6 +109,7 @@ func TestIndexReuse(t *testing.T) {
+@@ -92,6 +106,7 @@
`^{"query":"ThisShouldBeInsertedAtIndex2","timestamp_sec":\d+}\x00*,$`,
`^{"query":"TestQuery3","timestamp_sec":\d+}\x00*,$`,
}
@@ -196,26 +242,27 @@ index ad76fb992..bd92b81af 100644
// Check all bytes and verify new query was inserted at index 2
for i := 0; i < 3; i++ {
-@@ -110,10 +129,12 @@ func TestMMapFile(t *testing.T) {
- filename := file.Name()
- defer os.Remove(filename)
+@@ -109,10 +124,12 @@
+ fpath := filepath.Join(dir, "mmapedFile")
+ const data = "ab"
-- fileAsBytes, err := getMMapedFile(filename, 2, nil)
-+ mw, err := getMMapedFile(filename, 2, nil)
+- fileAsBytes, closer, err := getMMapedFile(fpath, 2, nil)
++ mw, err := getMMapedFile(fpath, 2, nil)
+ require.NoError(t, err)
-
-+ fileAsBytes := mw.Bytes()
-+ _, err = mw.Write([]byte("ab"))
++
++ _, err = mw.Write([]byte(data))
require.NoError(t, err)
-- copy(fileAsBytes, "ab")
+- copy(fileAsBytes, data)
+- require.NoError(t, closer.Close())
++ require.NoError(t, mw.Close())
- f, err := os.Open(filename)
+ f, err := os.Open(fpath)
require.NoError(t, err)
+
diff --git tsdb/fileutil/mmap.go tsdb/fileutil/mmap.go
-index 4dbca4f97..e1c522472 100644
--- tsdb/fileutil/mmap.go
+++ tsdb/fileutil/mmap.go
-@@ -20,8 +20,31 @@ import (
+@@ -19,8 +19,31 @@
)
type MmapFile struct {
@@ -236,27 +283,27 @@ index 4dbca4f97..e1c522472 100644
+ if size <= 0 {
+ info, err := f.Stat()
+ if err != nil {
-+ return nil, errors.Wrap(err, "stat")
++ return nil, fmt.Errorf("stat: %w", err)
+ }
+ size = int(info.Size())
+ }
+
+ b, err := mmapRw(f, size)
+ if err != nil {
-+ return nil, errors.Wrapf(err, "mmap, size %d", size)
++ return nil, fmt.Errorf("mmap, size %d: %w", size, err)
+ }
+ return &MmapFile{f: f, b: b, rw: true}, nil
}
func OpenMmapFile(path string) (*MmapFile, error) {
-@@ -46,22 +69,53 @@ func OpenMmapFileWithSize(path string, size int) (mf
*MmapFile, retErr error) {
+@@ -45,22 +68,53 @@
size = int(info.Size())
}
- b, err := mmap(f, size)
+ b, err := mmapRo(f, size)
if err != nil {
- return nil, errors.Wrapf(err, "mmap, size %d", size)
+ return nil, fmt.Errorf("mmap, size %d: %w", size, err)
}
+ return &MmapFile{f: f, b: b, closeFile: true}, nil
+}
@@ -265,11 +312,11 @@ index 4dbca4f97..e1c522472 100644
+func (f *MmapFile) resize(size int) error {
+ err := f.Sync()
+ if err != nil {
-+ return errors.Wrap(err, "resize sync")
++ return fmt.Errorf("resize sync: %w", err)
+ }
+ err = munmap(f.b)
+ if err != nil {
-+ return errors.Wrap(err, "resize munmap")
++ return fmt.Errorf("resize munmap: %w", err)
+ }
+ var b []byte
+ if f.rw {
@@ -278,7 +325,7 @@ index 4dbca4f97..e1c522472 100644
+ b, err = mmapRo(f.f, size)
+ }
+ if err != nil {
-+ return errors.Wrap(err, "resize mmap")
++ return fmt.Errorf("resize mmap: %w", err)
+ }
+ f.b = b
+ return nil
@@ -296,22 +343,22 @@ index 4dbca4f97..e1c522472 100644
if err0 != nil {
- return err0
-+ return errors.Wrap(err0, "close sync")
++ return fmt.Errorf("close sync: %w", err0)
+ }
+ if err1 != nil {
-+ return errors.Wrap(err1, "close munmap")
++ return fmt.Errorf("close munmap: %w", err1)
+ }
+ if err2 != nil {
-+ return errors.Wrap(err2, "close file")
++ return fmt.Errorf("close file: %w", err2)
}
- return err1
+ return nil
}
func (f *MmapFile) File() *os.File {
+
diff --git tsdb/fileutil/mmap_openbsd.go tsdb/fileutil/mmap_openbsd.go
new file mode 100644
-index 000000000..39b590ee5
--- /dev/null
+++ tsdb/fileutil/mmap_openbsd.go
@@ -0,0 +1,25 @@
@@ -340,9 +387,9 @@ index 000000000..39b590ee5
+func (f *MmapFile) Sync() error {
+ return unix.Msync(f.b, unix.MS_SYNC)
+}
+
diff --git tsdb/fileutil/mmap_sync.go tsdb/fileutil/mmap_sync.go
new file mode 100644
-index 000000000..31fd98e6d
--- /dev/null
+++ tsdb/fileutil/mmap_sync.go
@@ -0,0 +1,21 @@
@@ -367,11 +414,20 @@ index 000000000..31fd98e6d
+func (f *MmapFile) Sync() error {
+ return nil
+}
+
diff --git tsdb/fileutil/mmap_unix.go tsdb/fileutil/mmap_unix.go
-index 1fd7f48ff..c83a32011 100644
--- tsdb/fileutil/mmap_unix.go
+++ tsdb/fileutil/mmap_unix.go
-@@ -22,10 +22,14 @@ import (
+@@ -11,7 +11,7 @@
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+-//go:build !windows && !plan9 && !js
++//go:build !windows && !plan9 && !js && !wasm
+
+ package fileutil
+
+@@ -21,10 +21,14 @@
"golang.org/x/sys/unix"
)
@@ -387,11 +443,11 @@ index 1fd7f48ff..c83a32011 100644
func munmap(b []byte) (err error) {
return unix.Munmap(b)
}
+
diff --git tsdb/fileutil/mmap_windows.go tsdb/fileutil/mmap_windows.go
-index b94226412..9caf36622 100644
--- tsdb/fileutil/mmap_windows.go
+++ tsdb/fileutil/mmap_windows.go
-@@ -19,7 +19,26 @@ import (
+@@ -19,7 +19,26 @@
"unsafe"
)
@@ -419,9 +475,9 @@ index b94226412..9caf36622 100644
low, high := uint32(size), uint32(size>>32)
h, errno := syscall.CreateFileMapping(syscall.Handle(f.Fd()), nil,
syscall.PAGE_READONLY, high, low, nil)
if h == 0 {
+
diff --git tsdb/fileutil/writer.go tsdb/fileutil/writer.go
new file mode 100644
-index 000000000..86c1504e4
--- /dev/null
+++ tsdb/fileutil/writer.go
@@ -0,0 +1,156 @@
@@ -581,11 +637,11 @@ index 000000000..86c1504e4
+ err = mw.Sync()
+ return
+}
+
diff --git tsdb/index/index.go tsdb/index/index.go
-index 29295c45f..451c80582 100644
--- tsdb/index/index.go
+++ tsdb/index/index.go
-@@ -257,6 +257,7 @@ func (w *Writer) addPadding(size int) error {
+@@ -273,6 +273,7 @@
type FileWriter struct {
f *os.File
fbuf *bufio.Writer
@@ -593,7 +649,7 @@ index 29295c45f..451c80582 100644
pos uint64
name string
}
-@@ -266,14 +267,20 @@ func NewFileWriter(name string) (*FileWriter, error) {
+@@ -282,9 +283,11 @@
if err != nil {
return nil, err
}
@@ -606,16 +662,18 @@ index 29295c45f..451c80582 100644
pos: 0,
name: name,
}, nil
+@@ -294,6 +297,10 @@
+ return fw.pos
}
+func (fw *FileWriter) Bytes() []byte {
+ return fw.mw.Bytes()
+}
+
- func (fw *FileWriter) Pos() uint64 {
- return fw.pos
- }
-@@ -304,7 +311,7 @@ func (fw *FileWriter) WriteAt(buf []byte, pos uint64)
error {
+ func (fw *FileWriter) Write(bufs ...[]byte) error {
+ for _, b := range bufs {
+ n, err := fw.fbuf.Write(b)
+@@ -320,7 +327,7 @@
if err := fw.Flush(); err != nil {
return err
}
@@ -624,7 +682,7 @@ index 29295c45f..451c80582 100644
return err
}
-@@ -326,7 +333,7 @@ func (fw *FileWriter) Close() error {
+@@ -342,7 +349,7 @@
if err := fw.Flush(); err != nil {
return err
}
@@ -633,7 +691,7 @@ index 29295c45f..451c80582 100644
return err
}
return fw.f.Close()
-@@ -987,11 +994,11 @@ func (w *Writer) writePostings() error {
+@@ -1039,11 +1046,11 @@
if err := w.fP.Flush(); err != nil {
return err
}
Index: Makefile
===================================================================
RCS file: /cvs/ports/sysutils/prometheus/Makefile,v
diff -u -p -r1.23 Makefile
--- Makefile 25 Sep 2023 17:07:36 -0000 1.23
+++ Makefile 7 Mar 2026 15:56:42 -0000
@@ -1,6 +1,6 @@
COMMENT = systems monitoring and alerting toolkit
-V = 2.37.9
+V = 2.53.5
GH_ACCOUNT = prometheus
GH_PROJECT = prometheus
GH_TAGNAME = v${V}
Index: distinfo
===================================================================
RCS file: /cvs/ports/sysutils/prometheus/distinfo,v
diff -u -p -r1.12 distinfo
--- distinfo 6 Sep 2023 10:28:49 -0000 1.12
+++ distinfo 7 Mar 2026 15:56:42 -0000
@@ -1,6 +1,6 @@
-SHA256 (prometheus-2.37.9.tar.gz) = gSoQplOidWqzAzS9TPBmH5TepeWUw3LTPRNwQHRgpGo=
-SHA256 (prometheus-vendor-2.37.9.tar.gz) = ea+tEdN2yBEMBYY78U6tPOLI7uorbEhNL3o5/JTxaPI=
-SHA256 (prometheus-web-ui-2.37.9.tar.gz) = 2z6Ohg/dUEwQ5NxTn1wfxwVrKOPJGAWgSXNxb2lX4MA=
-SIZE (prometheus-2.37.9.tar.gz) = 6048911
-SIZE (prometheus-vendor-2.37.9.tar.gz) = 11758451
-SIZE (prometheus-web-ui-2.37.9.tar.gz) = 2390133
+SHA256 (prometheus-2.53.5.tar.gz) = 3ulsQxSyfWLL9Cy6faJccx0+kagkEsIviLKICOC4qYc=
+SHA256 (prometheus-vendor-2.53.5.tar.gz) = Ib7Qstt7Pk+9c2ypzmILnGiDUaamdFvijmqWTLLjfTk=
+SHA256 (prometheus-web-ui-2.53.5.tar.gz) = QD0m3gyT3HAtI/mtYYiF6J+2RgAz4a7qLghC3VV33dM=
+SIZE (prometheus-2.53.5.tar.gz) = 6226039
+SIZE (prometheus-vendor-2.53.5.tar.gz) = 15356568
+SIZE (prometheus-web-ui-2.53.5.tar.gz) = 2438498
Index: patches/patch-Makefile
===================================================================
RCS file: /cvs/ports/sysutils/prometheus/patches/patch-Makefile,v
diff -u -p -r1.7 patch-Makefile
--- patches/patch-Makefile 28 Feb 2023 17:54:21 -0000 1.7
+++ patches/patch-Makefile 7 Mar 2026 15:56:42 -0000
@@ -3,7 +3,7 @@ The react build is provided via extra di
Index: Makefile
--- Makefile.orig
+++ Makefile
-@@ -83,7 +83,7 @@ ui-lint:
+@@ -67,7 +67,7 @@ ui-lint:
cd $(UI_PATH) && npm run lint
.PHONY: assets
@@ -12,12 +12,12 @@ Index: Makefile
.PHONY: assets-compress
assets-compress: assets
-@@ -124,7 +124,7 @@ plugins/plugins.go: plugins.yml plugins/generate.go
+@@ -139,7 +139,7 @@ plugins/plugins.go: plugins.yml plugins/generate.go
plugins: plugins/plugins.go
.PHONY: build
--build: assets npm_licenses assets-compress common-build plugins
-+build: assets-compress common-build plugins
+-build: assets npm_licenses assets-compress plugins common-build
++build: assets-compress plugins common-build
.PHONY: bench_tsdb
bench_tsdb: $(PROMU)
Index: patches/patch-Makefile_common
===================================================================
RCS file: /cvs/ports/sysutils/prometheus/patches/patch-Makefile_common,v
diff -u -p -r1.7 patch-Makefile_common
--- patches/patch-Makefile_common 28 Feb 2023 17:54:21 -0000 1.7
+++ patches/patch-Makefile_common 7 Mar 2026 15:56:42 -0000
@@ -3,8 +3,7 @@ Don't fetch promu form internet. This is
Index: Makefile.common
--- Makefile.common.orig
+++ Makefile.common
-@@ -232,11 +232,7 @@ common-docker-manifest:
- promu: $(PROMU)
+@@ -243,11 +243,7 @@ promu: $(PROMU)
$(PROMU):
- $(eval PROMU_TMP := $(shell mktemp -d))
Index: patches/patch-_promu_yml
===================================================================
RCS file: /cvs/ports/sysutils/prometheus/patches/patch-_promu_yml,v
diff -u -p -r1.6 patch-_promu_yml
--- patches/patch-_promu_yml 6 Sep 2023 10:28:49 -0000 1.6
+++ patches/patch-_promu_yml 7 Mar 2026 15:56:42 -0000
@@ -3,18 +3,18 @@ Don't include user and hostname into bui
Index: .promu.yml
--- .promu.yml.orig
+++ .promu.yml
-@@ -16,13 +16,13 @@ build:
- - builtinassets
+@@ -18,12 +18,13 @@
windows:
- builtinassets
-- flags: -a
-+ flags: -v -a
- ldflags: |
+ - stringlabels
+- ldflags: |
- -X github.com/prometheus/common/version.Version={{.Version}}
- -X github.com/prometheus/common/version.Revision={{.Revision}}
- -X github.com/prometheus/common/version.Branch={{.Branch}}
- -X github.com/prometheus/common/version.BuildUser={{user}}@{{host}}
- -X github.com/prometheus/common/version.BuildDate={{date "20060102-15:04:05"}}
++ flags: -v
++ ldflags: |
+ -X github.com/prometheus/prometheus/vendor/github.com/prometheus/common/version.Version={{.Version}}
+ -X github.com/prometheus/prometheus/vendor/github.com/prometheus/common/version.Revision={{.Revision}}
+ -X github.com/prometheus/prometheus/vendor/github.com/prometheus/common/version.Branch={{.Branch}}
Index: patches/patch-mmap_openbsd
===================================================================
RCS file: /cvs/ports/sysutils/prometheus/patches/patch-mmap_openbsd,v
diff -u -p -r1.3 patch-mmap_openbsd
--- patches/patch-mmap_openbsd 15 Jun 2023 08:52:07 -0000 1.3
+++ patches/patch-mmap_openbsd 7 Mar 2026 15:56:42 -0000
@@ -3,35 +3,42 @@ and https://github.com/prometheus/promet
to make tsdb only use mmap and work around missing UBC support.
diff --git go.mod go.mod
-index 39c3fcb5b..760b39a8b 100644
--- go.mod
+++ go.mod
-@@ -13,7 +13,6 @@ require (
- github.com/dgryski/go-sip13 v0.0.0-20200911182023-62edffca9245
- github.com/digitalocean/godo v1.81.0
- github.com/docker/docker v20.10.24+incompatible
+@@ -17,7 +17,6 @@
+ github.com/dennwc/varint v1.0.0
+ github.com/digitalocean/godo v1.117.0
+ github.com/docker/docker v26.1.5+incompatible
- github.com/edsrzf/mmap-go v1.1.0
- github.com/envoyproxy/go-control-plane v0.10.3
- github.com/envoyproxy/protoc-gen-validate v0.6.7
- github.com/fsnotify/fsnotify v1.5.4
+ github.com/envoyproxy/go-control-plane/envoy v1.32.4
+ github.com/envoyproxy/protoc-gen-validate v1.2.1
+ github.com/facette/natsort v0.0.0-20181210072756-2cd4dd1e2dcb
+
diff --git go.sum go.sum
-index e7aee4a9b..6b323945d 100644
--- go.sum
+++ go.sum
-@@ -202,8 +202,6 @@ github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5m
+@@ -160,8 +160,6 @@
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
-github.com/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ=
-github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q=
- github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
- github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
- github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+ github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
+ github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+ github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
+
diff --git promql/query_logger.go promql/query_logger.go
-index 716e7749b..8eb1afce0 100644
--- promql/query_logger.go
+++ promql/query_logger.go
-@@ -22,13 +22,13 @@ import (
+@@ -16,7 +16,6 @@
+ import (
+ "context"
+ "encoding/json"
+- "errors"
+ "fmt"
+ "io"
+ "os"
+@@ -25,16 +24,15 @@
"time"
"unicode/utf8"
@@ -46,43 +53,70 @@ index 716e7749b..8eb1afce0 100644
+ mw *fileutil.MmapWriter
getNextIndex chan int
logger log.Logger
+- closer io.Closer
maxConcurrent int
-@@ -81,7 +81,7 @@ func logUnfinishedQueries(filename string, filesize int, logger log.Logger) {
+ }
+
+@@ -87,24 +85,7 @@
}
}
--func getMMapedFile(filename string, filesize int, logger log.Logger) ([]byte, error) {
+-type mmapedFile struct {
+- f io.Closer
+- m mmap.MMap
+-}
+-
+-func (f *mmapedFile) Close() error {
+- err := f.m.Unmap()
+- if err != nil {
+- err = fmt.Errorf("mmapedFile: unmapping: %w", err)
+- }
+- if fErr := f.f.Close(); fErr != nil {
+- return errors.Join(fmt.Errorf("close mmapedFile.f: %w", fErr), err)
+- }
+-
+- return err
+-}
+-
+-func getMMapedFile(filename string, filesize int, logger log.Logger) ([]byte, io.Closer, error) {
+func getMMapedFile(filename string, filesize int, logger log.Logger) (*fileutil.MmapWriter, error) {
file, err := os.OpenFile(filename, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0o666)
if err != nil {
absPath, pathErr := filepath.Abs(filename)
-@@ -92,19 +92,13 @@ func getMMapedFile(filename string, filesize int, logger log.Logger) ([]byte, er
- return nil, err
+@@ -112,24 +93,16 @@
+ absPath = filename
+ }
+ level.Error(logger).Log("msg", "Error opening query log file", "file", absPath, "err", err)
+- return nil, nil, err
++ return nil, err
}
- err = file.Truncate(int64(filesize))
-- if err != nil {
++ mw, err := fileutil.NewMmapWriterWithSize(file, filesize)
+ if err != nil {
+- file.Close()
- level.Error(logger).Log("msg", "Error setting filesize.", "filesize", filesize, "err", err)
-- return nil, err
+- return nil, nil, err
- }
-
- fileAsBytes, err := mmap.Map(file, mmap.RDWR, 0)
-+ mw, err := fileutil.NewMmapWriterWithSize(file, filesize)
- if err != nil {
+- if err != nil {
+- file.Close()
level.Error(logger).Log("msg", "Failed to mmap", "file", filename, "Attempted size", filesize, "err", err)
- return nil, err
+- return nil, nil, err
++ return nil, err
}
-- return fileAsBytes, err
+- return fileAsBytes, &mmapedFile{f: file, m: fileAsBytes}, err
+ return mw, err
}
func NewActiveQueryTracker(localStoragePath string, maxConcurrent int, logger log.Logger) *ActiveQueryTracker {
-@@ -116,14 +110,17 @@ func NewActiveQueryTracker(localStoragePath string, maxConcurrent int, logger lo
+@@ -141,15 +114,17 @@
filename, filesize := filepath.Join(localStoragePath, "queries.active"), 1+maxConcurrent*entrySize
logUnfinishedQueries(filename, filesize, logger)
-- fileAsBytes, err := getMMapedFile(filename, filesize, logger)
+- fileAsBytes, closer, err := getMMapedFile(filename, filesize, logger)
+ mw, err := getMMapedFile(filename, filesize, logger)
if err != nil {
panic("Unable to create mmap-ed active query log")
@@ -95,11 +129,12 @@ index 716e7749b..8eb1afce0 100644
+ }
activeQueryTracker := ActiveQueryTracker{
- mmapedFile: fileAsBytes,
+- closer: closer,
+ mw: mw,
getNextIndex: make(chan int, maxConcurrent),
logger: logger,
maxConcurrent: maxConcurrent,
-@@ -180,19 +177,27 @@ func (tracker ActiveQueryTracker) GetMaxConcurrent() int {
+@@ -206,19 +181,27 @@
}
func (tracker ActiveQueryTracker) Delete(insertIndex int) {
@@ -131,11 +166,26 @@ index 716e7749b..8eb1afce0 100644
return i, nil
case <-ctx.Done():
return 0, ctx.Err()
+@@ -227,11 +210,11 @@
+
+ // Close closes tracker.
+ func (tracker *ActiveQueryTracker) Close() error {
+- if tracker == nil || tracker.closer == nil {
++ if tracker == nil || tracker.mw == nil {
+ return nil
+ }
+- if err := tracker.closer.Close(); err != nil {
+- return fmt.Errorf("close ActiveQueryTracker.closer: %w", err)
++ if err := tracker.mw.Close(); err != nil {
++ return fmt.Errorf("close ActiveQueryTracker.mw: %w", err)
+ }
+ return nil
+ }
+
diff --git promql/query_logger_test.go promql/query_logger_test.go
-index ad76fb992..bd92b81af 100644
--- promql/query_logger_test.go
+++ promql/query_logger_test.go
-@@ -19,13 +19,22 @@ import (
+@@ -20,13 +20,20 @@
"testing"
"github.com/grafana/regexp"
@@ -145,12 +195,10 @@ index ad76fb992..bd92b81af 100644
func TestQueryLogging(t *testing.T) {
- fileAsBytes := make([]byte, 4096)
-+ file, err := ioutil.TempFile("", "mmapedFile")
++ dir := t.TempDir()
++ file, err := os.CreateTemp(dir, "mmapedFile")
+ require.NoError(t, err)
+
-+ filename := file.Name()
-+ defer os.Remove(filename)
-+
+ mw, err := fileutil.NewMmapWriterWithSize(file, 4096)
+ require.NoError(t, err)
+
@@ -160,7 +208,7 @@ index ad76fb992..bd92b81af 100644
logger: nil,
getNextIndex: make(chan int, 4),
}
-@@ -45,6 +54,7 @@ func TestQueryLogging(t *testing.T) {
+@@ -46,6 +53,7 @@
`^{"query":"","timestamp_sec":\d+}\x00*,$`,
`^{"query":"SpecialCharQuery{host=\\"2132132\\", id=123123}","timestamp_sec":\d+}\x00*,$`,
}
@@ -168,17 +216,15 @@ index ad76fb992..bd92b81af 100644
// Check for inserts of queries.
for i := 0; i < 4; i++ {
-@@ -67,9 +77,17 @@ func TestQueryLogging(t *testing.T) {
+@@ -68,9 +76,15 @@
}
func TestIndexReuse(t *testing.T) {
- queryBytes := make([]byte, 1+3*entrySize)
-+ file, err := ioutil.TempFile("", "mmapedFile")
++ dir := t.TempDir()
++ file, err := os.CreateTemp(dir, "mmapedFile")
+ require.NoError(t, err)
+
-+ filename := file.Name()
-+ defer os.Remove(filename)
-+
+ mw, err := fileutil.NewMmapWriterWithSize(file, 1+3*entrySize)
+ require.NoError(t, err)
+
@@ -188,7 +234,7 @@ index ad76fb992..bd92b81af 100644
logger: nil,
getNextIndex: make(chan int, 3),
}
-@@ -91,6 +109,7 @@ func TestIndexReuse(t *testing.T) {
+@@ -92,6 +106,7 @@
`^{"query":"ThisShouldBeInsertedAtIndex2","timestamp_sec":\d+}\x00*,$`,
`^{"query":"TestQuery3","timestamp_sec":\d+}\x00*,$`,
}
@@ -196,26 +242,27 @@ index ad76fb992..bd92b81af 100644
// Check all bytes and verify new query was inserted at index 2
for i := 0; i < 3; i++ {
-@@ -110,10 +129,12 @@ func TestMMapFile(t *testing.T) {
- filename := file.Name()
- defer os.Remove(filename)
+@@ -109,10 +124,12 @@
+ fpath := filepath.Join(dir, "mmapedFile")
+ const data = "ab"
-- fileAsBytes, err := getMMapedFile(filename, 2, nil)
-+ mw, err := getMMapedFile(filename, 2, nil)
+- fileAsBytes, closer, err := getMMapedFile(fpath, 2, nil)
++ mw, err := getMMapedFile(fpath, 2, nil)
+ require.NoError(t, err)
-
-+ fileAsBytes := mw.Bytes()
-+ _, err = mw.Write([]byte("ab"))
++
++ _, err = mw.Write([]byte(data))
require.NoError(t, err)
-- copy(fileAsBytes, "ab")
+- copy(fileAsBytes, data)
+- require.NoError(t, closer.Close())
++ require.NoError(t, mw.Close())
- f, err := os.Open(filename)
+ f, err := os.Open(fpath)
require.NoError(t, err)
+
diff --git tsdb/fileutil/mmap.go tsdb/fileutil/mmap.go
-index 4dbca4f97..e1c522472 100644
--- tsdb/fileutil/mmap.go
+++ tsdb/fileutil/mmap.go
-@@ -20,8 +20,31 @@ import (
+@@ -19,8 +19,31 @@
)
type MmapFile struct {
@@ -236,27 +283,27 @@ index 4dbca4f97..e1c522472 100644
+ if size <= 0 {
+ info, err := f.Stat()
+ if err != nil {
-+ return nil, errors.Wrap(err, "stat")
++ return nil, fmt.Errorf("stat: %w", err)
+ }
+ size = int(info.Size())
+ }
+
+ b, err := mmapRw(f, size)
+ if err != nil {
-+ return nil, errors.Wrapf(err, "mmap, size %d", size)
++ return nil, fmt.Errorf("mmap, size %d: %w", size, err)
+ }
+ return &MmapFile{f: f, b: b, rw: true}, nil
}
func OpenMmapFile(path string) (*MmapFile, error) {
-@@ -46,22 +69,53 @@ func OpenMmapFileWithSize(path string, size int) (mf *MmapFile, retErr error) {
+@@ -45,22 +68,53 @@
size = int(info.Size())
}
- b, err := mmap(f, size)
+ b, err := mmapRo(f, size)
if err != nil {
- return nil, errors.Wrapf(err, "mmap, size %d", size)
+ return nil, fmt.Errorf("mmap, size %d: %w", size, err)
}
+ return &MmapFile{f: f, b: b, closeFile: true}, nil
+}
@@ -265,11 +312,11 @@ index 4dbca4f97..e1c522472 100644
+func (f *MmapFile) resize(size int) error {
+ err := f.Sync()
+ if err != nil {
-+ return errors.Wrap(err, "resize sync")
++ return fmt.Errorf("resize sync: %w", err)
+ }
+ err = munmap(f.b)
+ if err != nil {
-+ return errors.Wrap(err, "resize munmap")
++ return fmt.Errorf("resize munmap: %w", err)
+ }
+ var b []byte
+ if f.rw {
@@ -278,7 +325,7 @@ index 4dbca4f97..e1c522472 100644
+ b, err = mmapRo(f.f, size)
+ }
+ if err != nil {
-+ return errors.Wrap(err, "resize mmap")
++ return fmt.Errorf("resize mmap: %w", err)
+ }
+ f.b = b
+ return nil
@@ -296,22 +343,22 @@ index 4dbca4f97..e1c522472 100644
if err0 != nil {
- return err0
-+ return errors.Wrap(err0, "close sync")
++ return fmt.Errorf("close sync: %w", err0)
+ }
+ if err1 != nil {
-+ return errors.Wrap(err1, "close munmap")
++ return fmt.Errorf("close munmap: %w", err1)
+ }
+ if err2 != nil {
-+ return errors.Wrap(err2, "close file")
++ return fmt.Errorf("close file: %w", err2)
}
- return err1
+ return nil
}
func (f *MmapFile) File() *os.File {
+
diff --git tsdb/fileutil/mmap_openbsd.go tsdb/fileutil/mmap_openbsd.go
new file mode 100644
-index 000000000..39b590ee5
--- /dev/null
+++ tsdb/fileutil/mmap_openbsd.go
@@ -0,0 +1,25 @@
@@ -340,9 +387,9 @@ index 000000000..39b590ee5
+func (f *MmapFile) Sync() error {
+ return unix.Msync(f.b, unix.MS_SYNC)
+}
+
diff --git tsdb/fileutil/mmap_sync.go tsdb/fileutil/mmap_sync.go
new file mode 100644
-index 000000000..31fd98e6d
--- /dev/null
+++ tsdb/fileutil/mmap_sync.go
@@ -0,0 +1,21 @@
@@ -367,11 +414,20 @@ index 000000000..31fd98e6d
+func (f *MmapFile) Sync() error {
+ return nil
+}
+
diff --git tsdb/fileutil/mmap_unix.go tsdb/fileutil/mmap_unix.go
-index 1fd7f48ff..c83a32011 100644
--- tsdb/fileutil/mmap_unix.go
+++ tsdb/fileutil/mmap_unix.go
-@@ -22,10 +22,14 @@ import (
+@@ -11,7 +11,7 @@
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+-//go:build !windows && !plan9 && !js
++//go:build !windows && !plan9 && !js && !wasm
+
+ package fileutil
+
+@@ -21,10 +21,14 @@
"golang.org/x/sys/unix"
)
@@ -387,11 +443,11 @@ index 1fd7f48ff..c83a32011 100644
func munmap(b []byte) (err error) {
return unix.Munmap(b)
}
+
diff --git tsdb/fileutil/mmap_windows.go tsdb/fileutil/mmap_windows.go
-index b94226412..9caf36622 100644
--- tsdb/fileutil/mmap_windows.go
+++ tsdb/fileutil/mmap_windows.go
-@@ -19,7 +19,26 @@ import (
+@@ -19,7 +19,26 @@
"unsafe"
)
@@ -419,9 +475,9 @@ index b94226412..9caf36622 100644
low, high := uint32(size), uint32(size>>32)
h, errno := syscall.CreateFileMapping(syscall.Handle(f.Fd()), nil, syscall.PAGE_READONLY, high, low, nil)
if h == 0 {
+
diff --git tsdb/fileutil/writer.go tsdb/fileutil/writer.go
new file mode 100644
-index 000000000..86c1504e4
--- /dev/null
+++ tsdb/fileutil/writer.go
@@ -0,0 +1,156 @@
@@ -581,11 +637,11 @@ index 000000000..86c1504e4
+ err = mw.Sync()
+ return
+}
+
diff --git tsdb/index/index.go tsdb/index/index.go
-index 29295c45f..451c80582 100644
--- tsdb/index/index.go
+++ tsdb/index/index.go
-@@ -257,6 +257,7 @@ func (w *Writer) addPadding(size int) error {
+@@ -273,6 +273,7 @@
type FileWriter struct {
f *os.File
fbuf *bufio.Writer
@@ -593,7 +649,7 @@ index 29295c45f..451c80582 100644
pos uint64
name string
}
-@@ -266,14 +267,20 @@ func NewFileWriter(name string) (*FileWriter, error) {
+@@ -282,9 +283,11 @@
if err != nil {
return nil, err
}
@@ -606,16 +662,18 @@ index 29295c45f..451c80582 100644
pos: 0,
name: name,
}, nil
+@@ -294,6 +297,10 @@
+ return fw.pos
}
+func (fw *FileWriter) Bytes() []byte {
+ return fw.mw.Bytes()
+}
+
- func (fw *FileWriter) Pos() uint64 {
- return fw.pos
- }
-@@ -304,7 +311,7 @@ func (fw *FileWriter) WriteAt(buf []byte, pos uint64) error {
+ func (fw *FileWriter) Write(bufs ...[]byte) error {
+ for _, b := range bufs {
+ n, err := fw.fbuf.Write(b)
+@@ -320,7 +327,7 @@
if err := fw.Flush(); err != nil {
return err
}
@@ -624,7 +682,7 @@ index 29295c45f..451c80582 100644
return err
}
-@@ -326,7 +333,7 @@ func (fw *FileWriter) Close() error {
+@@ -342,7 +349,7 @@
if err := fw.Flush(); err != nil {
return err
}
@@ -633,7 +691,7 @@ index 29295c45f..451c80582 100644
return err
}
return fw.f.Close()
-@@ -987,11 +994,11 @@ func (w *Writer) writePostings() error {
+@@ -1039,11 +1046,11 @@
if err := w.fP.Flush(); err != nil {
return err
}