diff --git a/internal/utils/dbs/db.go b/internal/utils/dbs/db.go index f137a6a..bb6d0ed 100644 --- a/internal/utils/dbs/db.go +++ b/internal/utils/dbs/db.go @@ -7,10 +7,12 @@ import ( "database/sql" "errors" "fmt" + teaconst "github.com/TeaOSLab/EdgeNode/internal/const" "github.com/TeaOSLab/EdgeNode/internal/events" "github.com/TeaOSLab/EdgeNode/internal/remotelogs" "github.com/TeaOSLab/EdgeNode/internal/utils/fileutils" _ "github.com/mattn/go-sqlite3" + "net/url" "strings" "sync" "time" @@ -21,6 +23,7 @@ var errDBIsClosed = errors.New("the database is closed") type DB struct { locker *fileutils.Locker rawDB *sql.DB + dsn string statusLocker sync.Mutex countUpdating int32 @@ -41,6 +44,10 @@ func OpenReader(dsn string) (*DB, error) { } func open(dsn string, lock bool) (*DB, error) { + if teaconst.IsQuiting { + return nil, errors.New("can not open database when process is quiting") + } + // locker var locker *fileutils.Locker if lock { @@ -64,14 +71,15 @@ func open(dsn string, lock bool) (*DB, error) { return nil, err } - var db = NewDB(rawDB) + var db = NewDB(rawDB, dsn) db.locker = locker return db, nil } -func NewDB(rawDB *sql.DB) *DB { +func NewDB(rawDB *sql.DB, dsn string) *DB { var db = &DB{ rawDB: rawDB, + dsn: dsn, } events.OnKey(events.EventQuit, fmt.Sprintf("db_%p", db), func() { @@ -193,6 +201,14 @@ func (this *DB) Close() error { } }() + // print log + if len(this.dsn) > 0 { + u, _ := url.Parse(this.dsn) + if u != nil && len(u.Path) > 0 { + remotelogs.Debug("DB", "close '"+u.Path) + } + } + return this.rawDB.Close() } diff --git a/internal/utils/dbs/db_test.go b/internal/utils/dbs/db_test.go new file mode 100644 index 0000000..03a92cd --- /dev/null +++ b/internal/utils/dbs/db_test.go @@ -0,0 +1,17 @@ +// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn . + +package dbs_test + +import ( + "net/url" + "testing" +) + +func TestParseDSN(t *testing.T) { + var dsn = "file:/home/cache/p43/.indexes/db-3.db?cache=private&mode=ro&_journal_mode=WAL&_sync=OFF&_cache_size=88000" + u, err := url.Parse(dsn) + if err != nil { + t.Fatal(err) + } + t.Log(u.Path) // expect: :/home/cache/p43/.indexes/db-3.db +}