diff --git a/cache/cache.go b/cache/cache.go index b62bb22db..a367037d1 100644 --- a/cache/cache.go +++ b/cache/cache.go @@ -334,12 +334,17 @@ func NewFs(name, rpath string) (fs.Fs, error) { } // Trap SIGINT and SIGTERM to close the DB handle gracefully c := make(chan os.Signal, 1) - signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) + signal.Notify(c, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP) go func() { - s := <-c - fs.Debugf(f, "Got signal: %v", s) - if s == syscall.SIGINT || s == syscall.SIGTERM { - f.cache.Close() + for { + s := <-c + if s == syscall.SIGINT || s == syscall.SIGTERM { + fs.Debugf(f, "Got signal: %v", s) + f.cache.Close() + } else if s == syscall.SIGHUP { + fs.Infof(f, "Clearing cache from signal") + f.DirCacheFlush() + } } }() diff --git a/cache/storage_persistent.go b/cache/storage_persistent.go index e608296ba..25a4d7336 100644 --- a/cache/storage_persistent.go +++ b/cache/storage_persistent.go @@ -272,11 +272,12 @@ func (b *Persistent) RemoveDir(fp string) error { // delete chunks on disk // safe to ignore as the files might not have been open - if err != nil { + if err == nil { _ = os.RemoveAll(path.Join(b.dataPath, fp)) + _ = os.MkdirAll(b.dataPath, os.ModePerm) } - return nil + return err } // ExpireDir will flush a CachedDirectory and all its objects from the objects