diff --git a/plugins/content/local/writer.go b/plugins/content/local/writer.go index ef33e7d5aa..2e12233098 100644 --- a/plugins/content/local/writer.go +++ b/plugins/content/local/writer.go @@ -139,6 +139,9 @@ func (w *writer) Commit(ctx context.Context, size int64, expected digest.Digest, return err } + if err := syncDir(filepath.Dir(target)); err != nil { + return err + } // Enable content blob integrity verification if supported if w.s.integritySupported { diff --git a/plugins/content/local/writer_unix.go b/plugins/content/local/writer_unix.go new file mode 100644 index 0000000000..aafd294e9a --- /dev/null +++ b/plugins/content/local/writer_unix.go @@ -0,0 +1,37 @@ +//go:build !windows + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package local + +import ( + "fmt" + "os" +) + +func syncDir(dir string) error { + dirF, err := os.Open(dir) + if err != nil { + return fmt.Errorf("failed to open dir %s: %w", dir, err) + } + err = dirF.Sync() + dirF.Close() + if err != nil { + return fmt.Errorf("failed to sync dir %s: %w", dir, err) + } + return nil +} diff --git a/plugins/content/local/writer_windows.go b/plugins/content/local/writer_windows.go new file mode 100644 index 0000000000..7e1ef186b7 --- /dev/null +++ b/plugins/content/local/writer_windows.go @@ -0,0 +1,22 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package local + +// sync dir doesn't support in windows +func syncDir(dir string) error { + return nil +}