fix: support db checksum algorithm of SHA256 (#19681)

Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
This commit is contained in:
Jian Qiu
2024-03-09 14:57:47 +08:00
committed by GitHub
parent d4d8028dea
commit be449a610a
10 changed files with 45 additions and 13 deletions
+1 -1
View File
@@ -95,7 +95,7 @@ require (
yunion.io/x/ovsdb v0.0.0-20230306173834-f164f413a900
yunion.io/x/pkg v1.10.1-0.20240303050651-73685b15a96e
yunion.io/x/s3cli v0.0.0-20190917004522-13ac36d8687e
yunion.io/x/sqlchemy v1.1.3-0.20240305180726-ccd03e6aa837
yunion.io/x/sqlchemy v1.1.3-0.20240309051602-9ab0cc051bcc
yunion.io/x/structarg v0.0.0-20231017124457-df4d5009457c
)
+2 -2
View File
@@ -1223,7 +1223,7 @@ yunion.io/x/pkg v1.10.1-0.20240303050651-73685b15a96e h1:NuYu+z0dOT93aoNjg3W3PkL
yunion.io/x/pkg v1.10.1-0.20240303050651-73685b15a96e/go.mod h1:ksCJVQ+DwKrJ5QBEoU8pzrDFfDaZVAFH/iJ6yQCYxJk=
yunion.io/x/s3cli v0.0.0-20190917004522-13ac36d8687e h1:v+EzIadodSwkdZ/7bremd7J8J50Cise/HCylsOJngmo=
yunion.io/x/s3cli v0.0.0-20190917004522-13ac36d8687e/go.mod h1:0iFKpOs1y4lbCxeOmq3Xx/0AcQoewVPwj62eRluioEo=
yunion.io/x/sqlchemy v1.1.3-0.20240305180726-ccd03e6aa837 h1:2KhiZJdbKVK6ksl542z5BzDsD+bgpHEtYHCEuA8Y48A=
yunion.io/x/sqlchemy v1.1.3-0.20240305180726-ccd03e6aa837/go.mod h1:5W8ghvJ4TNt/r2yDjjD3i4QsZgIiJX45dhRQBGWPHsQ=
yunion.io/x/sqlchemy v1.1.3-0.20240309051602-9ab0cc051bcc h1:aoz/hVPigGxG/fGCpDmC3Wi57/yDbbGQO7T5SGj6l4c=
yunion.io/x/sqlchemy v1.1.3-0.20240309051602-9ab0cc051bcc/go.mod h1:5W8ghvJ4TNt/r2yDjjD3i4QsZgIiJX45dhRQBGWPHsQ=
yunion.io/x/structarg v0.0.0-20231017124457-df4d5009457c h1:QuLab2kSRECZRxo4Lo2KcYn6XjQFDGaZ1+x0pYDVVwQ=
yunion.io/x/structarg v0.0.0-20231017124457-df4d5009457c/go.mod h1:EP6NSv2C0zzqBDTKumv8hPWLb3XvgMZDHQRfyuOrQng=
+1
View File
@@ -165,6 +165,7 @@ var (
"db_checksum_skip_init",
"db_checksum_tables",
"enable_db_checksum_tables",
"db_checksum_hash_algorithm",
"auto_sync_table",
"exit_after_db_init",
"global_virtual_resource_namespace",
+16
View File
@@ -14,6 +14,8 @@
package consts
import "yunion.io/x/log"
var (
QueryOffsetOptimization = false
@@ -22,6 +24,8 @@ var (
defaultDBDialect string
defaultDBConnectionString string
defaultDBChecksumHashAlgorithm string
)
func SetDefaultDB(dialect, connStr string) {
@@ -36,3 +40,15 @@ func DefaultDBDialect() string {
func DefaultDBConnStr() string {
return defaultDBConnectionString
}
func SetDefaultDBChecksumHashAlgorithm(alg string) {
log.Infof("Set default DB checksum hash algorithm: %s", alg)
defaultDBChecksumHashAlgorithm = alg
}
func DefaultDBChecksumHashAlgorithm() string {
if len(defaultDBChecksumHashAlgorithm) > 0 {
return defaultDBChecksumHashAlgorithm
}
return "sha256"
}
+4
View File
@@ -143,6 +143,10 @@ func InitDB(options *common_options.DBOptions) {
}
// lm := lockman.NewNoopLockManager()
if options.EnableDBChecksumTables && len(options.DBChecksumHashAlgorithm) > 0 {
consts.SetDefaultDBChecksumHashAlgorithm(options.DBChecksumHashAlgorithm)
}
initDBNotifier()
startInitInformer(options)
}
+14 -5
View File
@@ -16,9 +16,11 @@ package db
import (
"crypto/md5"
"crypto/sha256"
"fmt"
"reflect"
"sort"
"strings"
"yunion.io/x/jsonutils"
"yunion.io/x/log"
@@ -27,6 +29,7 @@ import (
"yunion.io/x/pkg/utils"
"yunion.io/x/sqlchemy"
"yunion.io/x/onecloud/pkg/cloudcommon/consts"
"yunion.io/x/onecloud/pkg/util/splitable"
)
@@ -126,13 +129,19 @@ func CheckRecordChecksumConsistent(model IModel) error {
}
func calculateRecordChecksumByValues(vals []interface{}) string {
ss := ""
ss := strings.Builder{}
for _, val := range vals {
ss += fmt.Sprintf("\n%v", val)
ss.WriteString(fmt.Sprintf("\n%v", val))
}
hStr := md5.Sum([]byte(ss))
sum := fmt.Sprintf("%x", hStr)
log.Debugf("calculate values string: %s checksum: %s", ss, sum)
var sum string
algStr := consts.DefaultDBChecksumHashAlgorithm()
switch algStr {
case "md5":
sum = fmt.Sprintf("%x", md5.Sum([]byte(ss.String())))
default:
sum = fmt.Sprintf("%x", sha256.Sum256([]byte(ss.String())))
}
// log.Debugf("calculate values string: %s alg: %s, checksum: %s", ss, algStr, sum)
return sum
}
+2
View File
@@ -164,6 +164,8 @@ type DBOptions struct {
EnableDBChecksumTables bool `help:"Enable DB tables with record checksum for consistency"`
DBChecksumSkipInit bool `help:"Skip DB tables with record checksum calculation when init" default:"false"`
DBChecksumHashAlgorithm string `help:"hash algorithm for db checksum hash" choices:"md5|sha256" default:"sha256"`
AutoSyncTable bool `help:"Automatically synchronize table changes if differences are detected"`
ExitAfterDBInit bool `help:"Exit program after db initialization" default:"false"`
+1 -1
View File
@@ -42,7 +42,7 @@ func (spec *SSplitTableSpec) getTableLastMeta() (*STableMetadata, error) {
func (spec *SSplitTableSpec) GetTableMetaByTime(recordTime time.Time) (*STableMetadata, error) {
q := spec.metaSpec.Query().Desc("id").IsFalse("deleted")
if !recordTime.IsZero() {
q = q.LE("start_date", recordTime)
q = q.LE("start_date", recordTime.Add(time.Second))
}
meta := new(STableMetadata)
err := q.First(meta)
+1 -1
View File
@@ -1624,7 +1624,7 @@ yunion.io/x/pkg/utils
# yunion.io/x/s3cli v0.0.0-20190917004522-13ac36d8687e
## explicit; go 1.12
yunion.io/x/s3cli
# yunion.io/x/sqlchemy v1.1.3-0.20240305180726-ccd03e6aa837
# yunion.io/x/sqlchemy v1.1.3-0.20240309051602-9ab0cc051bcc
## explicit; go 1.17
yunion.io/x/sqlchemy
yunion.io/x/sqlchemy/backends
+3 -3
View File
@@ -505,12 +505,12 @@ func (c *STimeTypeColumn) ConvertFromString(str string) interface{} {
// NewTimeTypeColumn return an instance of STimeTypeColumn
func NewTimeTypeColumn(name string, typeStr string, tagmap map[string]string, isPointer bool) STimeTypeColumn {
tagmap, v, ok := utils.TagPop(tagmap, sqlchemy.TAG_PRECISION)
prec := 6
prec := 0
if ok {
prec, _ = strconv.Atoi(v)
if prec > 6 || prec <= 0 {
if prec > 6 || prec < 0 {
log.Warningf("datetime field %s precision %d change to 6", name, prec)
prec = 6
prec = 0
}
}
dc := STimeTypeColumn{