From d550a2d85ae3e44986db6f3b412ba9c0805b26f5 Mon Sep 17 00:00:00 2001 From: Roman Khavronenko Date: Mon, 30 Oct 2023 10:52:57 +0100 Subject: [PATCH] lib/storage: log warning about RO mode only on state change (#5191) Before, vmstorage would log the same message each second producing excessive amount of logs. See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5159 Signed-off-by: hagen1778 --- docs/CHANGELOG.md | 2 ++ lib/storage/storage.go | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index e07343d56..554736e94 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -15,6 +15,8 @@ The following tip changes can be tested by building VictoriaMetrics components f ## v1.87.x long-time support release (LTS) +* BUGFIX: [vmstorage](https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html): log warning about switching to ReadOnly mode only on state change. Before, vmstorage would log this warning every 1s. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5159) for details. + ## [v1.87.10](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.87.10) Released at 2023-10-16 diff --git a/lib/storage/storage.go b/lib/storage/storage.go index 9ef67381d..5921dce07 100644 --- a/lib/storage/storage.go +++ b/lib/storage/storage.go @@ -625,9 +625,12 @@ func (s *Storage) startFreeDiskSpaceWatcher() { f := func() { freeSpaceBytes := fs.MustGetFreeSpace(s.path) if freeSpaceBytes < freeDiskSpaceLimitBytes { + if atomic.LoadUint32(&s.isReadOnly) == 0 { + // log notification only on state change + logger.Warnf("switching the storage at %s to read-only mode, since it has less than -storage.minFreeDiskSpaceBytes=%d of free space: %d bytes left", + s.path, freeDiskSpaceLimitBytes, freeSpaceBytes) + } // Switch the storage to readonly mode if there is no enough free space left at s.path - logger.Warnf("switching the storage at %s to read-only mode, since it has less than -storage.minFreeDiskSpaceBytes=%d of free space: %d bytes left", - s.path, freeDiskSpaceLimitBytes, freeSpaceBytes) atomic.StoreUint32(&s.isReadOnly, 1) return }