Disable multithreaded scanners for sqlite

as it's not reliable
This commit is contained in:
viktorstrate
2021-01-17 13:08:44 +01:00
parent fcdb5b4e7b
commit 50d0aa0efb
4 changed files with 45 additions and 6 deletions

View File

@@ -5,9 +5,9 @@ import (
"log" "log"
"net/url" "net/url"
"os" "os"
"strings"
"time" "time"
"github.com/photoview/photoview/api/database/drivers"
"github.com/photoview/photoview/api/graphql/models" "github.com/photoview/photoview/api/graphql/models"
"github.com/pkg/errors" "github.com/pkg/errors"
@@ -66,9 +66,8 @@ func SetupDatabase() (*gorm.DB, error) {
config.Logger = logger.Default.LogMode(logger.Info) config.Logger = logger.Default.LogMode(logger.Info)
var databaseDialect gorm.Dialector var databaseDialect gorm.Dialector
databaseDriver := strings.ToLower(os.Getenv("PHOTOVIEW_DATABASE_DRIVER")) switch drivers.DatabaseDriver() {
switch databaseDriver { case drivers.DatabaseDriverMysql:
case "mysql":
mysqlAddress, err := getMysqlAddress() mysqlAddress, err := getMysqlAddress()
if err != nil { if err != nil {
return nil, err return nil, err
@@ -76,7 +75,7 @@ func SetupDatabase() (*gorm.DB, error) {
log.Printf("Connecting to database: %s", mysqlAddress) log.Printf("Connecting to database: %s", mysqlAddress)
databaseDialect = mysql.Open(mysqlAddress.String()) databaseDialect = mysql.Open(mysqlAddress.String())
case "sqlite": case drivers.DatabaseDriverSqlite:
sqliteAddress, err := getSqliteAddress() sqliteAddress, err := getSqliteAddress()
if err != nil { if err != nil {
return nil, err return nil, err

View File

@@ -0,0 +1,28 @@
package drivers
import (
"os"
"strings"
)
type DatabaseDriverType string
const (
DatabaseDriverMysql DatabaseDriverType = "mysql"
DatabaseDriverSqlite DatabaseDriverType = "sqlite"
)
func DatabaseDriver() DatabaseDriverType {
var driver DatabaseDriverType
driverString := strings.ToLower(os.Getenv("PHOTOVIEW_DATABASE_DRIVER"))
switch driverString {
case "mysql":
driver = DatabaseDriverMysql
case "sqlite":
driver = DatabaseDriverSqlite
}
return driver
}

View File

@@ -1,6 +1,7 @@
package models package models
import ( import (
db_drivers "github.com/photoview/photoview/api/database/drivers"
"github.com/pkg/errors" "github.com/pkg/errors"
"gorm.io/gorm" "gorm.io/gorm"
) )
@@ -22,10 +23,16 @@ func GetSiteInfo(db *gorm.DB) (*SiteInfo, error) {
if err := db.First(&siteInfo).Error; err != nil { if err := db.First(&siteInfo).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) { if errors.Is(err, gorm.ErrRecordNotFound) {
defaultConcurrentWorkers := 3
if db_drivers.DatabaseDriver() == db_drivers.DatabaseDriverSqlite {
defaultConcurrentWorkers = 1
}
siteInfo = SiteInfo{ siteInfo = SiteInfo{
InitialSetup: true, InitialSetup: true,
PeriodicScanInterval: 0, PeriodicScanInterval: 0,
ConcurrentWorkers: 3, ConcurrentWorkers: defaultConcurrentWorkers,
} }
if err := db.Create(&siteInfo).Error; err != nil { if err := db.Create(&siteInfo).Error; err != nil {

View File

@@ -4,6 +4,7 @@ import (
"context" "context"
"time" "time"
"github.com/photoview/photoview/api/database/drivers"
"github.com/photoview/photoview/api/graphql/models" "github.com/photoview/photoview/api/graphql/models"
"github.com/photoview/photoview/api/scanner" "github.com/photoview/photoview/api/scanner"
"github.com/pkg/errors" "github.com/pkg/errors"
@@ -66,6 +67,10 @@ func (r *mutationResolver) SetScannerConcurrentWorkers(ctx context.Context, work
return 0, errors.New("concurrent workers must at least be 1") return 0, errors.New("concurrent workers must at least be 1")
} }
if workers > 1 && drivers.DatabaseDriver() == drivers.DatabaseDriverSqlite {
return 0, errors.New("multiple workers not supported for SQLite databases")
}
if err := r.Database.Session(&gorm.Session{AllowGlobalUpdate: true}).Model(&models.SiteInfo{}).Update("concurrent_workers", workers).Error; err != nil { if err := r.Database.Session(&gorm.Session{AllowGlobalUpdate: true}).Model(&models.SiteInfo{}).Update("concurrent_workers", workers).Error; err != nil {
return 0, err return 0, err
} }