Sync branch magefile with main #104308
@ -20,7 +20,7 @@ var defaultConfig = Conf{
|
||||
Listen: ":8080",
|
||||
// ListenHTTPS: ":8433",
|
||||
DatabaseDSN: "flamenco-manager.sqlite",
|
||||
DBIntegrityCheck: 1 * time.Hour,
|
||||
DBIntegrityCheck: 10 * time.Minute,
|
||||
SSDPDiscovery: true,
|
||||
LocalManagerStoragePath: "./flamenco-manager-storage",
|
||||
SharedStoragePath: "", // Empty string means "first run", and should trigger the config setup assistant.
|
||||
|
@ -78,6 +78,8 @@ func (db *DB) performIntegrityCheck(ctx context.Context) (ok bool) {
|
||||
|
||||
log.Debug().Msg("database: performing integrity check")
|
||||
|
||||
db.ensureForeignKeysEnabled()
|
||||
|
||||
if !db.pragmaIntegrityCheck(checkCtx) {
|
||||
return false
|
||||
}
|
||||
@ -159,3 +161,29 @@ func (db *DB) pragmaForeignKeyCheck(ctx context.Context) (ok bool) {
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// ensureForeignKeysEnabled checks whether foreign keys are enabled, and if not,
|
||||
// tries to enable them.
|
||||
//
|
||||
// This is likely caused by either GORM or its embedded SQLite creating a new
|
||||
// connection to the low-level SQLite driver. Unfortunately the GORM-embedded
|
||||
// SQLite doesn't have an 'on-connect' callback function to always enable
|
||||
// foreign keys.
|
||||
func (db *DB) ensureForeignKeysEnabled() {
|
||||
fkEnabled, err := db.areForeignKeysEnabled()
|
||||
|
||||
if err != nil {
|
||||
log.Error().AnErr("cause", err).Msg("database: could not check whether foreign keys are enabled")
|
||||
return
|
||||
}
|
||||
|
||||
if fkEnabled {
|
||||
return
|
||||
}
|
||||
|
||||
log.Warn().Msg("database: foreign keys are disabled, re-enabling them")
|
||||
if err := db.pragmaForeignKeys(true); err != nil {
|
||||
log.Error().AnErr("cause", err).Msg("database: error re-enabling foreign keys")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user