mirror of
https://github.com/hanzoai/tasks.git
synced 2026-10-04 02:04:03 +00:00
## What changed? Changes version compability checks to pass the real logger, so that the error messages would be seeing in the log ## Why? Before, the error was generic and there were no logs indicating the real error (see https://github.com/temporalio/temporal/issues/7939): ``` sql schema version compatibility check failed: unable to read DB schema version keyspace/database: temporal error: no usable database connection found ``` With this change, the log would contain the actual error: ``` {"level":"error","ts":"2025-07-25T15:30:49.660-0700","msg":"sql handle: unable to refresh database connection pool","error":"pq: no pg_hba.conf entry for host \"127.0.0.1\", ... ``` The alternative solution would be to return the error, but the design of common/persistence/sql/sqlplugin/db_handle.go suggests we hold the abstraction boundaries, by returning generic errors and logging specific errors. ## How did you test it? - [X] built - [X] run locally and tested manually - [X] covered by existing tests
66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
package sql
|
|
|
|
import (
|
|
"go.temporal.io/server/common/config"
|
|
"go.temporal.io/server/common/log"
|
|
"go.temporal.io/server/common/metrics"
|
|
"go.temporal.io/server/common/persistence/sql/sqlplugin"
|
|
"go.temporal.io/server/common/resolver"
|
|
)
|
|
|
|
// VerifyCompatibleVersion ensures that the installed version of temporal and visibility
|
|
// is greater than or equal to the expected version.
|
|
func VerifyCompatibleVersion(
|
|
cfg config.Persistence,
|
|
r resolver.ServiceResolver,
|
|
logger log.Logger,
|
|
) error {
|
|
|
|
if err := checkMainDatabase(cfg, r, logger); err != nil {
|
|
return err
|
|
}
|
|
if cfg.VisibilityConfigExist() {
|
|
return checkVisibilityDatabase(cfg, r, logger)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func checkMainDatabase(
|
|
cfg config.Persistence,
|
|
r resolver.ServiceResolver,
|
|
logger log.Logger,
|
|
) error {
|
|
ds, ok := cfg.DataStores[cfg.DefaultStore]
|
|
if ok && ds.SQL != nil {
|
|
return checkCompatibleVersion(ds.SQL, r, sqlplugin.DbKindMain, logger)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func checkVisibilityDatabase(
|
|
cfg config.Persistence,
|
|
r resolver.ServiceResolver,
|
|
logger log.Logger,
|
|
) error {
|
|
ds, ok := cfg.DataStores[cfg.VisibilityStore]
|
|
if ok && ds.SQL != nil {
|
|
return checkCompatibleVersion(ds.SQL, r, sqlplugin.DbKindVisibility, logger)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func checkCompatibleVersion(
|
|
cfg *config.SQL,
|
|
r resolver.ServiceResolver,
|
|
dbKind sqlplugin.DbKind,
|
|
logger log.Logger,
|
|
) error {
|
|
db, err := NewSQLAdminDB(dbKind, cfg, r, logger, metrics.NoopMetricsHandler)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer func() { _ = db.Close() }()
|
|
|
|
return db.VerifyVersion()
|
|
}
|