diff --git a/repo/repo.go b/repo/repo.go index fc8e908..8fe1dae 100644 --- a/repo/repo.go +++ b/repo/repo.go @@ -627,9 +627,28 @@ func (h *Handler) saveBlob(w http.ResponseWriter, r *http.Request) { return } + if err := syncDir(filepath.Dir(path)); err != nil { + // Don't call os.Remove(path) as this is prone to race conditions with parallel upload retries + h.internalServerError(w, err) + return + } + h.sendMetric(objectType, BlobWrite, uint64(written)) } +func syncDir(dirname string) error { + dir, err := os.Open(dirname) + if err != nil { + return err + } + err = dir.Sync() + if err != nil { + _ = dir.Close() + return err + } + return dir.Close() +} + // deleteBlob deletes a blob from the repository. func (h *Handler) deleteBlob(w http.ResponseWriter, r *http.Request) { if h.opt.Debug {