Просмотр исходного кода

lib/db: Add "dirty" function terminology to getGlobal (ref #5462) (#5463)

Simon Frei 6 лет назад
Родитель
Сommit
1f87b874af
3 измененных файлов с 27 добавлено и 27 удалено
  1. 4 25
      lib/db/instance.go
  2. 2 2
      lib/db/set.go
  3. 21 0
      lib/db/transactions.go

+ 4 - 25
lib/db/instance.go

@@ -224,35 +224,14 @@ func (db *instance) getFileDirty(folder, device, file []byte) (protocol.FileInfo
 	return f, true
 }
 
-func (db *instance) getGlobal(folder, file []byte, truncate bool) (FileIntf, bool) {
+func (db *instance) getGlobalDirty(folder, file []byte, truncate bool) (FileIntf, bool) {
 	t := db.newReadOnlyTransaction()
 	defer t.close()
 
-	_, _, f, ok := db.getGlobalInto(t, nil, nil, folder, file, truncate)
+	_, _, f, ok := t.getGlobalInto(nil, nil, folder, file, truncate)
 	return f, ok
 }
 
-func (db *instance) getGlobalInto(t readOnlyTransaction, gk, dk, folder, file []byte, truncate bool) ([]byte, []byte, FileIntf, bool) {
-	gk = db.keyer.GenerateGlobalVersionKey(gk, folder, file)
-
-	bs, err := t.Get(gk, nil)
-	if err != nil {
-		return gk, dk, nil, false
-	}
-
-	vl, ok := unmarshalVersionList(bs)
-	if !ok {
-		return gk, dk, nil, false
-	}
-
-	dk = db.keyer.GenerateDeviceFileKey(dk, folder, vl.Versions[0].Device, file)
-	if fi, ok := t.getFileTrunc(dk, truncate); ok {
-		return gk, dk, fi, true
-	}
-
-	return gk, dk, nil, false
-}
-
 func (db *instance) withGlobal(folder, prefix []byte, truncate bool, fn Iterator) {
 	t := db.newReadOnlyTransaction()
 	defer t.close()
@@ -265,7 +244,7 @@ func (db *instance) withGlobal(folder, prefix []byte, truncate bool, fn Iterator
 			prefix = append(prefix, '/')
 		}
 
-		if _, _, f, ok := db.getGlobalInto(t, nil, nil, folder, unslashedPrefix, truncate); ok && !fn(f) {
+		if _, _, f, ok := t.getGlobalInto(nil, nil, folder, unslashedPrefix, truncate); ok && !fn(f) {
 			return
 		}
 	}
@@ -413,7 +392,7 @@ func (db *instance) withNeedLocal(folder []byte, truncate bool, fn Iterator) {
 	var f FileIntf
 	var ok bool
 	for dbi.Next() {
-		gk, dk, f, ok = db.getGlobalInto(t, gk, dk, folder, db.keyer.NameFromGlobalVersionKey(dbi.Key()), truncate)
+		gk, dk, f, ok = t.getGlobalInto(gk, dk, folder, db.keyer.NameFromGlobalVersionKey(dbi.Key()), truncate)
 		if !ok {
 			continue
 		}

+ 2 - 2
lib/db/set.go

@@ -250,7 +250,7 @@ func (s *FileSet) Get(device protocol.DeviceID, file string) (protocol.FileInfo,
 }
 
 func (s *FileSet) GetGlobal(file string) (protocol.FileInfo, bool) {
-	fi, ok := s.db.getGlobal([]byte(s.folder), []byte(osutil.NormalizedFilename(file)), false)
+	fi, ok := s.db.getGlobalDirty([]byte(s.folder), []byte(osutil.NormalizedFilename(file)), false)
 	if !ok {
 		return protocol.FileInfo{}, false
 	}
@@ -260,7 +260,7 @@ func (s *FileSet) GetGlobal(file string) (protocol.FileInfo, bool) {
 }
 
 func (s *FileSet) GetGlobalTruncated(file string) (FileInfoTruncated, bool) {
-	fi, ok := s.db.getGlobal([]byte(s.folder), []byte(osutil.NormalizedFilename(file)), true)
+	fi, ok := s.db.getGlobalDirty([]byte(s.folder), []byte(osutil.NormalizedFilename(file)), true)
 	if !ok {
 		return FileInfoTruncated{}, false
 	}

+ 21 - 0
lib/db/transactions.go

@@ -65,6 +65,27 @@ func (t readOnlyTransaction) getFileTrunc(key []byte, trunc bool) (FileIntf, boo
 	return f, true
 }
 
+func (t readOnlyTransaction) getGlobalInto(gk, dk, folder, file []byte, truncate bool) ([]byte, []byte, FileIntf, bool) {
+	gk = t.db.keyer.GenerateGlobalVersionKey(gk, folder, file)
+
+	bs, err := t.Get(gk, nil)
+	if err != nil {
+		return gk, dk, nil, false
+	}
+
+	vl, ok := unmarshalVersionList(bs)
+	if !ok {
+		return gk, dk, nil, false
+	}
+
+	dk = t.db.keyer.GenerateDeviceFileKey(dk, folder, vl.Versions[0].Device, file)
+	if fi, ok := t.getFileTrunc(dk, truncate); ok {
+		return gk, dk, fi, true
+	}
+
+	return gk, dk, nil, false
+}
+
 // A readWriteTransaction is a readOnlyTransaction plus a batch for writes.
 // The batch will be committed on close() or by checkFlush() if it exceeds the
 // batch size.