|
@@ -29,6 +29,11 @@ import (
|
|
|
"github.com/syncthing/syncthing/lib/weakhash"
|
|
|
)
|
|
|
|
|
|
+var (
|
|
|
+ blockStats = make(map[string]int)
|
|
|
+ blockStatsMut = sync.NewMutex()
|
|
|
+)
|
|
|
+
|
|
|
func init() {
|
|
|
folderFactories[config.FolderTypeSendReceive] = newSendReceiveFolder
|
|
|
}
|
|
@@ -91,9 +96,6 @@ type sendReceiveFolder struct {
|
|
|
|
|
|
errors map[string]string // path -> error string
|
|
|
errorsMut sync.Mutex
|
|
|
-
|
|
|
- blockStats map[string]int
|
|
|
- blockStatsMut sync.Mutex
|
|
|
}
|
|
|
|
|
|
func newSendReceiveFolder(model *Model, cfg config.FolderConfiguration, ver versioner.Versioner, fs fs.Filesystem) service {
|
|
@@ -107,9 +109,6 @@ func newSendReceiveFolder(model *Model, cfg config.FolderConfiguration, ver vers
|
|
|
pullScheduled: make(chan struct{}, 1), // This needs to be 1-buffered so that we queue a pull if we're busy when it comes.
|
|
|
|
|
|
errorsMut: sync.NewMutex(),
|
|
|
-
|
|
|
- blockStats: make(map[string]int),
|
|
|
- blockStatsMut: sync.NewMutex(),
|
|
|
}
|
|
|
|
|
|
f.configureCopiersAndPullers()
|
|
@@ -886,10 +885,10 @@ func (f *sendReceiveFolder) renameFile(source, target protocol.FileInfo) {
|
|
|
}
|
|
|
|
|
|
if err == nil {
|
|
|
- f.blockStatsMut.Lock()
|
|
|
- f.blockStats["total"] += len(target.Blocks)
|
|
|
- f.blockStats["renamed"] += len(target.Blocks)
|
|
|
- f.blockStatsMut.Unlock()
|
|
|
+ blockStatsMut.Lock()
|
|
|
+ blockStats["total"] += len(target.Blocks)
|
|
|
+ blockStats["renamed"] += len(target.Blocks)
|
|
|
+ blockStatsMut.Unlock()
|
|
|
|
|
|
// The file was renamed, so we have handled both the necessary delete
|
|
|
// of the source and the creation of the target. Fix-up the metadata,
|
|
@@ -1457,14 +1456,16 @@ func (f *sendReceiveFolder) finisherRoutine(in <-chan *sharedPullerState) {
|
|
|
if err != nil {
|
|
|
f.newError("finisher", state.file.Name, err)
|
|
|
} else {
|
|
|
- f.blockStatsMut.Lock()
|
|
|
- f.blockStats["total"] += state.reused + state.copyTotal + state.pullTotal
|
|
|
- f.blockStats["reused"] += state.reused
|
|
|
- f.blockStats["pulled"] += state.pullTotal
|
|
|
- f.blockStats["copyOrigin"] += state.copyOrigin
|
|
|
- f.blockStats["copyOriginShifted"] += state.copyOriginShifted
|
|
|
- f.blockStats["copyElsewhere"] += state.copyTotal - state.copyOrigin
|
|
|
- f.blockStatsMut.Unlock()
|
|
|
+ blockStatsMut.Lock()
|
|
|
+ blockStats["total"] += state.reused + state.copyTotal + state.pullTotal
|
|
|
+ blockStats["reused"] += state.reused
|
|
|
+ blockStats["pulled"] += state.pullTotal
|
|
|
+ // copyOriginShifted is counted towards copyOrigin due to progress bar reasons
|
|
|
+ // for reporting reasons we want to separate these.
|
|
|
+ blockStats["copyOrigin"] += state.copyOrigin - state.copyOriginShifted
|
|
|
+ blockStats["copyOriginShifted"] += state.copyOriginShifted
|
|
|
+ blockStats["copyElsewhere"] += state.copyTotal - state.copyOrigin
|
|
|
+ blockStatsMut.Unlock()
|
|
|
}
|
|
|
|
|
|
events.Default.Log(events.ItemFinished, map[string]interface{}{
|
|
@@ -1482,16 +1483,6 @@ func (f *sendReceiveFolder) finisherRoutine(in <-chan *sharedPullerState) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func (f *sendReceiveFolder) BlockStats() map[string]int {
|
|
|
- f.blockStatsMut.Lock()
|
|
|
- stats := make(map[string]int)
|
|
|
- for k, v := range f.blockStats {
|
|
|
- stats[k] = v
|
|
|
- }
|
|
|
- f.blockStatsMut.Unlock()
|
|
|
- return stats
|
|
|
-}
|
|
|
-
|
|
|
// Moves the given filename to the front of the job queue
|
|
|
func (f *sendReceiveFolder) BringToFront(filename string) {
|
|
|
f.queue.BringToFront(filename)
|