local: fix "file not found" errors on post transfer Hash calculation
Before this change the local backend was returning file not found errors for post transfer hashes for files which were moved. This was caused by the routine which checks for the object being changed. After this change we ignore file not found errors while checking to see if the object has changed. If the hash has to be computed then a file not found error will be thrown when it is opened, otherwise the cached hash will be returned.
This commit is contained in:
parent
69888bf966
commit
14cab0fff0
1 changed files with 11 additions and 2 deletions
|
@ -768,8 +768,17 @@ func (o *Object) Hash(ctx context.Context, r hash.Type) (string, error) {
|
||||||
oldtime := o.modTime
|
oldtime := o.modTime
|
||||||
oldsize := o.size
|
oldsize := o.size
|
||||||
err := o.lstat()
|
err := o.lstat()
|
||||||
|
var changed bool
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.Wrap(err, "hash: failed to stat")
|
if os.IsNotExist(errors.Cause(err)) {
|
||||||
|
// If file not found then we assume any accumulated
|
||||||
|
// hashes are OK - this will error on Open
|
||||||
|
changed = true
|
||||||
|
} else {
|
||||||
|
return "", errors.Wrap(err, "hash: failed to stat")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
changed = !o.modTime.Equal(oldtime) || oldsize != o.size
|
||||||
}
|
}
|
||||||
|
|
||||||
o.fs.objectHashesMu.Lock()
|
o.fs.objectHashesMu.Lock()
|
||||||
|
@ -777,7 +786,7 @@ func (o *Object) Hash(ctx context.Context, r hash.Type) (string, error) {
|
||||||
hashValue, hashFound := o.hashes[r]
|
hashValue, hashFound := o.hashes[r]
|
||||||
o.fs.objectHashesMu.Unlock()
|
o.fs.objectHashesMu.Unlock()
|
||||||
|
|
||||||
if !o.modTime.Equal(oldtime) || oldsize != o.size || hashes == nil || !hashFound {
|
if changed || hashes == nil || !hashFound {
|
||||||
var in io.ReadCloser
|
var in io.ReadCloser
|
||||||
|
|
||||||
if !o.translatedLink {
|
if !o.translatedLink {
|
||||||
|
|
Loading…
Reference in a new issue