🐛 fix(driver): 允许旧驱动代理继续连接并保留重装提示

This commit is contained in:
Syngnat
2026-06-12 11:41:26 +08:00
parent ff8bf20680
commit d5688d31f6
3 changed files with 40 additions and 12 deletions

View File

@@ -803,15 +803,31 @@ func verifyRuntimeOptionalDriverAgentRevision(config connection.ConnectionConfig
if packageMetaExists {
selectedVersion = strings.TrimSpace(pkg.Version)
}
agentRevision, err := verifyInstalledOptionalDriverAgentRevision(driverType, executablePath, selectedVersion)
if !shouldVerifyOptionalDriverAgentRevision(driverType, selectedVersion) {
return nil
}
expectedRevision := strings.TrimSpace(db.OptionalDriverAgentRevision(driverType))
if expectedRevision == "" {
return nil
}
displayName := resolveDriverDisplayName(driverDefinition{Type: driverType})
agentRevision, current, err := optionalDriverAgentRevisionCurrent(driverType, executablePath)
if err != nil {
return err
logger.Warnf("%s driver-agent revision 元数据不可用继续使用已安装代理version=%s path=%s err=%v建议在驱动管理中重装",
displayName, selectedVersion, executablePath, err)
return nil
}
if expectedRevision := strings.TrimSpace(db.OptionalDriverAgentRevision(driverType)); expectedRevision != "" {
displayName := resolveDriverDisplayName(driverDefinition{Type: driverType})
logger.Infof("%s driver-agent revision 校验通过:已安装=%s 当前需要=%s version=%s path=%s",
displayName, strings.TrimSpace(agentRevision), expectedRevision, selectedVersion, executablePath)
if !current {
actualLabel := strings.TrimSpace(agentRevision)
if actualLabel == "" {
actualLabel = "空"
}
logger.Warnf("%s driver-agent revision 不匹配,继续使用已安装代理:已安装=%s 当前需要=%s version=%s path=%s建议在驱动管理中重装",
displayName, actualLabel, expectedRevision, selectedVersion, executablePath)
return nil
}
logger.Infof("%s driver-agent revision 校验通过:已安装=%s 当前需要=%s version=%s path=%s",
displayName, strings.TrimSpace(agentRevision), expectedRevision, selectedVersion, executablePath)
return nil
}

View File

@@ -79,7 +79,7 @@ func TestVerifyInstalledOptionalDriverAgentRevisionRejectsProbeFailure(t *testin
}
}
func TestVerifyRuntimeOptionalDriverAgentRevisionRejectsStaleOceanBaseAgent(t *testing.T) {
func TestVerifyRuntimeOptionalDriverAgentRevisionAllowsStaleOceanBaseAgent(t *testing.T) {
originalProbe := optionalDriverAgentMetadataProbe
t.Cleanup(func() {
optionalDriverAgentMetadataProbe = originalProbe
@@ -92,11 +92,23 @@ func TestVerifyRuntimeOptionalDriverAgentRevisionRejectsStaleOceanBaseAgent(t *t
}
err := verifyRuntimeOptionalDriverAgentRevision(connection.ConnectionConfig{Type: "oceanbase"})
if err == nil {
t.Fatal("expected stale OceanBase agent revision to be rejected")
if err != nil {
t.Fatalf("runtime revision mismatch should warn and continue, got %v", err)
}
if !strings.Contains(err.Error(), "revision 不匹配") {
t.Fatalf("expected revision mismatch error, got %v", err)
}
func TestVerifyRuntimeOptionalDriverAgentRevisionAllowsMetadataProbeFailure(t *testing.T) {
originalProbe := optionalDriverAgentMetadataProbe
t.Cleanup(func() {
optionalDriverAgentMetadataProbe = originalProbe
})
optionalDriverAgentMetadataProbe = func(driverType string, executablePath string) (db.OptionalDriverAgentMetadata, error) {
return db.OptionalDriverAgentMetadata{}, errOptionalDriverAgentMetadataUnavailable
}
err := verifyRuntimeOptionalDriverAgentRevision(connection.ConnectionConfig{Type: "sqlserver"})
if err != nil {
t.Fatalf("runtime metadata probe failure should warn and continue, got %v", err)
}
}

View File

@@ -963,7 +963,7 @@ func TestEnsureOptionalDriverAgentBinaryFallsBackAfterStaleDownloadRevision(t *t
goScript += ".bat"
}
if runtime.GOOS == "windows" {
if err := os.WriteFile(goScript, []byte("@echo off\r\nset out=\r\n:loop\r\nif \"%1\"==\"\" goto done\r\nif \"%1\"==\"-o\" (set out=%2& shift& shift& goto loop)\r\nshift\r\ngoto loop\r\n:done\r\ncopy /Y \"%GONAVI_TEST_BUILT_AGENT%\" \"%out%\" >nul\r\n"), 0o755); err != nil {
if err := os.WriteFile(goScript, []byte("@echo off\r\nsetlocal\r\nset \"out=\"\r\n:loop\r\nif \"%~1\"==\"\" goto done\r\nif \"%~1\"==\"-o\" goto capture\r\nshift\r\ngoto loop\r\n:capture\r\nset \"out=%~2\"\r\nshift\r\nshift\r\ngoto loop\r\n:done\r\nif \"%out%\"==\"\" exit /b 1\r\ncopy /Y \"%GONAVI_TEST_BUILT_AGENT%\" \"%out%\" >nul\r\n"), 0o755); err != nil {
t.Fatalf("write fake go script failed: %v", err)
}
} else {