Add: support config single thread
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user