Commit d8847a8f authored by Kubernetes Submit Queue's avatar Kubernetes Submit Queue Committed by GitHub

Merge pull request #52119 from mtaufen/sync-files

Automatic merge from submit-queue fsync config checkpoint files after writing @yujuhong brought up that it's possible for a hard reboot to result in empty checkpoint files, if they haven't been synced to disk yet. This PR ensures that Kubelet configuration checkpoints are synced after writing to avoid this issue. fixes #52222 **Release note**: ```release-note NONE ```
parents 0ae98b6f 47beb803
...@@ -83,6 +83,10 @@ func ReplaceFile(fs utilfs.Filesystem, path string, data []byte) error { ...@@ -83,6 +83,10 @@ func ReplaceFile(fs utilfs.Filesystem, path string, data []byte) error {
if _, err := tmpFile.Write(data); err != nil { if _, err := tmpFile.Write(data); err != nil {
return err return err
} }
// sync file, to ensure it's written in case a hard reset happens
if err := tmpFile.Sync(); err != nil {
return err
}
if err := tmpFile.Close(); err != nil { if err := tmpFile.Close(); err != nil {
return err return err
} }
......
...@@ -101,6 +101,11 @@ func (file *defaultFile) Write(b []byte) (n int, err error) { ...@@ -101,6 +101,11 @@ func (file *defaultFile) Write(b []byte) (n int, err error) {
return file.file.Write(b) return file.file.Write(b)
} }
// Sync via os.File.Sync
func (file *defaultFile) Sync() error {
return file.file.Sync()
}
// Close via os.File.Close // Close via os.File.Close
func (file *defaultFile) Close() error { func (file *defaultFile) Close() error {
return file.file.Close() return file.file.Close()
......
...@@ -107,6 +107,11 @@ func (file *fakeFile) Write(b []byte) (n int, err error) { ...@@ -107,6 +107,11 @@ func (file *fakeFile) Write(b []byte) (n int, err error) {
return file.file.Write(b) return file.file.Write(b)
} }
// Sync via afero.File.Sync
func (file *fakeFile) Sync() error {
return file.file.Sync()
}
// Close via afero.File.Close // Close via afero.File.Close
func (file *fakeFile) Close() error { func (file *fakeFile) Close() error {
return file.file.Close() return file.file.Close()
......
...@@ -45,5 +45,6 @@ type File interface { ...@@ -45,5 +45,6 @@ type File interface {
// for now, the only os.File methods used are those below, add more as necessary // for now, the only os.File methods used are those below, add more as necessary
Name() string Name() string
Write(b []byte) (n int, err error) Write(b []byte) (n int, err error)
Sync() error
Close() error Close() error
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment