diff --git a/internal/db/db_test.go b/internal/db/db_test.go index 4b3db2bd..662f45af 100644 --- a/internal/db/db_test.go +++ b/internal/db/db_test.go @@ -3,6 +3,7 @@ package db import ( "database/sql" "database/sql/driver" + "github.com/TeaOSLab/EdgeAPI/internal/db/models" _ "github.com/go-sql-driver/mysql" "github.com/iwind/TeaGo/Tea" _ "github.com/iwind/TeaGo/bootstrap" @@ -42,3 +43,13 @@ func TestDB_Instance(t *testing.T) { } time.Sleep(100 * time.Second) } + +func TestDB_Reuse(t *testing.T) { + var dao = models.NewVersionDAO() + for i := 0; i < 20_000; i++ { + _, _, err := dao.Query(nil).Attr("version", i).Reuse(true).FindOne() + if err != nil { + t.Fatal(err) + } + } +} diff --git a/internal/db/models/db_node_initializer.go b/internal/db/models/db_node_initializer.go index 0eb44066..e39de39d 100644 --- a/internal/db/models/db_node_initializer.go +++ b/internal/db/models/db_node_initializer.go @@ -237,7 +237,7 @@ func (this *DBNodeInitializer) loop() error { } if db == nil { - config := &dbs.DBConfig{ + var config = &dbs.DBConfig{ Driver: "mysql", Dsn: dsn, Prefix: "edge", diff --git a/internal/db/models/http_access_log_manager_test.go b/internal/db/models/http_access_log_manager_test.go index 08a81d85..0054da88 100644 --- a/internal/db/models/http_access_log_manager_test.go +++ b/internal/db/models/http_access_log_manager_test.go @@ -30,6 +30,9 @@ func TestNewHTTPAccessLogManager(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { + _ = db.Close() + }() var manager = models.SharedHTTPAccessLogManager err = manager.CreateTable(db, "accessLog_1") @@ -58,6 +61,9 @@ func TestHTTPAccessLogManager_FindTableNames(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { + _ = db.Close() + }() for i := 0; i < 3; i++ { var before = time.Now() @@ -74,7 +80,6 @@ func TestHTTPAccessLogManager_FindTableNames(t *testing.T) { } } - func TestHTTPAccessLogManager_FindTables(t *testing.T) { var config = &dbs.DBConfig{ Driver: "mysql", @@ -95,6 +100,9 @@ func TestHTTPAccessLogManager_FindTables(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { + _ = db.Close() + }() for i := 0; i < 3; i++ { var before = time.Now() @@ -131,6 +139,9 @@ func TestHTTPAccessLogManager_FindTable(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { + _ = db.Close() + }() for i := 0; i < 3; i++ { var before = time.Now() diff --git a/internal/db/utils/utils.go b/internal/db/utils/utils.go index 4f821259..e50cd5d6 100644 --- a/internal/db/utils/utils.go +++ b/internal/db/utils/utils.go @@ -3,11 +3,8 @@ package dbutils import ( "github.com/iwind/TeaGo/dbs" "strings" - "sync" ) -var SharedCacheLocker = sync.RWMutex{} - // NewQuery 构造Query func NewQuery(tx *dbs.Tx, dao dbs.DAOWrapper, adminId int64, userId int64) *dbs.Query { query := dao.Object().Query(tx) diff --git a/internal/nodes/api_node.go b/internal/nodes/api_node.go index 2720f43b..1eec7c19 100644 --- a/internal/nodes/api_node.go +++ b/internal/nodes/api_node.go @@ -284,6 +284,9 @@ func (this *APINode) autoUpgrade() error { if err != nil { return errors.New("load database failed: " + err.Error()) } + defer func() { + _ = db.Close() + }() one, err := db.FindOne("SELECT version FROM edgeVersions LIMIT 1") if err != nil { return errors.New("query version failed: " + err.Error()) diff --git a/internal/setup/sql_dump_test.go b/internal/setup/sql_dump_test.go index cf86aaa7..ff72badd 100644 --- a/internal/setup/sql_dump_test.go +++ b/internal/setup/sql_dump_test.go @@ -12,6 +12,12 @@ func TestSQLDump_Dump(t *testing.T) { Dsn: "root:123456@tcp(127.0.0.1:3306)/db_edge?charset=utf8mb4&timeout=30s", Prefix: "edge", }) + if err != nil { + t.Fatal(err) + } + defer func() { + _ = db.Close() + }() dump := NewSQLDump() result, err := dump.Dump(db) @@ -49,6 +55,12 @@ func TestSQLDump_Apply(t *testing.T) { Dsn: "root:123456@tcp(127.0.0.1:3306)/db_edge?charset=utf8mb4&timeout=30s", Prefix: "edge", }) + if err != nil { + t.Fatal(err) + } + defer func() { + _ = db.Close() + }() dump := NewSQLDump() result, err := dump.Dump(db) @@ -64,6 +76,9 @@ func TestSQLDump_Apply(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { + _ = db2.Close() + }() ops, err := dump.Apply(db2, result, false) if err != nil { t.Fatal(err) diff --git a/internal/setup/sql_executor.go b/internal/setup/sql_executor.go index 80bd9324..538e5f56 100644 --- a/internal/setup/sql_executor.go +++ b/internal/setup/sql_executor.go @@ -52,6 +52,10 @@ func (this *SQLExecutor) Run(showLog bool) error { return err } + defer func() { + _ = db.Close() + }() + sqlDump := NewSQLDump() _, err = sqlDump.Apply(db, LatestSQLResult, showLog) if err != nil { diff --git a/internal/setup/sql_executor_test.go b/internal/setup/sql_executor_test.go index 74e0fe0e..585197c4 100644 --- a/internal/setup/sql_executor_test.go +++ b/internal/setup/sql_executor_test.go @@ -28,6 +28,9 @@ func TestSQLExecutor_checkCluster(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { + _ = db.Close() + }() err = executor.checkCluster(db) if err != nil { @@ -46,6 +49,9 @@ func TestSQLExecutor_checkMetricItems(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { + _ = db.Close() + }() err = executor.checkMetricItems(db) if err != nil { @@ -64,6 +70,9 @@ func TestSQLExecutor_checkNS(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { + _ = db.Close() + }() err = executor.checkNS(db) if err != nil { diff --git a/internal/setup/sql_upgrade_test.go b/internal/setup/sql_upgrade_test.go index 6df97999..af1564e5 100644 --- a/internal/setup/sql_upgrade_test.go +++ b/internal/setup/sql_upgrade_test.go @@ -14,6 +14,9 @@ func TestUpgradeSQLData(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { + _ = db.Close() + }() err = UpgradeSQLData(db) if err != nil { t.Fatal(err) @@ -30,6 +33,9 @@ func TestUpgradeSQLData_v0_3_1(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { + _ = db.Close() + }() err = upgradeV0_3_1(db) if err != nil { t.Fatal(err) @@ -46,6 +52,9 @@ func TestUpgradeSQLData_v0_3_2(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { + _ = db.Close() + }() err = upgradeV0_3_2(db) if err != nil { t.Fatal(err) @@ -62,6 +71,9 @@ func TestUpgradeSQLData_v0_3_3(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { + _ = db.Close() + }() err = upgradeV0_3_3(db) if err != nil { t.Fatal(err) @@ -78,6 +90,9 @@ func TestUpgradeSQLData_v0_3_7(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { + _ = db.Close() + }() err = upgradeV0_3_7(db) if err != nil { t.Fatal(err) @@ -94,6 +109,9 @@ func TestUpgradeSQLData_v0_4_0(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { + _ = db.Close() + }() err = upgradeV0_4_0(db) if err != nil { t.Fatal(err) @@ -110,6 +128,9 @@ func TestUpgradeSQLData_v0_4_1(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { + _ = db.Close() + }() err = upgradeV0_4_1(db) if err != nil { t.Fatal(err) @@ -127,6 +148,9 @@ func TestUpgradeSQLData_v0_4_5(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { + _ = db.Close() + }() err = upgradeV0_4_5(db) if err != nil { t.Fatal(err) diff --git a/internal/tasks/server_access_log_cleaner.go b/internal/tasks/server_access_log_cleaner.go index 6f7347ef..27175eab 100644 --- a/internal/tasks/server_access_log_cleaner.go +++ b/internal/tasks/server_access_log_cleaner.go @@ -77,18 +77,27 @@ func (this *ServerAccessLogCleaner) Loop() error { return err } for _, node := range nodes { - dbConfig := node.DBConfig() - db, err := dbs.NewInstanceFromConfig(dbConfig) - if err != nil { - return err - } - err = this.cleanDB(db, endDay) - if err != nil { - _ = db.Close() - return err - } + err := func(node *models.DBNode) error { + var dbConfig = node.DBConfig() + nodeDB, err := dbs.NewInstanceFromConfig(dbConfig) + if err != nil { + return err + } - _ = db.Close() + defer func() { + _ = nodeDB.Close() + }() + + err = this.cleanDB(nodeDB, endDay) + if err != nil { + return err + } + + return nil + }(node) + if err != nil { + return err + } } return nil