diff --git a/lib/db/instance.go b/lib/db/instance.go index 7e48dba13..961e6ca1b 100644 --- a/lib/db/instance.go +++ b/lib/db/instance.go @@ -40,20 +40,13 @@ func (db *instance) updateFiles(folder, device []byte, fs []protocol.FileInfo, m name := []byte(f.Name) fk = db.keyer.GenerateDeviceFileKey(fk, folder, device, name) - // Get and unmarshal the file entry. If it doesn't exist or can't be - // unmarshalled we'll add it as a new entry. - bs, err := t.Get(fk, nil) - var ef FileInfoTruncated - if err == nil { - err = ef.Unmarshal(bs) - } - - if err == nil && unchanged(f, ef) { + ef, ok := t.getFileTrunc(fk, true) + if ok && unchanged(f, ef) { continue } devID := protocol.DeviceIDFromBytes(device) - if err == nil { + if ok { meta.removeFile(devID, ef) } meta.addFile(devID, f) @@ -204,22 +197,9 @@ func (db *instance) withAllFolderTruncated(folder []byte, fn func(device []byte, } func (db *instance) getFileDirty(folder, device, file []byte) (protocol.FileInfo, bool) { - key := db.keyer.GenerateDeviceFileKey(nil, folder, device, file) - bs, err := db.Get(key, nil) - if err == leveldb.ErrNotFound { - return protocol.FileInfo{}, false - } - if err != nil { - l.Debugln("surprise error:", err) - return protocol.FileInfo{}, false - } - - var f protocol.FileInfo - if err := f.Unmarshal(bs); err != nil { - l.Debugln("unmarshal error:", err) - return protocol.FileInfo{}, false - } - return f, true + t := db.newReadOnlyTransaction() + defer t.close() + return t.getFile(folder, device, file) } func (db *instance) getGlobalDirty(folder, file []byte, truncate bool) (FileIntf, bool) {