From a81fe5d7e1be05ef5cac1fb1c1ae03aa95b3ee14 Mon Sep 17 00:00:00 2001 From: souravagrawal Date: Tue, 7 Jan 2025 20:12:24 +0530 Subject: [PATCH] Disable jetstream if disk permission error while writing raft state --- server/jetstream.go | 11 +++++++++++ server/raft.go | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/server/jetstream.go b/server/jetstream.go index a0b31cd638..1ba3342408 100644 --- a/server/jetstream.go +++ b/server/jetstream.go @@ -3034,3 +3034,14 @@ func fixCfgMirrorWithDedupWindow(cfg *StreamConfig) { cfg.Duplicates = 0 } } + +func (s *Server) handleWritePermissionError() { + //TODO Check if we should add s.jetStreamOOSPending in condition + if s.JetStreamEnabled() { + s.Errorf("file system permission denied while writing, disabling jetstream") + + go s.DisableJetStream() + + //TODO Send respective advisory if needed, same as in handleOutOfSpace + } +} diff --git a/server/raft.go b/server/raft.go index 5ab37facfd..ee10c71e12 100644 --- a/server/raft.go +++ b/server/raft.go @@ -3978,6 +3978,10 @@ func (n *raft) setWriteErrLocked(err error) { n.error("Critical write error: %v", err) n.werr = err + if os.IsPermission(err) { + go n.s.handleWritePermissionError() + } + if isOutOfSpaceErr(err) { // For now since this can be happening all under the covers, we will call up and disable JetStream. go n.s.handleOutOfSpace(nil)