From 82dc444afdc1dd3ad8962df2160d941230ca4159 Mon Sep 17 00:00:00 2001 From: Thomas Tendyck Date: Wed, 13 Nov 2024 12:42:45 +0000 Subject: [PATCH] coordinator: atomically replace the sealed data file on store commit --- coordinator/store/stdstore/stdstore.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/coordinator/store/stdstore/stdstore.go b/coordinator/store/stdstore/stdstore.go index 5c04459d..e8842dfc 100644 --- a/coordinator/store/stdstore/stdstore.go +++ b/coordinator/store/stdstore/stdstore.go @@ -209,8 +209,14 @@ func (s *StdStore) commit(data map[string][]byte) error { return err } - if err := s.fs.WriteFile(filepath.Join(s.sealDir, SealedDataFname), sealedData, 0o600); err != nil { - return err + // atomically replace the sealed data file + sealedDataPath := filepath.Join(s.sealDir, SealedDataFname) + sealedDataPathTmp := sealedDataPath + ".tmp" + if err := s.fs.WriteFile(sealedDataPathTmp, sealedData, 0o600); err != nil { + return fmt.Errorf("writing sealed data file: %w", err) + } + if err := s.fs.Rename(sealedDataPathTmp, sealedDataPath); err != nil { + return fmt.Errorf("renaming sealed data file: %w", err) } }