diff --git a/cmd/soar/soar.go b/cmd/soar/soar.go index cb7172c5267cb3295b95f7373da182c125de2507..5332df5a30ebaeb034356dee5f41ea468ae07fc0 100644 --- a/cmd/soar/soar.go +++ b/cmd/soar/soar.go @@ -192,9 +192,7 @@ func main() { os.Exit(1) } // tidb parser 语法检查给出的建议 ERR.000 - if common.Config.TestDSN.Disable { - mysqlSuggest["ERR.000"] = advisor.RuleMySQLError("ERR.000", syntaxErr) - } + mysqlSuggest["ERR.000"] = advisor.RuleMySQLError("ERR.000", syntaxErr) } // 如果只想检查语法直接跳过后面的步骤 if common.Config.OnlySyntaxCheck { @@ -255,6 +253,9 @@ func main() { } default: // vEnv.VEnvBuild 阶段给出的 ERROR 是 ERR.001 + if _, ok := mysqlSuggest["ERR.000"]; ok { + delete(mysqlSuggest, "ERR.000") + } mysqlSuggest["ERR.001"] = advisor.RuleMySQLError("ERR.001", vEnv.Error) common.Log.Error("BuildVirtualEnv DDL Execute Error : %v", vEnv.Error) } @@ -277,7 +278,7 @@ func main() { explainInfo, err := rEnv.Explain(q.Query, database.ExplainType[common.Config.ExplainType], database.ExplainFormatType[common.Config.ExplainFormat]) - if err != nil && strings.HasPrefix(vEnv.Database, "optimizer_") { + if err != nil { // 线上环境执行失败才到测试环境 EXPLAIN,比如在用户提供建表语句及查询语句的场景 common.Log.Warn("rEnv.Explain Warn: %v", err) explainInfo, err = vEnv.Explain(q.Query, diff --git a/env/env.go b/env/env.go index 9b3f6ea0910b441df8a4b121d1a3ba7f0ed8e2b2..cbffde9d86e31fcd45ac71321b35913e6f2fd31f 100644 --- a/env/env.go +++ b/env/env.go @@ -122,6 +122,7 @@ func (ve VirtualEnv) RealDB(hash string) string { if _, ok := ve.hash2Db[hash]; ok { return ve.hash2Db[hash] } + common.Log.Error("RealDB, missing hash map: %s", hash) return hash } @@ -355,7 +356,9 @@ func (ve VirtualEnv) createDatabase(rEnv database.Connector, dbName string) erro } // optimizer_YYMMDDHHmmss_xxxx - dbHash := fmt.Sprintf("optimizer_%s_%s", time.Now().Format("060102150405"), uniuri.New()) + dbHash := fmt.Sprintf("optimizer_%s_%s", // Total 39 bytes + time.Now().Format("060102150405"), // 12 Bytes 20180102030405 + strings.ToLower(uniuri.New())) // 16 Bytes random string common.Log.Debug("createDatabase, mapping `%s` :`%s`-->`%s`", dbName, dbName, dbHash) ddl, err := rEnv.ShowCreateDatabase(dbName) if err != nil {