From: Atanas Vladimirov Subject: Re: Update Prometheus to 2.53.5 To: Ports Date: Wed, 18 Mar 2026 17:41:27 +0200 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 }