lib/db: Don't count invalid items to global state (ref #6850) (#6863)

This commit is contained in:
Simon Frei
2020-07-30 13:49:14 +02:00
committed by GitHub
parent e46c8ab9ee
commit 850dd4cd25
5 changed files with 27 additions and 52 deletions
+9 -18
View File
@@ -662,11 +662,13 @@ func (t readWriteTransaction) updateGlobal(gk, keyBuf, folder, device []byte, fi
}
}
// Update global size counter.
// It's done regardless of if the global changed, as two files might
// both be invalid, but for different reasons i.e. have different flags
// (e.g. ignored vs receive only).
// https://github.com/syncthing/syncthing/issues/6850
// Update global size counter if necessary
if !globalChanged {
// Neither the global state nor the needs of any devices, except
// the one updated, changed.
return keyBuf, true, nil
}
// Remove the old global from the global size counter
if haveOldGlobal {
@@ -689,12 +691,6 @@ func (t readWriteTransaction) updateGlobal(gk, keyBuf, folder, device []byte, fi
}
meta.addFile(protocol.GlobalDeviceID, global)
if !globalChanged {
// Neither the global state nor the needs of any devices, except
// the one updated, changed.
return keyBuf, true, nil
}
// check for local (if not already done before)
if !bytes.Equal(device, protocol.LocalDeviceID[:]) {
localFV, haveLocal := fl.Get(protocol.LocalDeviceID[:])
@@ -842,16 +838,11 @@ func (t readWriteTransaction) removeFromGlobal(gk, keyBuf, folder, device, file
return keyBuf, nil
}
keyBuf, err = t.keyer.GenerateDeviceFileKey(keyBuf, folder, device, file)
var f protocol.FileIntf
keyBuf, f, err = t.getGlobalFromFileVersion(keyBuf, folder, file, true, oldGlobalFV)
if err != nil {
return nil, err
}
f, ok, err := t.getFileTrunc(keyBuf, true)
if err != nil {
return nil, err
} else if !ok {
return nil, errEntryFromGlobalMissing
}
meta.removeFile(protocol.GlobalDeviceID, f)
// Remove potential device needs