Quellcode durchsuchen

оптимизации

κρμγ vor 8 Jahren
Ursprung
Commit
3fc3cd0920
3 geänderte Dateien mit 21 neuen und 19 gelöschten Zeilen
  1. 1 0
      dav_multiuser_cmd/main.go
  2. 17 12
      dav_multiuser_cmd/userfs.go
  3. 3 7
      ipfs_api/api.go

+ 1 - 0
dav_multiuser_cmd/main.go

@@ -9,6 +9,7 @@ import (
 	"github.com/tv42/zbase32"
 	"log"
 	"net/http"
+	_ "net/http/pprof"
 	"os"
 )
 

+ 17 - 12
dav_multiuser_cmd/userfs.go

@@ -15,6 +15,7 @@ import (
 )
 
 var um cmap.ConcurrentMap = cmap.New()
+var rm cmap.ConcurrentMap = cmap.New()
 
 type FileLockSys struct {
 	fs  webdav.FileSystem
@@ -31,11 +32,11 @@ func handler() http.Handler {
 		return
 	}).Wrap(func(resp http.ResponseWriter, req *auth.AuthenticatedRequest) {
 		if !um.Has(req.Username) {
+			user := zbase32.EncodeToString([]byte(req.Username))
 			fl := new(FileLockSys)
 
-			rootCh := make(chan string, 256)
+			rootWr := make(chan string, 256)
 			go func(ch chan string, user string) {
-				user = zbase32.EncodeToString([]byte(user))
 				for {
 					i := 0
 					for s := range ch {
@@ -51,24 +52,28 @@ func handler() http.Handler {
 								i++
 							}
 							KV.Write(user+".root", []byte(s))
+
 						} else {
 							Halt(100, "empty root")
 						}
 					}
 				}
-			}(rootCh, req.Username)
+			}(rootWr, user)
+
+			defaultRoot := wdfs.EmptyDirHash
+			if r, err := KV.Read(user + ".root"); err == nil && len(r) > 0 {
+				defaultRoot = string(r)
+			} else {
+				KV.Write(user+".root", []byte(defaultRoot))
+			}
+			rm.Set(user+".root", defaultRoot)
 
 			fs := wdfs.NewFS(func() string {
-				user := zbase32.EncodeToString([]byte(req.Username))
-				defaultRoot := wdfs.EmptyDirHash
-				if r, err := KV.Read(user + ".root"); err == nil && len(r) > 0 {
-					defaultRoot = string(r)
-				} else {
-					KV.Write(user+".root", []byte(defaultRoot))
-				}
-				return defaultRoot
+				r, _ := rm.Get(user + ".root")
+				return r.(string)
 			}, func(hash string) {
-				rootCh <- hash
+				rm.Set(user+".root", hash)
+				rootWr <- hash
 			})
 			fl.fs = fs
 			fl.ls = wdfs.NewLS(fs)

+ 3 - 7
ipfs_api/api.go

@@ -18,14 +18,10 @@ type MyShell struct {
 }
 
 func reset() {
-	if sh == nil || !sh.IsUp() {
+	if sh == nil {
 		sh = &MyShell{
-			Url: Addr,
-			Client: &http.Client{
-				Transport: &http.Transport{
-					DisableKeepAlives: true,
-				},
-			},
+			Url:    Addr,
+			Client: http.DefaultClient,
 		}
 		sh.Shell = *shell.NewShellWithClient(sh.Url, sh.Client)
 		if id, err := sh.ID(); err == nil {