]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Disable shared file reader for now
authorMatt Joiner <anacrolix@gmail.com>
Thu, 29 May 2025 06:10:32 +0000 (16:10 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Thu, 29 May 2025 06:10:32 +0000 (16:10 +1000)
storage/file-handle-cache.go
storage/file-torrent-io.go

index 97c1506524c91009a74eb405702d5981a84fae25..dbc3354bd2a91f81b097107f28b8131a2ffb90e2 100644 (file)
@@ -14,24 +14,29 @@ import (
 )
 
 var (
-       sharedFiles = sharedFilesType{
-               m: make(map[string]*sharedFile),
-       }
+       sharedFiles sharedFilesInterface = regularFsSharedFiles{}
+
+       wipSharedFilesPool = sharedFilesType{m: make(map[string]*sharedFile)}
 )
 
+type regularFsSharedFiles struct{}
+
+func (r regularFsSharedFiles) Open(name string) (sharedFileIf, error) {
+       return os.Open(name)
+}
+
+type sharedFileIf interface {
+       io.ReaderAt
+       io.Closer
+}
+
+type sharedFilesInterface interface {
+       Open(name string) (sharedFileIf, error)
+}
+
 func init() {
        http.HandleFunc("/debug/shared-files", func(w http.ResponseWriter, r *http.Request) {
-               sharedFiles.mu.Lock()
-               defer sharedFiles.mu.Unlock()
-               byRefs := slices.SortedFunc(maps.Keys(sharedFiles.m), func(a, b string) int {
-                       return cmp.Or(
-                               sharedFiles.m[b].refs-sharedFiles.m[a].refs,
-                               cmp.Compare(a, b))
-               })
-               for _, key := range byRefs {
-                       sf := sharedFiles.m[key]
-                       fmt.Fprintf(w, "%v: refs=%v, name=%v\n", key, sf.refs, sf.f.Name())
-               }
+               wipSharedFilesPool.WriteDebug(w)
        })
 }
 
@@ -40,6 +45,20 @@ type sharedFilesType struct {
        m  map[string]*sharedFile
 }
 
+func (sharedFiles *sharedFilesType) WriteDebug(w io.Writer) {
+       sharedFiles.mu.Lock()
+       defer sharedFiles.mu.Unlock()
+       byRefs := slices.SortedFunc(maps.Keys(sharedFiles.m), func(a, b string) int {
+               return cmp.Or(
+                       sharedFiles.m[b].refs-sharedFiles.m[a].refs,
+                       cmp.Compare(a, b))
+       })
+       for _, key := range byRefs {
+               sf := sharedFiles.m[key]
+               fmt.Fprintf(w, "%v: refs=%v, name=%v\n", key, sf.refs, sf.f.Name())
+       }
+}
+
 // How many opens wouldn't have been needed with singleflight.
 var sharedFilesWastedOpens = expvar.NewInt("sharedFilesWastedOpens")
 
index 96e1acd09e445d6957f2e29fed7c9c7230872561..e57690e0a58c336e494a73a1b44335b87d587708 100644 (file)
@@ -18,10 +18,7 @@ type fileTorrentImplIO struct {
 // Returns EOF on short or missing file.
 func (fst fileTorrentImplIO) readFileAt(file file, b []byte, off int64) (n int, err error) {
        fst.fts.logger().Debug("readFileAt", "file.safeOsPath", file.safeOsPath)
-       var f interface {
-               io.ReaderAt
-               io.Closer
-       }
+       var f sharedFileIf
        // Fine to open once under each name on a unix system. We could make the shared file keys more
        // constrained but it shouldn't matter. TODO: Ensure at most one of the names exist.
        if fst.fts.partFiles() {