Add: support config single thread

This commit is contained in:
2021-12-15 09:11:03 +08:00
parent 97083114fb
commit 73828c547c
3 changed files with 41 additions and 15 deletions

View File

@@ -1,6 +1,7 @@
{ {
"api": { "api": {
"database_name": "music.sqlite3", "database_name": "music.sqlite3",
"single_thread": true,
"addr": ":8080", "addr": ":8080",
"token": "!! config your very strong token here !!", "token": "!! config your very strong token here !!",
"ffmpeg_threads": 1, "ffmpeg_threads": 1,

View File

@@ -9,13 +9,13 @@ import (
) )
type API struct { type API struct {
Db *database.Database Db *database.Database
Server http.Server Server http.Server
token string token string
APIConfig APIConfig APIConfig APIConfig
Tmpfs *tmpfs.Tmpfs Tmpfs *tmpfs.Tmpfs
store *sessions.CookieStore store *sessions.CookieStore
defaultSessionName string defaultSessionName string
} }
func NewAPIConfig() APIConfig { func NewAPIConfig() APIConfig {
@@ -25,6 +25,7 @@ func NewAPIConfig() APIConfig {
type APIConfig struct { type APIConfig struct {
DatabaseName string `json:"database_name"` DatabaseName string `json:"database_name"`
SingleThread bool `json:"single_thread,default=true"`
Addr string `json:"addr"` Addr string `json:"addr"`
Token string `json:"token"` Token string `json:"token"`
FfmpegThreads int64 `json:"ffmpeg_threads"` FfmpegThreads int64 `json:"ffmpeg_threads"`
@@ -42,12 +43,12 @@ func NewAPI(config Config) (*API, error) {
apiConfig := config.APIConfig apiConfig := config.APIConfig
tmpfsConfig := config.TmpfsConfig tmpfsConfig := config.TmpfsConfig
db, err := database.NewDatabase(apiConfig.DatabaseName) db, err := database.NewDatabase(apiConfig.DatabaseName, apiConfig.SingleThread)
if err != nil { if err != nil {
return nil, err return nil, err
} }
store := sessions.NewCookieStore([]byte(os.Getenv("SESSION_KEY"))) store := sessions.NewCookieStore([]byte(os.Getenv("SESSION_KEY")))
mux := http.NewServeMux() mux := http.NewServeMux()
apiMux := http.NewServeMux() apiMux := http.NewServeMux()
@@ -58,9 +59,9 @@ func NewAPI(config Config) (*API, error) {
Addr: apiConfig.Addr, Addr: apiConfig.Addr,
Handler: mux, Handler: mux,
}, },
APIConfig: apiConfig, APIConfig: apiConfig,
store: store, store: store,
defaultSessionName: "msw-open-music", defaultSessionName: "msw-open-music",
} }
api.Tmpfs = tmpfs.NewTmpfs(tmpfsConfig) api.Tmpfs = tmpfs.NewTmpfs(tmpfsConfig)

View File

@@ -10,10 +10,34 @@ import (
type Database struct { type Database struct {
sqlConn *sql.DB sqlConn *sql.DB
stmt *Stmt stmt *Stmt
singleThreadLock *sync.Mutex singleThreadLock SingleThreadLock
} }
func NewDatabase(dbName string) (*Database, error) { func NewSingleThreadLock(enabled bool) SingleThreadLock {
return SingleThreadLock{
lock: sync.Mutex{},
enabled: enabled,
}
}
type SingleThreadLock struct {
lock sync.Mutex
enabled bool
}
func (stl *SingleThreadLock) Lock() {
if stl.enabled {
stl.lock.Lock()
}
}
func (stl *SingleThreadLock) Unlock() {
if stl.enabled {
stl.lock.Unlock()
}
}
func NewDatabase(dbName string, singleThread bool) (*Database, error) {
var err error var err error
// open database // open database
@@ -32,7 +56,7 @@ func NewDatabase(dbName string) (*Database, error) {
database := &Database{ database := &Database{
sqlConn: sqlConn, sqlConn: sqlConn,
stmt: stmt, stmt: stmt,
singleThreadLock: &sync.Mutex{}, singleThreadLock: NewSingleThreadLock(singleThread),
} }
return database, nil return database, nil