Browse Source

lib/db: Minor polish (#5469)

Simon Frei 6 năm trước cách đây
mục cha
commit
df4d754197
1 tập tin đã thay đổi với 22 bổ sung33 xóa
  1. 22 33
      lib/db/instance.go

+ 22 - 33
lib/db/instance.go

@@ -34,24 +34,23 @@ func (db *instance) updateFiles(folder, device []byte, fs []protocol.FileInfo, m
 	t := db.newReadWriteTransaction()
 	defer t.close()
 
-	var fk []byte
-	var gk []byte
+	var dk, gk []byte
+	devID := protocol.DeviceIDFromBytes(device)
 	for _, f := range fs {
 		name := []byte(f.Name)
-		fk = db.keyer.GenerateDeviceFileKey(fk, folder, device, name)
+		dk = db.keyer.GenerateDeviceFileKey(dk, folder, device, name)
 
-		ef, ok := t.getFileTrunc(fk, true)
+		ef, ok := t.getFileTrunc(dk, true)
 		if ok && unchanged(f, ef) {
 			continue
 		}
 
-		devID := protocol.DeviceIDFromBytes(device)
 		if ok {
 			meta.removeFile(devID, ef)
 		}
 		meta.addFile(devID, f)
 
-		t.insertFile(fk, folder, device, f)
+		t.insertFile(dk, folder, device, f)
 
 		gk = db.keyer.GenerateGlobalVersionKey(gk, folder, name)
 		t.updateGlobal(gk, folder, device, f, meta)
@@ -66,8 +65,7 @@ func (db *instance) addSequences(folder []byte, fs []protocol.FileInfo) {
 	t := db.newReadWriteTransaction()
 	defer t.close()
 
-	var sk []byte
-	var dk []byte
+	var dk, sk []byte
 	for _, f := range fs {
 		sk = db.keyer.GenerateSequenceKey(sk, folder, f.Sequence)
 		dk = db.keyer.GenerateDeviceFileKey(dk, folder, protocol.LocalDeviceID[:], []byte(f.Name))
@@ -159,7 +157,6 @@ func (db *instance) withAllFolderTruncated(folder []byte, fn func(device []byte,
 	defer dbi.Release()
 
 	var gk []byte
-
 	for dbi.Next() {
 		device, ok := db.keyer.DeviceFromDeviceFileKey(dbi.Key())
 		if !ok {
@@ -230,7 +227,7 @@ func (db *instance) withGlobal(folder, prefix []byte, truncate bool, fn Iterator
 	dbi := t.NewIterator(util.BytesPrefix(db.keyer.GenerateGlobalVersionKey(nil, folder, prefix)), nil)
 	defer dbi.Release()
 
-	var fk []byte
+	var dk []byte
 	for dbi.Next() {
 		name := db.keyer.NameFromGlobalVersionKey(dbi.Key())
 		if len(prefix) > 0 && !bytes.HasPrefix(name, prefix) {
@@ -242,9 +239,9 @@ func (db *instance) withGlobal(folder, prefix []byte, truncate bool, fn Iterator
 			continue
 		}
 
-		fk = db.keyer.GenerateDeviceFileKey(fk, folder, vl.Versions[0].Device, name)
+		dk = db.keyer.GenerateDeviceFileKey(dk, folder, vl.Versions[0].Device, name)
 
-		f, ok := t.getFileTrunc(fk, truncate)
+		f, ok := t.getFileTrunc(dk, truncate)
 		if !ok {
 			continue
 		}
@@ -298,7 +295,8 @@ func (db *instance) withNeed(folder, device []byte, truncate bool, fn Iterator)
 	dbi := t.NewIterator(util.BytesPrefix(db.keyer.GenerateGlobalVersionKey(nil, folder, nil).WithoutName()), nil)
 	defer dbi.Release()
 
-	var fk []byte
+	var dk []byte
+	devID := protocol.DeviceIDFromBytes(device)
 	for dbi.Next() {
 		vl, ok := unmarshalVersionList(dbi.Value())
 		if !ok {
@@ -328,8 +326,8 @@ func (db *instance) withNeed(folder, device []byte, truncate bool, fn Iterator)
 				continue
 			}
 
-			fk = db.keyer.GenerateDeviceFileKey(fk, folder, vl.Versions[i].Device, name)
-			bs, err := t.Get(fk, nil)
+			dk = db.keyer.GenerateDeviceFileKey(dk, folder, vl.Versions[i].Device, name)
+			bs, err := t.Get(dk, nil)
 			if err != nil {
 				l.Debugln("surprise error:", err)
 				continue
@@ -346,7 +344,7 @@ func (db *instance) withNeed(folder, device []byte, truncate bool, fn Iterator)
 				break
 			}
 
-			l.Debugf("need folder=%q device=%v name=%q have=%v invalid=%v haveV=%v globalV=%v globalDev=%v", folder, protocol.DeviceIDFromBytes(device), name, have, haveFV.Invalid, haveFV.Version, needVersion, needDevice)
+			l.Debugf("need folder=%q device=%v name=%q have=%v invalid=%v haveV=%v globalV=%v globalDev=%v", folder, devID, name, have, haveFV.Invalid, haveFV.Version, needVersion, needDevice)
 
 			if !fn(gf) {
 				return
@@ -365,8 +363,7 @@ func (db *instance) withNeedLocal(folder []byte, truncate bool, fn Iterator) {
 	dbi := t.NewIterator(util.BytesPrefix(db.keyer.GenerateNeedFileKey(nil, folder, nil).WithoutName()), nil)
 	defer dbi.Release()
 
-	var dk []byte
-	var gk []byte
+	var gk, dk []byte
 	var f FileIntf
 	var ok bool
 	for dbi.Next() {
@@ -406,7 +403,6 @@ func (db *instance) dropDeviceFolder(device, folder []byte, meta *metadataTracke
 	defer dbi.Release()
 
 	var gk []byte
-
 	for dbi.Next() {
 		key := dbi.Key()
 		name := db.keyer.NameFromDeviceFileKey(key)
@@ -424,7 +420,7 @@ func (db *instance) checkGlobals(folder []byte, meta *metadataTracker) {
 	dbi := t.NewIterator(util.BytesPrefix(db.keyer.GenerateGlobalVersionKey(nil, folder, nil).WithoutName()), nil)
 	defer dbi.Release()
 
-	var fk []byte
+	var dk []byte
 	for dbi.Next() {
 		vl, ok := unmarshalVersionList(dbi.Value())
 		if !ok {
@@ -439,8 +435,8 @@ func (db *instance) checkGlobals(folder []byte, meta *metadataTracker) {
 		name := db.keyer.NameFromGlobalVersionKey(dbi.Key())
 		var newVL VersionList
 		for i, version := range vl.Versions {
-			fk = db.keyer.GenerateDeviceFileKey(fk, folder, version.Device, name)
-			_, err := t.Get(fk, nil)
+			dk = db.keyer.GenerateDeviceFileKey(dk, folder, version.Device, name)
+			_, err := t.Get(dk, nil)
 			if err == leveldb.ErrNotFound {
 				continue
 			}
@@ -451,7 +447,7 @@ func (db *instance) checkGlobals(folder []byte, meta *metadataTracker) {
 			newVL.Versions = append(newVL.Versions, version)
 
 			if i == 0 {
-				if fi, ok := t.getFileByKey(fk); ok {
+				if fi, ok := t.getFileByKey(dk); ok {
 					meta.addFile(protocol.GlobalDeviceID, fi)
 				}
 			}
@@ -466,8 +462,7 @@ func (db *instance) checkGlobals(folder []byte, meta *metadataTracker) {
 }
 
 func (db *instance) getIndexID(device, folder []byte) protocol.IndexID {
-	key := db.keyer.GenerateIndexIDKey(nil, device, folder)
-	cur, err := db.Get(key, nil)
+	cur, err := db.Get(db.keyer.GenerateIndexIDKey(nil, device, folder), nil)
 	if err != nil {
 		return 0
 	}
@@ -481,9 +476,8 @@ func (db *instance) getIndexID(device, folder []byte) protocol.IndexID {
 }
 
 func (db *instance) setIndexID(device, folder []byte, id protocol.IndexID) {
-	key := db.keyer.GenerateIndexIDKey(nil, device, folder)
 	bs, _ := id.Marshal() // marshalling can't fail
-	if err := db.Put(key, bs, nil); err != nil {
+	if err := db.Put(db.keyer.GenerateIndexIDKey(nil, device, folder), bs, nil); err != nil {
 		panic("storing index ID: " + err.Error())
 	}
 }
@@ -500,12 +494,7 @@ func (db *instance) dropPrefix(prefix []byte) {
 	t := db.newReadWriteTransaction()
 	defer t.close()
 
-	dbi := t.NewIterator(util.BytesPrefix(prefix), nil)
-	defer dbi.Release()
-
-	for dbi.Next() {
-		t.Delete(dbi.Key())
-	}
+	t.deleteKeyPrefix(prefix)
 }
 
 func unmarshalTrunc(bs []byte, truncate bool) (FileIntf, error) {