mirror of
https://github.com/octoleo/syncthing.git
synced 2024-09-19 21:29:01 +00:00
cmd/stindex, lib/db: Use same condition to check for needed files (#6954)
This commit is contained in:
parent
71bfad0bc6
commit
0e3e0a7c9e
@ -333,10 +333,10 @@ func idxck(ldb backend.Backend) (success bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func needsLocally(vl db.VersionList) bool {
|
func needsLocally(vl db.VersionList) bool {
|
||||||
fv, ok := vl.Get(protocol.LocalDeviceID[:])
|
gfv, gok := vl.GetGlobal()
|
||||||
if !ok {
|
if !gok { // That's weird, but we hardly need something non-existant
|
||||||
return true // proviosinally, it looks like we need the file
|
return false
|
||||||
}
|
}
|
||||||
gfv, _ := vl.GetGlobal() // Can't not have a global if we got something above
|
fv, ok := vl.Get(protocol.LocalDeviceID[:])
|
||||||
return !fv.Version.GreaterEqual(gfv.Version)
|
return db.Need(gfv, ok, fv.Version)
|
||||||
}
|
}
|
||||||
|
@ -457,7 +457,7 @@ func (t *readOnlyTransaction) withNeed(folder, device []byte, truncate bool, fn
|
|||||||
}
|
}
|
||||||
haveFV, have := vl.Get(device)
|
haveFV, have := vl.Get(device)
|
||||||
|
|
||||||
if !need(globalFV, have, haveFV.Version) {
|
if !Need(globalFV, have, haveFV.Version) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -630,9 +630,9 @@ func (t readWriteTransaction) updateGlobal(gk, keyBuf, folder, device []byte, fi
|
|||||||
|
|
||||||
needBefore := false
|
needBefore := false
|
||||||
if haveOldGlobal {
|
if haveOldGlobal {
|
||||||
needBefore = need(oldGlobalFV, haveRemoved, removedFV.Version)
|
needBefore = Need(oldGlobalFV, haveRemoved, removedFV.Version)
|
||||||
}
|
}
|
||||||
needNow := need(globalFV, true, file.Version)
|
needNow := Need(globalFV, true, file.Version)
|
||||||
if needBefore {
|
if needBefore {
|
||||||
if keyBuf, oldGlobal, err = t.getGlobalFromFileVersion(keyBuf, folder, name, true, oldGlobalFV); err != nil {
|
if keyBuf, oldGlobal, err = t.getGlobalFromFileVersion(keyBuf, folder, name, true, oldGlobalFV); err != nil {
|
||||||
return nil, false, err
|
return nil, false, err
|
||||||
@ -692,9 +692,9 @@ func (t readWriteTransaction) updateGlobal(gk, keyBuf, folder, device []byte, fi
|
|||||||
localFV, haveLocal := fl.Get(protocol.LocalDeviceID[:])
|
localFV, haveLocal := fl.Get(protocol.LocalDeviceID[:])
|
||||||
needBefore := false
|
needBefore := false
|
||||||
if haveOldGlobal {
|
if haveOldGlobal {
|
||||||
needBefore = need(oldGlobalFV, haveLocal, localFV.Version)
|
needBefore = Need(oldGlobalFV, haveLocal, localFV.Version)
|
||||||
}
|
}
|
||||||
needNow := need(globalFV, haveLocal, localFV.Version)
|
needNow := Need(globalFV, haveLocal, localFV.Version)
|
||||||
if needBefore {
|
if needBefore {
|
||||||
meta.removeNeeded(protocol.LocalDeviceID, oldGlobal)
|
meta.removeNeeded(protocol.LocalDeviceID, oldGlobal)
|
||||||
if !needNow {
|
if !needNow {
|
||||||
@ -703,7 +703,7 @@ func (t readWriteTransaction) updateGlobal(gk, keyBuf, folder, device []byte, fi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if need(globalFV, haveLocal, localFV.Version) {
|
if Need(globalFV, haveLocal, localFV.Version) {
|
||||||
meta.addNeeded(protocol.LocalDeviceID, global)
|
meta.addNeeded(protocol.LocalDeviceID, global)
|
||||||
if !needBefore {
|
if !needBefore {
|
||||||
if keyBuf, err = t.updateLocalNeed(keyBuf, folder, name, true); err != nil {
|
if keyBuf, err = t.updateLocalNeed(keyBuf, folder, name, true); err != nil {
|
||||||
@ -719,10 +719,10 @@ func (t readWriteTransaction) updateGlobal(gk, keyBuf, folder, device []byte, fi
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
fv, have := fl.Get(dev[:])
|
fv, have := fl.Get(dev[:])
|
||||||
if haveOldGlobal && need(oldGlobalFV, have, fv.Version) {
|
if haveOldGlobal && Need(oldGlobalFV, have, fv.Version) {
|
||||||
meta.removeNeeded(dev, oldGlobal)
|
meta.removeNeeded(dev, oldGlobal)
|
||||||
}
|
}
|
||||||
if need(globalFV, have, fv.Version) {
|
if Need(globalFV, have, fv.Version) {
|
||||||
meta.addNeeded(dev, global)
|
meta.addNeeded(dev, global)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -754,7 +754,7 @@ func (t readWriteTransaction) updateLocalNeed(keyBuf, folder, name []byte, add b
|
|||||||
return keyBuf, err
|
return keyBuf, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func need(global FileVersion, haveLocal bool, localVersion protocol.Vector) bool {
|
func Need(global FileVersion, haveLocal bool, localVersion protocol.Vector) bool {
|
||||||
// We never need an invalid file.
|
// We never need an invalid file.
|
||||||
if global.IsInvalid() {
|
if global.IsInvalid() {
|
||||||
return false
|
return false
|
||||||
@ -811,7 +811,7 @@ func (t readWriteTransaction) removeFromGlobal(gk, keyBuf, folder, device, file
|
|||||||
|
|
||||||
globalFV, ok := fl.GetGlobal()
|
globalFV, ok := fl.GetGlobal()
|
||||||
// Add potential needs of the removed device
|
// Add potential needs of the removed device
|
||||||
if ok && !globalFV.IsInvalid() && need(globalFV, false, protocol.Vector{}) && !need(oldGlobalFV, haveRemoved, removedFV.Version) {
|
if ok && !globalFV.IsInvalid() && Need(globalFV, false, protocol.Vector{}) && !Need(oldGlobalFV, haveRemoved, removedFV.Version) {
|
||||||
keyBuf, global, _, err = t.getGlobalFromVersionList(keyBuf, folder, file, true, fl)
|
keyBuf, global, _, err = t.getGlobalFromVersionList(keyBuf, folder, file, true, fl)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -842,7 +842,7 @@ func (t readWriteTransaction) removeFromGlobal(gk, keyBuf, folder, device, file
|
|||||||
meta.removeFile(protocol.GlobalDeviceID, f)
|
meta.removeFile(protocol.GlobalDeviceID, f)
|
||||||
|
|
||||||
// Remove potential device needs
|
// Remove potential device needs
|
||||||
if fv, have := fl.Get(protocol.LocalDeviceID[:]); need(removedFV, have, fv.Version) {
|
if fv, have := fl.Get(protocol.LocalDeviceID[:]); Need(removedFV, have, fv.Version) {
|
||||||
meta.removeNeeded(protocol.LocalDeviceID, f)
|
meta.removeNeeded(protocol.LocalDeviceID, f)
|
||||||
if keyBuf, err = t.updateLocalNeed(keyBuf, folder, file, false); err != nil {
|
if keyBuf, err = t.updateLocalNeed(keyBuf, folder, file, false); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -852,7 +852,7 @@ func (t readWriteTransaction) removeFromGlobal(gk, keyBuf, folder, device, file
|
|||||||
if bytes.Equal(dev[:], device) { // Was the previous global
|
if bytes.Equal(dev[:], device) { // Was the previous global
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if fv, have := fl.Get(dev[:]); need(removedFV, have, fv.Version) {
|
if fv, have := fl.Get(dev[:]); Need(removedFV, have, fv.Version) {
|
||||||
meta.removeNeeded(deviceID, f)
|
meta.removeNeeded(deviceID, f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user