From 9f33aae08b68c57d3b610cb4948b06de66b28f59 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Sun, 10 Apr 2022 18:21:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AE=BF=E9=97=AE=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=8F=AF=E8=83=BD=E6=98=BE=E7=A4=BA=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/db/models/db_node_initializer.go | 2 +- internal/db/models/http_access_log_dao.go | 2 +- internal/db/models/http_access_log_manager.go | 12 +++++++++--- internal/db/models/http_access_log_manager_test.go | 4 ++-- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/internal/db/models/db_node_initializer.go b/internal/db/models/db_node_initializer.go index e39de39d..39caea39 100644 --- a/internal/db/models/db_node_initializer.go +++ b/internal/db/models/db_node_initializer.go @@ -251,7 +251,7 @@ func (this *DBNodeInitializer) loop() error { // 检查表是否存在 // httpAccessLog { - tableDef, err := SharedHTTPAccessLogManager.FindTable(db, timeutil.Format("Ymd"), true) + tableDef, err := SharedHTTPAccessLogManager.FindLastTable(db, timeutil.Format("Ymd"), true) if err != nil { remotelogs.Error("DB_NODE", "create first table in database node failed: "+err.Error()) diff --git a/internal/db/models/http_access_log_dao.go b/internal/db/models/http_access_log_dao.go index 21725065..34e12e42 100644 --- a/internal/db/models/http_access_log_dao.go +++ b/internal/db/models/http_access_log_dao.go @@ -183,7 +183,7 @@ Loop: // CreateHTTPAccessLog 写入单条访问日志 func (this *HTTPAccessLogDAO) CreateHTTPAccessLog(tx *dbs.Tx, dao *HTTPAccessLogDAO, accessLog *pb.HTTPAccessLog) error { var day = timeutil.FormatTime("Ymd", accessLog.Timestamp) - tableDef, err := SharedHTTPAccessLogManager.FindTable(dao.Instance, day, true) + tableDef, err := SharedHTTPAccessLogManager.FindLastTable(dao.Instance, day, true) if err != nil { return err } diff --git a/internal/db/models/http_access_log_manager.go b/internal/db/models/http_access_log_manager.go index b6877e8d..694a9859 100644 --- a/internal/db/models/http_access_log_manager.go +++ b/internal/db/models/http_access_log_manager.go @@ -102,13 +102,19 @@ func (this *HTTPAccessLogManager) FindTables(db *dbs.DB, day string) ([]*httpAcc if accessLogTableMainReg.MatchString(tableName) { tableNames = append(tableNames, tableName) + // 查找已有的表格信息,避免SHOW FIELDS var tableDay = tableName[strings.LastIndex(tableName, "_")+1:] var cacheKey = this.composeTableCacheKey(cachePrefix, tableDay) this.locker.Lock() currentTableDef, ok := this.currentTableMapping[cacheKey] this.locker.Unlock() if ok { - results = append(results, currentTableDef) + results = append(results, &httpAccessLogDefinition{ + Name: tableName, + HasRemoteAddr: currentTableDef.HasRemoteAddr, + HasDomain: currentTableDef.HasDomain, + Exists: true, + }) } else { hasRemoteAddrField, hasDomainField, err := this.checkTableFields(db, tableName) if err != nil { @@ -143,11 +149,11 @@ func (this *HTTPAccessLogManager) FindTables(db *dbs.DB, day string) ([]*httpAcc return results, nil } -// FindTable 根据日期获取表名 +// FindLastTable 根据日期获取上一个可以使用的表名 // 表名组成 // - PREFIX_DAY // - PREFIX_DAY_0001 -func (this *HTTPAccessLogManager) FindTable(db *dbs.DB, day string, force bool) (*httpAccessLogDefinition, error) { +func (this *HTTPAccessLogManager) FindLastTable(db *dbs.DB, day string, force bool) (*httpAccessLogDefinition, error) { this.locker.Lock() defer this.locker.Unlock() diff --git a/internal/db/models/http_access_log_manager_test.go b/internal/db/models/http_access_log_manager_test.go index 0054da88..8f1492e0 100644 --- a/internal/db/models/http_access_log_manager_test.go +++ b/internal/db/models/http_access_log_manager_test.go @@ -119,7 +119,7 @@ func TestHTTPAccessLogManager_FindTables(t *testing.T) { } } -func TestHTTPAccessLogManager_FindTable(t *testing.T) { +func TestHTTPAccessLogManager_FindLastTable(t *testing.T) { var config = &dbs.DBConfig{ Driver: "mysql", Dsn: "root:123456@tcp(127.0.0.1:3306)/db_edge_log?charset=utf8mb4&timeout=30s", @@ -145,7 +145,7 @@ func TestHTTPAccessLogManager_FindTable(t *testing.T) { for i := 0; i < 3; i++ { var before = time.Now() - tableDef, err := models.SharedHTTPAccessLogManager.FindTable(db, "20220306", false) + tableDef, err := models.SharedHTTPAccessLogManager.FindLastTable(db, "20220306", false) if err != nil { t.Fatal(err) }