Commit 9d535b13 authored by Jakob Borg's avatar Jakob Borg

Speed up Global() at the price of Update() in fileset

parent 48bfc2d9
......@@ -11,8 +11,9 @@ import (
)
type fileRecord struct {
Usage int
File scanner.File
File scanner.File
Usage int
Global bool
}
type bitset uint64
......@@ -110,13 +111,17 @@ func (m *Set) Need(id uint) []scanner.File {
var fs = make([]scanner.File, 0, len(m.globalKey)/2) // Just a guess, but avoids too many reallocations
m.Lock()
rkID := m.remoteKey[id]
for name, gk := range m.globalKey {
if gk.newerThan(rkID[name]) {
file := m.files[gk].File
if file.Flags&protocol.FlagDirectory == 0 || // Regular file
file.Flags&(protocol.FlagDirectory|protocol.FlagDeleted) == protocol.FlagDirectory { // Non-deleted directory
fs = append(fs, file)
}
for gk, gf := range m.files {
if !gf.Global {
continue
}
file := gf.File
switch {
case file.Flags&protocol.FlagDirectory == 0 && gk.newerThan(rkID[gk.Name]):
fs = append(fs, file)
case file.Flags&(protocol.FlagDirectory|protocol.FlagDeleted) == protocol.FlagDirectory && gk.newerThan(rkID[gk.Name]):
fs = append(fs, file)
}
}
m.Unlock()
......@@ -142,8 +147,10 @@ func (m *Set) Global() []scanner.File {
}
var fs = make([]scanner.File, 0, len(m.globalKey))
m.Lock()
for _, rk := range m.globalKey {
fs = append(fs, m.files[rk].File)
for _, file := range m.files {
if file.Global {
fs = append(fs, file.File)
}
}
m.Unlock()
return fs
......@@ -237,6 +244,14 @@ func (m *Set) update(cid uint, fs []scanner.File) {
av |= 1 << cid
m.globalAvailability[n] = av
case fk.newerThan(gk):
if ok {
f := m.files[gk]
f.Global = false
m.files[gk] = f
}
f := m.files[fk]
f.Global = true
m.files[fk] = f
m.globalKey[n] = fk
m.globalAvailability[n] = 1 << cid
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment