mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 16:00:24 +08:00 
			
		
		
		
	忽略部分MySQL 1213错误
This commit is contained in:
		@@ -90,9 +90,7 @@ func (this *MetricStatDAO) CreateStat(tx *dbs.Tx, hash string, clusterId int64,
 | 
			
		||||
			"value": value,
 | 
			
		||||
		})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		// 忽略 Error 1213: Deadlock found 错误
 | 
			
		||||
		mysqlErr, ok := err.(*mysql.MySQLError)
 | 
			
		||||
		if ok && mysqlErr.Number == 1213 {
 | 
			
		||||
		if this.canIgnore(err) {
 | 
			
		||||
			return nil
 | 
			
		||||
		}
 | 
			
		||||
		return err
 | 
			
		||||
@@ -135,6 +133,9 @@ func (this *MetricStatDAO) DeleteNodeItemStats(tx *dbs.Tx, nodeId int64, serverI
 | 
			
		||||
			Attr("itemId", itemId).
 | 
			
		||||
			Attr("time", time).
 | 
			
		||||
			Delete()
 | 
			
		||||
		if this.canIgnore(err) {
 | 
			
		||||
			return nil
 | 
			
		||||
		}
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -751,3 +752,18 @@ func (this *MetricStatDAO) mergeStats(stats []*MetricStat) (result []*MetricStat
 | 
			
		||||
	}
 | 
			
		||||
	return result
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 检查错误是否可以忽略
 | 
			
		||||
func (this *MetricStatDAO) canIgnore(err error) bool {
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		return true
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 忽略 Error 1213: Deadlock found 错误
 | 
			
		||||
	mysqlErr, ok := err.(*mysql.MySQLError)
 | 
			
		||||
	if ok && mysqlErr.Number == 1213 {
 | 
			
		||||
		return true
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAPI/internal/goman"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAPI/internal/remotelogs"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
 | 
			
		||||
	"github.com/go-sql-driver/mysql"
 | 
			
		||||
	_ "github.com/go-sql-driver/mysql"
 | 
			
		||||
	"github.com/iwind/TeaGo/Tea"
 | 
			
		||||
	"github.com/iwind/TeaGo/dbs"
 | 
			
		||||
@@ -55,7 +56,7 @@ func init() {
 | 
			
		||||
 | 
			
		||||
// UpdateSum 更新统计数据
 | 
			
		||||
func (this *MetricSumStatDAO) UpdateSum(tx *dbs.Tx, clusterId int64, nodeId int64, serverId int64, time string, itemId int64, version int32, count int64, total float32) error {
 | 
			
		||||
	return this.Query(tx).
 | 
			
		||||
	err := this.Query(tx).
 | 
			
		||||
		Table(this.partialTable(serverId)).
 | 
			
		||||
		InsertOrUpdateQuickly(maps.Map{
 | 
			
		||||
			"clusterId":  clusterId,
 | 
			
		||||
@@ -71,6 +72,10 @@ func (this *MetricSumStatDAO) UpdateSum(tx *dbs.Tx, clusterId int64, nodeId int6
 | 
			
		||||
			"count": count,
 | 
			
		||||
			"total": total,
 | 
			
		||||
		})
 | 
			
		||||
	if this.canIgnore(err) {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FindNodeServerSum 查找某个服务在某个节点上的统计数据
 | 
			
		||||
@@ -277,3 +282,18 @@ func (this *MetricSumStatDAO) runBatch(f func(table string, locker *sync.Mutex)
 | 
			
		||||
	wg.Wait()
 | 
			
		||||
	return resultErr
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 检查错误是否可以忽略
 | 
			
		||||
func (this *MetricSumStatDAO) canIgnore(err error) bool {
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		return true
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 忽略 Error 1213: Deadlock found 错误
 | 
			
		||||
	mysqlErr, ok := err.(*mysql.MySQLError)
 | 
			
		||||
	if ok && mysqlErr.Number == 1213 {
 | 
			
		||||
		return true
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user