]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Remove unecessary completion "set" (#812)
authorColin Marc <hi@colinmarc.com>
Mon, 13 Feb 2023 03:26:03 +0000 (04:26 +0100)
committerGitHub <noreply@github.com>
Mon, 13 Feb 2023 03:26:03 +0000 (14:26 +1100)
If the file has never been downloaded, complete will naturally be false. It's
not necessary to then set it false again unless it was actually claimed to be
true in the first place.

In my tests, using the boltdb completion thingy with fsync turned *on*, this
reduced the cold start for big buck bunny from multiple seconds to just a few
ms.

storage/file-piece.go

index 23cf4eecb540fcce5b32278c6e4835db2c30c3ac..47772017e3e1680f28a8e4de7bb74aa40202aa5f 100644 (file)
@@ -28,20 +28,25 @@ func (fs *filePieceImpl) Completion() Completion {
                c.Ok = false
                return c
        }
+
+       verified := true
        if c.Complete {
                // If it's allegedly complete, check that its constituent files have the necessary length.
                for _, fi := range extentCompleteRequiredLengths(fs.p.Info, fs.p.Offset(), fs.p.Length()) {
                        s, err := os.Stat(fs.files[fi.fileIndex].path)
                        if err != nil || s.Size() < fi.length {
-                               c.Complete = false
+                               verified = false
                                break
                        }
                }
        }
-       if !c.Complete {
+
+       if !verified {
                // The completion was wrong, fix it.
+               c.Complete = false
                fs.completion.Set(fs.pieceKey(), false)
        }
+
        return c
 }