From 77f94fd3c52f8f8f72e34703696a824cb7491b92 Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Tue, 16 Feb 2016 11:43:23 -0800 Subject: [PATCH] Fix migration diffid atomic write Fixes #20267 Signed-off-by: Tonis Tiigi (cherry picked from commit 056013f97b504979c1fe3fa36aff1ef66d42ad42) --- migrate/v1/migratev1.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/migrate/v1/migratev1.go b/migrate/v1/migratev1.go index b7ce75b1c0..aa9d48cb32 100644 --- a/migrate/v1/migratev1.go +++ b/migrate/v1/migratev1.go @@ -160,7 +160,12 @@ func calculateLayerChecksum(graphDir, id string, ls checksumCalculator) error { return err } - if err := ioutil.WriteFile(filepath.Join(graphDir, id, migrationDiffIDFileName), []byte(diffID), 0600); err != nil { + tmpFile := filepath.Join(graphDir, id, migrationDiffIDFileName+".tmp") + if err := ioutil.WriteFile(tmpFile, []byte(diffID), 0600); err != nil { + return err + } + + if err := os.Rename(tmpFile, filepath.Join(graphDir, id, migrationDiffIDFileName)); err != nil { return err } @@ -423,7 +428,11 @@ func migrateImage(id, root string, ls graphIDRegistrar, is image.Store, ms metad history = parentImg.History } - diffID, err := ioutil.ReadFile(filepath.Join(root, graphDirName, id, migrationDiffIDFileName)) + diffIDData, err := ioutil.ReadFile(filepath.Join(root, graphDirName, id, migrationDiffIDFileName)) + if err != nil { + return err + } + diffID, err := digest.ParseDigest(string(diffIDData)) if err != nil { return err }