mirror of
https://github.com/distribution/distribution.git
synced 2026-02-21 14:22:14 +00:00
fix: sync parent dir to ensure data is reliably stored
Co-authored-by: Sebastiaan van Stijn <github@gone.nl> Signed-off-by: ningmingxiao <ning.mingxiao@zte.com.cn> Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
committed by
Sebastiaan van Stijn
parent
5ddf7898fa
commit
b4f2af3f60
@@ -164,7 +164,25 @@ func (d *driver) PutContent(ctx context.Context, subPath string, contents []byte
|
||||
dErr := d.Delete(ctx, tempPath)
|
||||
return errors.Join(err, dErr)
|
||||
}
|
||||
return syncDir(filepath.Dir(d.fullPath(subPath)))
|
||||
}
|
||||
|
||||
func syncDir(dir string) (retErr error) {
|
||||
dirF, err := os.Open(dir)
|
||||
if err != nil {
|
||||
if errors.Is(err, os.ErrNotExist) {
|
||||
return nil
|
||||
}
|
||||
return fmt.Errorf("sync dir: %w", err)
|
||||
}
|
||||
defer func() {
|
||||
if err := dirF.Close(); err != nil {
|
||||
retErr = errors.Join(retErr, fmt.Errorf("failed to close dir: %w", err))
|
||||
}
|
||||
}()
|
||||
if err := dirF.Sync(); err != nil {
|
||||
return fmt.Errorf("sync dir: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -389,24 +407,27 @@ func (fw *fileWriter) Size() int64 {
|
||||
return fw.size
|
||||
}
|
||||
|
||||
func (fw *fileWriter) Close() error {
|
||||
func (fw *fileWriter) Close() (retErr error) {
|
||||
if fw.closed {
|
||||
return fmt.Errorf("already closed")
|
||||
}
|
||||
fw.closed = true
|
||||
defer func() {
|
||||
if err := fw.file.Close(); err != nil {
|
||||
retErr = errors.Join(retErr, err)
|
||||
}
|
||||
}()
|
||||
|
||||
if fw.committed {
|
||||
// Already flushed and synced
|
||||
return nil
|
||||
}
|
||||
|
||||
if err := fw.bw.Flush(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := fw.file.Sync(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := fw.file.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
fw.closed = true
|
||||
return nil
|
||||
return fw.file.Sync()
|
||||
}
|
||||
|
||||
func (fw *fileWriter) Cancel(ctx context.Context) error {
|
||||
@@ -415,7 +436,8 @@ func (fw *fileWriter) Cancel(ctx context.Context) error {
|
||||
}
|
||||
|
||||
fw.cancelled = true
|
||||
fw.file.Close()
|
||||
fw.closed = true
|
||||
_ = fw.file.Close()
|
||||
return os.Remove(fw.file.Name())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user