mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-06 01:50:26 +08:00
优化本地数据库关闭时提示
This commit is contained in:
@@ -7,10 +7,12 @@ import (
|
|||||||
"database/sql"
|
"database/sql"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
teaconst "github.com/TeaOSLab/EdgeNode/internal/const"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/events"
|
"github.com/TeaOSLab/EdgeNode/internal/events"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
|
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/utils/fileutils"
|
"github.com/TeaOSLab/EdgeNode/internal/utils/fileutils"
|
||||||
_ "github.com/mattn/go-sqlite3"
|
_ "github.com/mattn/go-sqlite3"
|
||||||
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
@@ -21,6 +23,7 @@ var errDBIsClosed = errors.New("the database is closed")
|
|||||||
type DB struct {
|
type DB struct {
|
||||||
locker *fileutils.Locker
|
locker *fileutils.Locker
|
||||||
rawDB *sql.DB
|
rawDB *sql.DB
|
||||||
|
dsn string
|
||||||
|
|
||||||
statusLocker sync.Mutex
|
statusLocker sync.Mutex
|
||||||
countUpdating int32
|
countUpdating int32
|
||||||
@@ -41,6 +44,10 @@ func OpenReader(dsn string) (*DB, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func open(dsn string, lock bool) (*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
|
// locker
|
||||||
var locker *fileutils.Locker
|
var locker *fileutils.Locker
|
||||||
if lock {
|
if lock {
|
||||||
@@ -64,14 +71,15 @@ func open(dsn string, lock bool) (*DB, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var db = NewDB(rawDB)
|
var db = NewDB(rawDB, dsn)
|
||||||
db.locker = locker
|
db.locker = locker
|
||||||
return db, nil
|
return db, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDB(rawDB *sql.DB) *DB {
|
func NewDB(rawDB *sql.DB, dsn string) *DB {
|
||||||
var db = &DB{
|
var db = &DB{
|
||||||
rawDB: rawDB,
|
rawDB: rawDB,
|
||||||
|
dsn: dsn,
|
||||||
}
|
}
|
||||||
|
|
||||||
events.OnKey(events.EventQuit, fmt.Sprintf("db_%p", db), func() {
|
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()
|
return this.rawDB.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
17
internal/utils/dbs/db_test.go
Normal file
17
internal/utils/dbs/db_test.go
Normal file
@@ -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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user