mirror of
https://github.com/octoleo/syncthing.git
synced 2024-12-22 19:08:58 +00:00
chore(db): process "unchanged" files anyway (#9755)
Skipping these makes the sequence numbering inconcistent; we've received
a file and suppsedly added it to the database, but if you check the
sequence number afterwards it didn't increase, i.e., we trigger [this
failure
condition](47f48faed7/lib/model/indexhandler.go (L447-L459)
)
and, similarly, a future update will look like there was a hole in the
numbering.
I propose to at least temporarily remove this optimisation in order for
things to make more sense. Is there a reason to keep this beyond saving
some database operations?
This commit is contained in:
parent
47f48faed7
commit
6d64daaba3
@ -159,10 +159,6 @@ func (db *Lowlevel) updateRemoteFiles(folder, device []byte, fs []protocol.FileI
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if ok && unchanged(f, ef) {
|
|
||||||
l.Debugf("not inserting unchanged (remote); folder=%q device=%v %v", folder, devID, f)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if ok {
|
if ok {
|
||||||
meta.removeFile(devID, ef)
|
meta.removeFile(devID, ef)
|
||||||
@ -216,12 +212,8 @@ func (db *Lowlevel) updateLocalFiles(folder []byte, fs []protocol.FileInfo, meta
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if ok && unchanged(f, ef) {
|
|
||||||
l.Debugf("not inserting unchanged (local); folder=%q %v", folder, f)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
blocksHashSame := ok && bytes.Equal(ef.BlocksHash, f.BlocksHash)
|
|
||||||
|
|
||||||
|
blocksHashSame := ok && bytes.Equal(ef.BlocksHash, f.BlocksHash)
|
||||||
if ok {
|
if ok {
|
||||||
keyBuf, err = db.removeLocalBlockAndSequenceInfo(keyBuf, folder, name, ef, !blocksHashSame, &t)
|
keyBuf, err = db.removeLocalBlockAndSequenceInfo(keyBuf, folder, name, ef, !blocksHashSame, &t)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -1443,13 +1435,6 @@ func (db *Lowlevel) checkErrorForRepair(err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// unchanged checks if two files are the same and thus don't need to be updated.
|
|
||||||
// Local flags or the invalid bit might change without the version
|
|
||||||
// being bumped.
|
|
||||||
func unchanged(nf, ef protocol.FileIntf) bool {
|
|
||||||
return ef.FileVersion().Equal(nf.FileVersion()) && ef.IsInvalid() == nf.IsInvalid() && ef.FileLocalFlags() == nf.FileLocalFlags()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (db *Lowlevel) handleFailure(err error) {
|
func (db *Lowlevel) handleFailure(err error) {
|
||||||
db.checkErrorForRepair(err)
|
db.checkErrorForRepair(err)
|
||||||
if shouldReportFailure(err) {
|
if shouldReportFailure(err) {
|
||||||
|
Loading…
Reference in New Issue
Block a user