mirror of
https://git.vectorsigma.ru/public/photoview.git
synced 2026-08-03 21:09:05 +00:00
Disable multithreaded scanners for sqlite
as it's not reliable
This commit is contained in:
@@ -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
|
||||||
|
|||||||
28
api/database/drivers/database_drivers.go
Normal file
28
api/database/drivers/database_drivers.go
Normal 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
|
||||||
|
}
|
||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user