1
0
mirror of https://github.com/axllent/mailpit.git synced 2025-08-13 20:04:49 +02:00

Fix: Add delay to close database on fatal exit (#280)

This commit is contained in:
Ralph Slooten
2024-04-20 10:28:12 +12:00
parent 5ad76cb3a7
commit 072db266be
3 changed files with 20 additions and 5 deletions

View File

@@ -34,14 +34,15 @@ Documentation:
os.Exit(1) os.Exit(1)
} }
if err := storage.InitDB(); err != nil { if err := storage.InitDB(); err != nil {
logger.Log().Error(err.Error()) logger.Log().Fatal(err.Error())
os.Exit(1) os.Exit(1)
} }
go server.Listen() go server.Listen()
if err := smtpd.Listen(); err != nil { if err := smtpd.Listen(); err != nil {
logger.Log().Error(err.Error()) storage.Close()
logger.Log().Fatal(err.Error())
os.Exit(1) os.Exit(1)
} }
}, },

View File

@@ -127,14 +127,20 @@ func tenant(table string) string {
return fmt.Sprintf("%s%s", config.TenantID, table) return fmt.Sprintf("%s%s", config.TenantID, table)
} }
// Close will close the database, and delete if a temporary table // Close will close the database, and delete if temporary
func Close() { func Close() {
// on a fatal exit (eg: ports blocked), allow Mailpit to run migration tasks before closing the DB
time.Sleep(200 * time.Millisecond)
if db != nil { if db != nil {
if err := db.Close(); err != nil { if err := db.Close(); err != nil {
logger.Log().Warn("[db] error closing database, ignoring") logger.Log().Warn("[db] error closing database, ignoring")
} }
} }
// allow SQLite to finish closing DB & write WAL logs if local
time.Sleep(100 * time.Millisecond)
if dbIsTemp && isFile(dbFile) { if dbIsTemp && isFile(dbFile) {
logger.Log().Debugf("[db] deleting temporary file %s", dbFile) logger.Log().Debugf("[db] deleting temporary file %s", dbFile)
if err := os.Remove(dbFile); err != nil { if err := os.Remove(dbFile); err != nil {

View File

@@ -105,11 +105,19 @@ func Listen() {
} }
if config.UITLSCert != "" && config.UITLSKey != "" { if config.UITLSCert != "" && config.UITLSKey != "" {
if err := server.ListenAndServeTLS(config.UITLSCert, config.UITLSKey); err != nil {
storage.Close()
logger.Log().Fatal(err)
}
logger.Log().Infof("[http] accessible via https://%s%s", logger.CleanHTTPIP(config.HTTPListen), config.Webroot) logger.Log().Infof("[http] accessible via https://%s%s", logger.CleanHTTPIP(config.HTTPListen), config.Webroot)
logger.Log().Fatal(server.ListenAndServeTLS(config.UITLSCert, config.UITLSKey))
} else { } else {
if err := server.ListenAndServe(); err != nil {
storage.Close()
logger.Log().Fatal(err)
}
logger.Log().Infof("[http] accessible via http://%s%s", logger.CleanHTTPIP(config.HTTPListen), config.Webroot) logger.Log().Infof("[http] accessible via http://%s%s", logger.CleanHTTPIP(config.HTTPListen), config.Webroot)
logger.Log().Fatal(server.ListenAndServe())
} }
} }