From aeb9d26bbd3a8c35a8ad02d33cf9ade374ff8138 Mon Sep 17 00:00:00 2001 From: hexxa Date: Fri, 12 Aug 2022 19:43:04 +0800 Subject: [PATCH] feat(server): add flag for skipping indexing in launching --- src/server/config.go | 2 ++ src/server/config_load_test.go | 4 +++ src/server/server.go | 58 +++++++++++++++++++++------------ src/server/server_files_test.go | 3 +- 4 files changed, 46 insertions(+), 21 deletions(-) diff --git a/src/server/config.go b/src/server/config.go index b840baf..2d5e9f1 100644 --- a/src/server/config.go +++ b/src/server/config.go @@ -51,6 +51,7 @@ type ServerCfg struct { MaxHeaderBytes int `json:"maxHeaderBytes" yaml:"maxHeaderBytes"` PublicPath string `json:"publicPath" yaml:"publicPath"` SearchResultLimit int `json:"searchResultLimit" yaml:"searchResultLimit"` + InitFileIndex bool `json:"initFileIndex" yaml:"initFileIndex"` } type WorkerPoolCfg struct { @@ -116,6 +117,7 @@ func DefaultConfigStruct() *Config { MaxHeaderBytes: 512, PublicPath: "static/public", SearchResultLimit: 16, + InitFileIndex: true, }, Workers: &WorkerPoolCfg{ QueueSize: 1024, diff --git a/src/server/config_load_test.go b/src/server/config_load_test.go index 78d5c78..9a352c0 100644 --- a/src/server/config_load_test.go +++ b/src/server/config_load_test.go @@ -134,6 +134,7 @@ func TestLoadCfg(t *testing.T) { MaxHeaderBytes: 1, PublicPath: "1", SearchResultLimit: 16, + InitFileIndex: true, }, Workers: &WorkerPoolCfg{ QueueSize: 1, @@ -201,6 +202,7 @@ func TestLoadCfg(t *testing.T) { MaxHeaderBytes: 4, PublicPath: "4", SearchResultLimit: 16, + InitFileIndex: true, }, Workers: &WorkerPoolCfg{ QueueSize: 4, @@ -270,6 +272,7 @@ func TestLoadCfg(t *testing.T) { MaxHeaderBytes: 4, PublicPath: "4", SearchResultLimit: 16, + InitFileIndex: true, }, Workers: &WorkerPoolCfg{ QueueSize: 4, @@ -339,6 +342,7 @@ func TestLoadCfg(t *testing.T) { MaxHeaderBytes: 4, PublicPath: "4", SearchResultLimit: 16, + InitFileIndex: true, }, Workers: &WorkerPoolCfg{ QueueSize: 4, diff --git a/src/server/server.go b/src/server/server.go index 4891a9d..1a10364 100644 --- a/src/server/server.go +++ b/src/server/server.go @@ -4,6 +4,7 @@ import ( "context" "crypto/rand" "crypto/sha1" + "encoding/json" "errors" "fmt" "net/http" @@ -123,6 +124,7 @@ func mkRoot(rootPath string) { } func initDeps(cfg gocfg.ICfg) *depidx.Deps { + var err error logger := initLogger(cfg) secret, ok := cfg.String("ENV.TOKENSECRET") @@ -141,25 +143,6 @@ func initDeps(cfg gocfg.ICfg) *depidx.Deps { filesystem := local.NewLocalFS(rootPath, 0660, opensLimit, openTTL, readerTTL, ider) jwtEncDec := jwt.NewJWTEncDec(secret) - searchResultLimit := cfg.GrabInt("Server.SearchResultLimit") - fileIndex := fileindex.NewFileTreeIndex(filesystem, "/", searchResultLimit) - - indexInfo, err := filesystem.Stat(fileIndexPath) - if err != nil { - if !os.IsNotExist(err) { - panic(fmt.Sprintf("failed to detect file index: %s", err)) - } else { - logger.Info("warning: no file index found") - } - } else if indexInfo.IsDir() { - panic(fmt.Sprintf("file index is folder, not file: %s", fileIndexPath)) - } else { - err = fileIndex.ReadFrom(fileIndexPath) - if err != nil { - panic(fmt.Sprintf("failed to load file index: %s", err)) - } - } - dbPath := cfg.GrabString("Db.DbPath") dbDir := filepath.Dir(dbPath) if err = filesystem.MkdirAll(dbDir); err != nil { @@ -216,7 +199,6 @@ func initDeps(cfg gocfg.ICfg) *depidx.Deps { deps.SetID(ider) deps.SetLog(logger) deps.SetLimiter(limiter) - deps.SetIFileIndex(fileIndex) queueSize := cfg.GrabInt("Workers.QueueSize") sleepCyc := cfg.GrabInt("Workers.SleepCyc") @@ -226,6 +208,42 @@ func initDeps(cfg gocfg.ICfg) *depidx.Deps { workers.Start() deps.SetWorkers(workers) + searchResultLimit := cfg.GrabInt("Server.SearchResultLimit") + initFileIndex := cfg.GrabBool("Server.InitFileIndex") + fileIndex := fileindex.NewFileTreeIndex(filesystem, "/", searchResultLimit) + indexInfo, err := filesystem.Stat(fileIndexPath) + inited := false + if err != nil { + if !os.IsNotExist(err) { + logger.Infof("failed to detect file index: %s", err) + } else { + logger.Info("warning: no file index found") + } + } else if indexInfo.IsDir() { + logger.Infof("file index is folder, not file: %s", fileIndexPath) + } else { + err = fileIndex.ReadFrom(fileIndexPath) + if err != nil { + logger.Infof("failed to load file index: %s", err) + } else { + inited = true + } + } + if !inited && initFileIndex { + msg, _ := json.Marshal(fileshdr.IndexingParams{}) + err = deps.Workers().TryPut( + localworker.NewMsg( + deps.ID().Gen(), + map[string]string{localworker.MsgTypeKey: fileshdr.MsgTypeIndexing}, + string(msg), + ), + ) + if err != nil { + logger.Infof("failed to reindex file index: %s", err) + } + } + deps.SetIFileIndex(fileIndex) + return deps } diff --git a/src/server/server_files_test.go b/src/server/server_files_test.go index 50dcafa..48643a2 100644 --- a/src/server/server_files_test.go +++ b/src/server/server_files_test.go @@ -40,7 +40,8 @@ func TestFileHandlers(t *testing.T) { }, "server": { "debug": true, - "host": "127.0.0.1" + "host": "127.0.0.1", + "initFileIndex": true }, "fs": { "root": "tmpTestData"