From 2be52f02cbf3d13f10c50617228a20db613221f5 Mon Sep 17 00:00:00 2001 From: radhika Date: Sat, 5 Mar 2016 09:24:06 -0500 Subject: [PATCH] 8554: trash and untrash implementation --- services/keepstore/keepstore.go | 2 +- services/keepstore/volume_unix.go | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/services/keepstore/keepstore.go b/services/keepstore/keepstore.go index 3850e993fc..104ae89ba0 100644 --- a/services/keepstore/keepstore.go +++ b/services/keepstore/keepstore.go @@ -209,7 +209,7 @@ func main() { &trashLifetime, "trash-lifetime", 0*time.Second, - "Interval after a block is trashed during which it can be recovered using an /untrash request") + "Interval in seconds after a block is trashed during which it can be recovered using an /untrash request") flag.Parse() diff --git a/services/keepstore/volume_unix.go b/services/keepstore/volume_unix.go index 0dd1d82a98..27ee2422b6 100644 --- a/services/keepstore/volume_unix.go +++ b/services/keepstore/volume_unix.go @@ -408,13 +408,22 @@ func (v *UnixVolume) Trash(loc string) error { return nil } } - return os.Remove(p) + return os.Rename(p, fmt.Sprintf("%v.trash.%d", p, time.Now().Add(trashLifetime).Unix())) } // Untrash moves block from trash back into store -// TBD -func (v *UnixVolume) Untrash(loc string) error { - return ErrNotImplemented +func (v *UnixVolume) Untrash(loc string) (err error) { + prefix := fmt.Sprintf("%v.trash.", loc) + files, _ := ioutil.ReadDir(v.blockDir(loc)) + for _, f := range files { + if strings.HasPrefix(f.Name(), prefix) { + err = os.Rename(v.blockPath(f.Name()), v.blockPath(loc)) + if err != nil { + break + } + } + } + return err } // blockDir returns the fully qualified directory name for the directory -- 2.39.5