Populate BlockMap

This commit is contained in:
Audrius Butkevicius 2014-10-07 22:15:01 +01:00 committed by Jakob Borg
parent 435f9113e8
commit 0bc50f7284

View File

@ -42,6 +42,7 @@ type Set struct {
mutex sync.Mutex mutex sync.Mutex
folder string folder string
db *leveldb.DB db *leveldb.DB
blockmap *BlockMap
} }
func NewSet(folder string, db *leveldb.DB) *Set { func NewSet(folder string, db *leveldb.DB) *Set {
@ -49,6 +50,7 @@ func NewSet(folder string, db *leveldb.DB) *Set {
localVersion: make(map[protocol.DeviceID]uint64), localVersion: make(map[protocol.DeviceID]uint64),
folder: folder, folder: folder,
db: db, db: db,
blockmap: NewBlockMap(db, folder),
} }
var deviceID protocol.DeviceID var deviceID protocol.DeviceID
@ -80,6 +82,10 @@ func (s *Set) Replace(device protocol.DeviceID, fs []protocol.FileInfo) {
// Reset the local version if all files were removed. // Reset the local version if all files were removed.
s.localVersion[device] = 0 s.localVersion[device] = 0
} }
if device == protocol.LocalDeviceID {
s.blockmap.Drop()
s.blockmap.Add(fs)
}
} }
func (s *Set) ReplaceWithDelete(device protocol.DeviceID, fs []protocol.FileInfo) { func (s *Set) ReplaceWithDelete(device protocol.DeviceID, fs []protocol.FileInfo) {
@ -92,6 +98,10 @@ func (s *Set) ReplaceWithDelete(device protocol.DeviceID, fs []protocol.FileInfo
if lv := ldbReplaceWithDelete(s.db, []byte(s.folder), device[:], fs); lv > s.localVersion[device] { if lv := ldbReplaceWithDelete(s.db, []byte(s.folder), device[:], fs); lv > s.localVersion[device] {
s.localVersion[device] = lv s.localVersion[device] = lv
} }
if device == protocol.LocalDeviceID {
s.blockmap.Drop()
s.blockmap.Add(fs)
}
} }
func (s *Set) Update(device protocol.DeviceID, fs []protocol.FileInfo) { func (s *Set) Update(device protocol.DeviceID, fs []protocol.FileInfo) {
@ -104,6 +114,9 @@ func (s *Set) Update(device protocol.DeviceID, fs []protocol.FileInfo) {
if lv := ldbUpdate(s.db, []byte(s.folder), device[:], fs); lv > s.localVersion[device] { if lv := ldbUpdate(s.db, []byte(s.folder), device[:], fs); lv > s.localVersion[device] {
s.localVersion[device] = lv s.localVersion[device] = lv
} }
if device == protocol.LocalDeviceID {
s.blockmap.Update(fs)
}
} }
func (s *Set) WithNeed(device protocol.DeviceID, fn fileIterator) { func (s *Set) WithNeed(device protocol.DeviceID, fn fileIterator) {
@ -179,6 +192,11 @@ func ListFolders(db *leveldb.DB) []string {
// database. // database.
func DropFolder(db *leveldb.DB, folder string) { func DropFolder(db *leveldb.DB, folder string) {
ldbDropFolder(db, []byte(folder)) ldbDropFolder(db, []byte(folder))
bm := &BlockMap{
db: db,
folder: folder,
}
bm.Drop()
} }
func normalizeFilenames(fs []protocol.FileInfo) { func normalizeFilenames(fs []protocol.FileInfo) {