From cf7fb14efaa7527403e3369eeb53fd0239d716fd Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Tue, 4 Jun 2019 20:02:09 +0000 Subject: [PATCH] Update timestamp atomic write Signed-off-by: Michael Crosby --- content/local/store.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/content/local/store.go b/content/local/store.go index 5503cb56f..efc58ea79 100644 --- a/content/local/store.go +++ b/content/local/store.go @@ -35,7 +35,6 @@ import ( "github.com/containerd/containerd/log" "github.com/sirupsen/logrus" - "github.com/containerd/continuity" digest "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" "github.com/pkg/errors" @@ -661,6 +660,19 @@ func writeTimestampFile(p string, t time.Time) error { if err != nil { return err } - - return continuity.AtomicWriteFile(p, b, 0666) + return atomicWrite(p, b, 0666) +} + +func atomicWrite(path string, data []byte, mode os.FileMode) error { + tmp := fmt.Sprintf("%s.tmp", path) + f, err := os.OpenFile(tmp, os.O_RDWR|os.O_CREATE|os.O_TRUNC|os.O_SYNC, mode) + if err != nil { + return errors.Wrap(err, "create tmp file") + } + _, err = f.Write(data) + f.Close() + if err != nil { + return errors.Wrap(err, "write atomic data") + } + return os.Rename(tmp, path) }