Since 2.37 is a LTS branch I think it is a good idea to track this branch
for now. Now officially the 2.37 has no OpenBSD support (but that also
applies to 2.38). The mmap patch should make prometheus work well enough
on OpenBSD (at least as well as the 2.36.2 version).

This updates the mmap patch to apply cleany. The patch is base on
https://github.com/prometheus/prometheus/pull/9085

Seems to work for me
-- 
:wq Claudio

Index: Makefile
===================================================================
RCS file: /cvs/ports/sysutils/prometheus/Makefile,v
retrieving revision 1.15
diff -u -p -r1.15 Makefile
--- Makefile    8 Aug 2022 12:51:39 -0000       1.15
+++ Makefile    13 Sep 2022 08:47:27 -0000
@@ -1,10 +1,9 @@
 COMMENT =              systems monitoring and alerting toolkit
 
-V =                    2.36.2
+V =                    2.37.1
 GH_ACCOUNT =           prometheus
 GH_PROJECT =           prometheus
 GH_TAGNAME =           v${V}
-REVISION =             0
 
 CATEGORIES =           sysutils
 
Index: distinfo
===================================================================
RCS file: /cvs/ports/sysutils/prometheus/distinfo,v
retrieving revision 1.6
diff -u -p -r1.6 distinfo
--- distinfo    28 Jun 2022 19:23:03 -0000      1.6
+++ distinfo    13 Sep 2022 08:49:38 -0000
@@ -1,6 +1,6 @@
-SHA256 (prometheus-2.36.2.tar.gz) = 
aDhtNHthgGVlxEi0jHj/NJiT8m9jwKvQSnhtp0PdFds=
-SHA256 (prometheus-vendor-2.36.2.tar.gz) = 
biPiNBWhDWojsm67ZNlVEGUVOwZ/rZ7KAdTjbJ8RU70=
-SHA256 (prometheus-web-ui-2.36.2.tar.gz) = 
ckcy/e+OfebUwWaGCDUH1k1DLoJLQfPPcuDXD/Ftx74=
-SIZE (prometheus-2.36.2.tar.gz) = 6021280
-SIZE (prometheus-vendor-2.36.2.tar.gz) = 11345259
-SIZE (prometheus-web-ui-2.36.2.tar.gz) = 4388423
+SHA256 (prometheus-2.37.1.tar.gz) = 
8ON5hpfzQ7HDQqqPWdF5inLdZyBwHVX1KR6gMQsUI7Y=
+SHA256 (prometheus-vendor-2.37.1.tar.gz) = 
JeQkPS5dpt8n5f0JmJ+ZvSPAvpcQ7j8LbVWj5dJ5hLQ=
+SHA256 (prometheus-web-ui-2.37.1.tar.gz) = 
Uu9uO0lk79k7nu4Yx/wo+tv4FVu5nl+TUSF1w8vUoaM=
+SIZE (prometheus-2.37.1.tar.gz) = 6049188
+SIZE (prometheus-vendor-2.37.1.tar.gz) = 11627435
+SIZE (prometheus-web-ui-2.37.1.tar.gz) = 4333534
Index: patches/patch-Makefile
===================================================================
RCS file: /cvs/ports/sysutils/prometheus/patches/patch-Makefile,v
retrieving revision 1.5
diff -u -p -r1.5 patch-Makefile
--- patches/patch-Makefile      28 Jun 2022 19:23:04 -0000      1.5
+++ patches/patch-Makefile      13 Sep 2022 09:17:55 -0000
@@ -3,7 +3,7 @@ The react build is provided via extra di
 Index: Makefile
 --- Makefile.orig
 +++ Makefile
-@@ -60,7 +60,7 @@ ui-lint:
+@@ -66,7 +66,7 @@ ui-lint:
        cd $(UI_PATH) && npm run lint
  
  .PHONY: assets
@@ -12,7 +12,7 @@ Index: Makefile
  
  .PHONY: assets-compress
  assets-compress: assets
-@@ -101,7 +101,7 @@ plugins/plugins.go: plugins.yml plugins/generate.go
+@@ -107,7 +107,7 @@ plugins/plugins.go: plugins.yml plugins/generate.go
  plugins: plugins/plugins.go
  
  .PHONY: build
Index: patches/patch-Makefile_common
===================================================================
RCS file: /cvs/ports/sysutils/prometheus/patches/patch-Makefile_common,v
retrieving revision 1.5
diff -u -p -r1.5 patch-Makefile_common
--- patches/patch-Makefile_common       28 Jun 2022 19:23:04 -0000      1.5
+++ patches/patch-Makefile_common       13 Sep 2022 09:17:55 -0000
@@ -3,7 +3,7 @@ Don't fetch promu form internet. This is
 Index: Makefile.common
 --- Makefile.common.orig
 +++ Makefile.common
-@@ -276,11 +276,7 @@ common-docker-manifest:
+@@ -229,11 +229,7 @@ common-docker-manifest:
  promu: $(PROMU)
  
  $(PROMU):
