bugfix:sync parent dir to ensure blob entry is reliably stored

Signed-off-by: ningmingxiao <ning.mingxiao@zte.com.cn>
This commit is contained in:
ningmingxiao
2025-09-15 09:57:56 +08:00
committed by ningmingxiao
parent d94e514fc4
commit ed2e81a78e
3 changed files with 62 additions and 0 deletions

View File

@@ -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 {

View File

@@ -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
}

View File

@@ -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
}