From 00d28df3eef44bc5f9ab72261b6841b48daa6fd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A5=A5=E8=B6=85?= Date: Thu, 27 Jul 2023 10:03:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=9C=AC=E5=9C=B0=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E5=85=B3=E9=97=AD=E6=97=B6=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/utils/dbs/db.go | 20 ++++++++++++++++++-- internal/utils/dbs/db_test.go | 17 +++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 internal/utils/dbs/db_test.go 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 +}