cache: notify vfs and support crypt in rpc - #2111

This commit is contained in:
remusb 2018-03-15 11:05:45 +02:00
parent 5981f9fab5
commit 078d705dbe
3 changed files with 17 additions and 1 deletions

View File

@ -447,6 +447,16 @@ func (f *Fs) httpExpireRemote(in rc.Params) (out rc.Params, err error) {
withData = true withData = true
} }
// if it's wrapped by crypt we need to check what format we got
if cryptFs, yes := f.isWrappedByCrypt(); yes {
_, err := cryptFs.DecryptFileName(remote)
// if it failed to decrypt then it is a decrypted format and we need to encrypt it
if err != nil {
remote = cryptFs.EncryptFileName(remote)
}
// else it's an encrypted format and we can use it as it is
}
if !f.cache.HasEntry(path.Join(f.Root(), remote)) { if !f.cache.HasEntry(path.Join(f.Root(), remote)) {
return out, errors.Errorf("%s doesn't exist in cache", remote) return out, errors.Errorf("%s doesn't exist in cache", remote)
} }
@ -459,6 +469,8 @@ func (f *Fs) httpExpireRemote(in rc.Params) (out rc.Params, err error) {
if err != nil { if err != nil {
return out, errors.WithMessage(err, "error expiring directory") return out, errors.WithMessage(err, "error expiring directory")
} }
// notify vfs too
f.notifyChangeUpstream(cd.Remote(), fs.EntryDirectory)
out["status"] = "ok" out["status"] = "ok"
out["message"] = fmt.Sprintf("cached directory cleared: %v", remote) out["message"] = fmt.Sprintf("cached directory cleared: %v", remote)
return out, nil return out, nil
@ -469,6 +481,8 @@ func (f *Fs) httpExpireRemote(in rc.Params) (out rc.Params, err error) {
if err != nil { if err != nil {
return out, errors.WithMessage(err, "error expiring file") return out, errors.WithMessage(err, "error expiring file")
} }
// notify vfs too
f.notifyChangeUpstream(co.Remote(), fs.EntryObject)
if withData { if withData {
// safe to ignore as the file might not have been open // safe to ignore as the file might not have been open
_ = os.RemoveAll(path.Join(f.cache.dataPath, co.abs())) _ = os.RemoveAll(path.Join(f.cache.dataPath, co.abs()))

View File

@ -645,7 +645,7 @@ func TestInternalChangeSeenAfterRc(t *testing.T) {
require.NotEqual(t, o.ModTime().String(), co.ModTime().String()) require.NotEqual(t, o.ModTime().String(), co.ModTime().String())
m := make(map[string]string) m := make(map[string]string)
res, err := http.Post(fmt.Sprintf("http://localhost:5572/cache/expire?remote=%s", runInstance.encryptRemoteIfNeeded(t, "data.bin")), "application/json; charset=utf-8", strings.NewReader("")) res, err := http.Post(fmt.Sprintf("http://localhost:5572/cache/expire?remote=%s", "data.bin"), "application/json; charset=utf-8", strings.NewReader(""))
require.NoError(t, err) require.NoError(t, err)
defer func() { defer func() {
_ = res.Body.Close() _ = res.Body.Close()

View File

@ -248,6 +248,8 @@ By default, the listener is disabled if you do not add the flag.
### rc cache/expire ### rc cache/expire
Purge a remote from the cache backend. Supports either a directory or a file. Purge a remote from the cache backend. Supports either a directory or a file.
It supports both encrypted and unencrypted file names if cache is wrapped by crypt.
Params: Params:
- **remote** = path to remote **(required)** - **remote** = path to remote **(required)**
- **withData** = true/false to delete cached data (chunks) as well _(optional, false by default)_ - **withData** = true/false to delete cached data (chunks) as well _(optional, false by default)_