vfs: update cached copy if we know it has changed before using it
Before this change we would have to wait for the --vfs-cache-max-age to expire before getting an update.
This commit is contained in:
parent
354f1ad722
commit
baf9ee5cf7
1 changed files with 12 additions and 0 deletions
|
@ -109,6 +109,18 @@ func (fh *RWFileHandle) openPending(truncate bool) (err error) {
|
||||||
cacheFileOpenFlags := fh.flags
|
cacheFileOpenFlags := fh.flags
|
||||||
// if not truncating the file, need to read it first
|
// if not truncating the file, need to read it first
|
||||||
if fh.flags&os.O_TRUNC == 0 && !truncate {
|
if fh.flags&os.O_TRUNC == 0 && !truncate {
|
||||||
|
// If the remote object exists AND its cached file exists locally AND there are no
|
||||||
|
// other handles with it open writers, then attempt to update it.
|
||||||
|
if fh.o != nil && fh.d.vfs.cache.opens(fh.remote) <= 1 {
|
||||||
|
cacheObj, err := fh.d.vfs.cache.f.NewObject(fh.remote)
|
||||||
|
if err == nil && cacheObj != nil {
|
||||||
|
cacheObj, err = copyObj(fh.d.vfs.cache.f, cacheObj, fh.remote, fh.o)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "open RW handle failed to update cached file")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// try to open a exising cache file
|
// try to open a exising cache file
|
||||||
fd, err = os.OpenFile(fh.osPath, cacheFileOpenFlags&^os.O_CREATE, 0600)
|
fd, err = os.OpenFile(fh.osPath, cacheFileOpenFlags&^os.O_CREATE, 0600)
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
|
|
Loading…
Reference in a new issue