Index: patches/patch-mmap_openbsd
===================================================================
RCS file: /cvs/ports/sysutils/prometheus/patches/patch-mmap_openbsd,v
retrieving revision 1.1
diff -u -p -r1.1 patch-mmap_openbsd
--- patches/patch-mmap_openbsd  28 Jun 2022 19:23:04 -0000      1.1
+++ patches/patch-mmap_openbsd  13 Sep 2022 07:45:14 -0000
@@ -1,21 +1,24 @@
-Diff from https://github.com/prometheus/prometheus/issues/8877
-to make tsdb only use mmap and not hit missing UBC issues.
+Diff from https://github.com/prometheus/prometheus/issues/8799
+and https://github.com/prometheus/prometheus/pull/9085
+to make tsdb only use mmap and work around missing UBC support.
 
-Index: go.mod
---- go.mod.orig
+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.80.0
-       github.com/docker/docker v20.10.16+incompatible
+       github.com/digitalocean/godo v1.81.0
+       github.com/docker/docker v20.10.17+incompatible
 -      github.com/edsrzf/mmap-go v1.1.0
-       github.com/envoyproxy/go-control-plane 
v0.10.2-0.20220325020618-49ff273808a1
+       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
-Index: go.sum
---- go.sum.orig
+diff --git go.sum go.sum
+index e7aee4a9b..6b323945d 100644
+--- go.sum
 +++ go.sum
-@@ -195,8 +195,6 @@ github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+
+@@ -202,8 +202,6 @@ github.com/eapache/go-resiliency v1.1.0/go.mod 
h1:kFI+JgMyC7bLPUVY133qvEBtVayf5m
  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=
@@ -23,9 +26,10 @@ Index: go.sum
 -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 
