From be14687a9c862065ffcbd88eae250d9adde0a1fd Mon Sep 17 00:00:00 2001 From: Michael Eischer Date: Sat, 13 May 2023 21:50:39 +0200 Subject: [PATCH] Print fsync warning only once The repo.Handler is freshly instantiated for every request such that it forget that the fsync warning was already printed. Use a single instance in the Server instead. --- handlers.go | 3 +++ repo/repo.go | 5 ++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/handlers.go b/handlers.go index f1f3954..8163ccf 100644 --- a/handlers.go +++ b/handlers.go @@ -7,6 +7,7 @@ import ( "path" "path/filepath" "strings" + "sync" "github.com/restic/rest-server/quota" "github.com/restic/rest-server/repo" @@ -34,6 +35,7 @@ type Server struct { htpasswdFile *HtpasswdFile quotaManager *quota.Manager + fsyncWarning sync.Once } // MaxFolderDepth is the maxDepth param passed to splitURLPath. @@ -91,6 +93,7 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { QuotaManager: s.quotaManager, // may be nil PanicOnError: s.PanicOnError, NoVerifyUpload: s.NoVerifyUpload, + FsyncWarning: &s.fsyncWarning, } if s.Prometheus { opt.BlobMetricFunc = makeBlobMetricFunc(username, folderPath) diff --git a/repo/repo.go b/repo/repo.go index 0cae450..a1ad642 100644 --- a/repo/repo.go +++ b/repo/repo.go @@ -39,6 +39,7 @@ type Options struct { BlobMetricFunc BlobMetricFunc QuotaManager *quota.Manager + FsyncWarning *sync.Once } // DefaultDirMode is the file mode used for directory creation if not @@ -74,8 +75,6 @@ func New(path string, opt Options) (*Handler, error) { type Handler struct { path string // filesystem path of repo opt Options - - fsyncWarning sync.Once } // httpDefaultError write a HTTP error with the default description @@ -639,7 +638,7 @@ func (h *Handler) saveBlob(w http.ResponseWriter, r *http.Request) { } if syncNotSup { - h.fsyncWarning.Do(func() { + h.opt.FsyncWarning.Do(func() { log.Print("WARNING: fsync is not supported by the data storage. This can lead to data loss, if the system crashes or the storage is unexpectedly disconnected.") }) } else {