Bläddra i källkod

lib/db: Deduplicate getFile* code (#5468)

Simon Frei 7 år sedan
förälder
incheckning
1d99db9bc6
1 ändrade filer med 6 tillägg och 26 borttagningar
  1. 6 26
      lib/db/instance.go

+ 6 - 26
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) {