h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk=
-Index: promql/query_logger.go
---- promql/query_logger.go.orig
+ github.com/emicklei/go-restful v2.9.5+incompatible/go.mod 
h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+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 (
        "time"
@@ -43,7 +47,7 @@ Index: promql/query_logger.go
        getNextIndex  chan int
        logger        log.Logger
        maxConcurrent int
-@@ -80,7 +80,7 @@ func logUnfinishedQueries(filename string, filesize in
+@@ -81,7 +81,7 @@ func logUnfinishedQueries(filename string, filesize int, 
logger log.Logger) {
        }
  }
  
@@ -52,19 +56,19 @@ Index: promql/query_logger.go
        file, err := os.OpenFile(filename, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 
0o666)
        if err != nil {
                absPath, pathErr := filepath.Abs(filename)
-@@ -91,19 +91,13 @@ func getMMapedFile(filename string, filesize int, logg
+@@ -92,19 +92,13 @@ func getMMapedFile(filename string, filesize int, logger 
log.Logger) ([]byte, er
                return nil, err
        }
  
 -      err = file.Truncate(int64(filesize))
-+      mw, err := fileutil.NewMmapWriterWithSize(file, filesize)
-       if err != nil {
+-      if err != nil {
 -              level.Error(logger).Log("msg", "Error setting filesize.", 
"filesize", filesize, "err", err)
 -              return nil, err
 -      }
 -
 -      fileAsBytes, err := mmap.Map(file, mmap.RDWR, 0)
--      if err != nil {
++      mw, err := fileutil.NewMmapWriterWithSize(file, filesize)
+       if err != nil {
                level.Error(logger).Log("msg", "Failed to mmap", "file", 
filename, "Attempted size", filesize, "err", err)
                return nil, err
        }
@@ -74,7 +78,7 @@ Index: promql/query_logger.go
  }
  
  func NewActiveQueryTracker(localStoragePath string, maxConcurrent int, logger 
log.Logger) *ActiveQueryTracker {
-@@ -115,14 +109,17 @@ func NewActiveQueryTracker(localStoragePath string, ma
+@@ -116,14 +110,17 @@ func NewActiveQueryTracker(localStoragePath string, 
maxConcurrent int, logger lo
        filename, filesize := filepath.Join(localStoragePath, 
"queries.active"), 1+maxConcurrent*entrySize
        logUnfinishedQueries(filename, filesize, logger)
  
@@ -95,7 +99,7 @@ Index: promql/query_logger.go
                getNextIndex:  make(chan int, maxConcurrent),
                logger:        logger,
                maxConcurrent: maxConcurrent,
-@@ -179,19 +176,27 @@ func (tracker ActiveQueryTracker) GetMaxConcurrent() i
+@@ -180,19 +177,27 @@ func (tracker ActiveQueryTracker) GetMaxConcurrent() int 
{
  }
  
  func (tracker ActiveQueryTracker) Delete(insertIndex int) {
@@ -127,8 +131,9 @@ Index: promql/query_logger.go
                return i, nil
        case <-ctx.Done():
                return 0, ctx.Err()
-Index: promql/query_logger_test.go
---- promql/query_logger_test.go.orig
+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 (
        "testing"
@@ -206,10 +211,11 @@ Index: promql/query_logger_test.go
  
        f, err := os.Open(filename)
        require.NoError(t, err)
-Index: tsdb/fileutil/mmap.go
---- tsdb/fileutil/mmap.go.orig
+diff --git tsdb/fileutil/mmap.go tsdb/fileutil/mmap.go
+index 4dbca4f97..e1c522472 100644
+--- tsdb/fileutil/mmap.go
 +++ tsdb/fileutil/mmap.go
-@@ -20,10 +20,33 @@ import (
+@@ -20,8 +20,31 @@ import (
  )
  
  type MmapFile struct {
@@ -219,8 +225,8 @@ Index: tsdb/fileutil/mmap.go
 +      b         []byte
 +      rw        bool
 +      closeFile bool
- }
- 
++}
++
 +func OpenRwMmapFromFile(f *os.File, size int) (mf *MmapFile, retErr error) {
 +      defer func() {
 +              if retErr != nil {
@@ -240,12 +246,10 @@ Index: tsdb/fileutil/mmap.go
 +              return nil, errors.Wrapf(err, "mmap, size %d", size)
 +      }
 +      return &MmapFile{f: f, b: b, rw: true}, nil
-+}
-+
- func OpenMmapFile(path string) (*MmapFile, error) {
-       return OpenMmapFileWithSize(path, 0)
  }
-@@ -46,22 +69,53 @@ func OpenMmapFileWithSize(path string, size int) (mf *
+ 
+ func OpenMmapFile(path string) (*MmapFile, error) {
+@@ -46,22 +69,53 @@ func OpenMmapFileWithSize(path string, size int) (mf 
*MmapFile, retErr error) {
                size = int(info.Size())
        }
  
@@ -293,20 +297,22 @@ Index: tsdb/fileutil/mmap.go
        if err0 != nil {
 -              return err0
 +              return errors.Wrap(err0, "close sync")
-       }
--      return err1
++      }
 +      if err1 != nil {
 +              return errors.Wrap(err1, "close munmap")
 +      }
 +      if err2 != nil {
 +              return errors.Wrap(err2, "close file")
-+      }
+       }
+-      return err1
 +      return nil
  }
  
  func (f *MmapFile) File() *os.File {
-Index: tsdb/fileutil/mmap_openbsd.go
---- tsdb/fileutil/mmap_openbsd.go.orig
+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 @@
 +// Copyright 2021 The Prometheus Authors
@@ -334,8 +340,10 @@ Index: tsdb/fileutil/mmap_openbsd.go
 +func (f *MmapFile) Sync() error {
 +      return unix.Msync(f.b, unix.MS_SYNC)
 +}
-Index: tsdb/fileutil/mmap_sync.go
---- tsdb/fileutil/mmap_sync.go.orig
+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 @@
 +// Copyright 2021 The Prometheus Authors
@@ -359,25 +367,29 @@ Index: tsdb/fileutil/mmap_sync.go
 +func (f *MmapFile) Sync() error {
 +      return nil
 +}
-Index: tsdb/fileutil/mmap_unix.go
---- tsdb/fileutil/mmap_unix.go.orig
+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,8 +22,12 @@ import (
+@@ -22,10 +22,14 @@ import (
        "golang.org/x/sys/unix"
  )
  
 -func mmap(f *os.File, length int) ([]byte, error) {
 +func mmapRo(f *os.File, length int) ([]byte, error) {
        return unix.Mmap(int(f.Fd()), 0, length, unix.PROT_READ, 
unix.MAP_SHARED)
-+}
-+
-+func mmapRw(f *os.File, length int) ([]byte, error) {
-+      return unix.Mmap(int(f.Fd()), 0, length, 
unix.PROT_READ|unix.PROT_WRITE, unix.MAP_SHARED)
  }
  
++func mmapRw(f *os.File, length int) ([]byte, error) {
++      return unix.Mmap(int(f.Fd()), 0, length, 
unix.PROT_READ|unix.PROT_WRITE, unix.MAP_SHARED)
++}
++
  func munmap(b []byte) (err error) {
-Index: tsdb/fileutil/mmap_windows.go
---- tsdb/fileutil/mmap_windows.go.orig
+       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 (
        "unsafe"
@@ -407,8 +419,10 @@ Index: tsdb/fileutil/mmap_windows.go
        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 {
-Index: tsdb/fileutil/writer.go
---- tsdb/fileutil/writer.go.orig
+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 @@
 +// Copyright 2021 The Prometheus Authors
@@ -567,8 +581,9 @@ Index: tsdb/fileutil/writer.go
 +      err = mw.Sync()
 +      return
 +}
-Index: tsdb/index/index.go
---- tsdb/index/index.go.orig
+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 {
  type FileWriter struct {
@@ -600,7 +615,7 @@ Index: tsdb/index/index.go
  func (fw *FileWriter) Pos() uint64 {
        return fw.pos
  }
-@@ -304,7 +311,7 @@ func (fw *FileWriter) WriteAt(buf []byte, pos uint64) 
+@@ -304,7 +311,7 @@ func (fw *FileWriter) WriteAt(buf []byte, pos uint64) 
error {
        if err := fw.Flush(); err != nil {
                return err
        }

Reply via email to