mirror of
https://github.com/rclone/rclone.git
synced 2024-12-23 15:38:57 +01:00
cache: notify vfs and support crypt in rpc - #2111
This commit is contained in:
parent
5981f9fab5
commit
078d705dbe
14
backend/cache/cache.go
vendored
14
backend/cache/cache.go
vendored
@ -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()))
|
||||||
|
2
backend/cache/cache_internal_test.go
vendored
2
backend/cache/cache_internal_test.go
vendored
@ -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()
|
||||||
|
@ -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)_
|
||||||
|
Loading…
Reference in New Issue
Block a user