mailru: fix incorrect modtime after updating a file or setting its modtime
Update and SetModTime kept the caller's full precision modtime in memory while the server stores second precision, so until the object was re-read the modtime did not match what a fresh listing would report. This broke wrappers which compare exact modtimes, such as the hasher backend's fingerprint and the VFS cache. Truncate the modtime to second precision to match what the server stores.
This commit is contained in:
@@ -1733,7 +1733,10 @@ func (o *Object) Update(ctx context.Context, in io.Reader, src fs.ObjectInfo, op
|
||||
}
|
||||
o.mrHash = newHash
|
||||
o.size = size
|
||||
o.modTime = src.ModTime(ctx)
|
||||
// The server stores modtimes with second precision so truncate
|
||||
// here too to keep the in-memory modtime identical to the one a
|
||||
// fresh listing returns.
|
||||
o.modTime = src.ModTime(ctx).Truncate(time.Second)
|
||||
return o.addFileMetaData(ctx, true)
|
||||
}
|
||||
|
||||
@@ -2036,7 +2039,11 @@ func (o *Object) Storable() bool {
|
||||
// Commits the datastore
|
||||
func (o *Object) SetModTime(ctx context.Context, modTime time.Time) error {
|
||||
// fs.Debugf(o, ">>> SetModTime [%v]", modTime)
|
||||
o.modTime = modTime
|
||||
//
|
||||
// The server stores modtimes with second precision so truncate
|
||||
// here too to keep the in-memory modtime identical to the one a
|
||||
// fresh listing returns.
|
||||
o.modTime = modTime.Truncate(time.Second)
|
||||
return o.addFileMetaData(ctx, true)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user