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
|
||||
// if not truncating the file, need to read it first
|
||||
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
|
||||
fd, err = os.OpenFile(fh.osPath, cacheFileOpenFlags&^os.O_CREATE, 0600)
|
||||
if os.IsNotExist(err) {
|
||||
|
|
Loading…
Reference in a new issue