mirror of
https://github.com/andwati/zitadel.git
synced 2026-10-18 05:52:51 +00:00
fix: connection handling in setup after migration steps 40, 64 and 70 (#12293)
# Which Problems Are Solved During the setup step we saw rare cases which caused setup to fail after executing steps 40, 64 and 70. # How the Problems Are Solved Close currently open database connections so that they fetch the correct type mapping for the `eventstore.command2` database type. # Additional Changes Ensure correct order of setup steps 64 and 70. # Additional Context None --------- Co-authored-by: Livio Spring <[email protected]>
This commit is contained in:
@@ -52,6 +52,12 @@ func (mig *InitPushFunc) Execute(ctx context.Context, _ eventstore.Event) (err e
|
|||||||
return fmt.Errorf("%s %s: %w", mig.String(), stmt.file, err)
|
return fmt.Errorf("%s %s: %w", mig.String(), stmt.file, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// close idle connections to prevent them from using the old prepared statement with the wrong type
|
||||||
|
// and having wrong plan of `eventstore.command2`-type
|
||||||
|
for _, conn := range mig.dbClient.Pool.AcquireAllIdle(ctx) {
|
||||||
|
logging.OnError(ctx, conn.Conn().Close(ctx)).Debug("failed to close idle connection")
|
||||||
|
conn.Release()
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-1
@@ -6,6 +6,7 @@ import (
|
|||||||
_ "embed"
|
_ "embed"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/zitadel/zitadel/backend/v3/instrumentation/logging"
|
||||||
"github.com/zitadel/zitadel/internal/database"
|
"github.com/zitadel/zitadel/internal/database"
|
||||||
"github.com/zitadel/zitadel/internal/eventstore"
|
"github.com/zitadel/zitadel/internal/eventstore"
|
||||||
)
|
)
|
||||||
@@ -26,7 +27,16 @@ func (mig *ChangePushPosition) Execute(ctx context.Context, _ eventstore.Event)
|
|||||||
}
|
}
|
||||||
stmt := fmt.Sprintf(changePushPosition, inTxOrderType)
|
stmt := fmt.Sprintf(changePushPosition, inTxOrderType)
|
||||||
_, err = mig.dbClient.ExecContext(ctx, stmt)
|
_, err = mig.dbClient.ExecContext(ctx, stmt)
|
||||||
return err
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// close idle connections to prevent them from using the old prepared statement with the wrong type
|
||||||
|
// and having wrong plan of `eventstore.command2`-type
|
||||||
|
for _, conn := range mig.dbClient.Pool.AcquireAllIdle(ctx) {
|
||||||
|
logging.OnError(ctx, conn.Conn().Close(ctx)).Debug("failed to close idle connection")
|
||||||
|
conn.Release()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mig *ChangePushPosition) String() string {
|
func (mig *ChangePushPosition) String() string {
|
||||||
|
|||||||
+11
-1
@@ -5,6 +5,7 @@ import (
|
|||||||
_ "embed"
|
_ "embed"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/zitadel/zitadel/backend/v3/instrumentation/logging"
|
||||||
"github.com/zitadel/zitadel/internal/database"
|
"github.com/zitadel/zitadel/internal/database"
|
||||||
"github.com/zitadel/zitadel/internal/eventstore"
|
"github.com/zitadel/zitadel/internal/eventstore"
|
||||||
)
|
)
|
||||||
@@ -26,7 +27,16 @@ func (mig *AddEventStoreCommandEnforceOwnerColumn) Execute(ctx context.Context,
|
|||||||
|
|
||||||
stmt := fmt.Sprintf(addEventStoreCommandEnforceOwnerColumn, inTxOrderType)
|
stmt := fmt.Sprintf(addEventStoreCommandEnforceOwnerColumn, inTxOrderType)
|
||||||
_, err = mig.dbClient.ExecContext(ctx, stmt)
|
_, err = mig.dbClient.ExecContext(ctx, stmt)
|
||||||
return err
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// close idle connections to prevent them from using the old prepared statement with the wrong type
|
||||||
|
// and having wrong plan of `eventstore.command2`-type
|
||||||
|
for _, conn := range mig.dbClient.Pool.AcquireAllIdle(ctx) {
|
||||||
|
logging.OnError(ctx, conn.Conn().Close(ctx)).Debug("failed to close idle connection")
|
||||||
|
conn.Release()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mig *AddEventStoreCommandEnforceOwnerColumn) String() string {
|
func (mig *AddEventStoreCommandEnforceOwnerColumn) String() string {
|
||||||
|
|||||||
+1
-1
@@ -263,7 +263,6 @@ func Setup(ctx context.Context, config *Config, steps *Steps, masterKey string)
|
|||||||
for _, step := range []migration.Migration{
|
for _, step := range []migration.Migration{
|
||||||
steps.s14NewEventsTable,
|
steps.s14NewEventsTable,
|
||||||
steps.s40InitPushFunc,
|
steps.s40InitPushFunc,
|
||||||
steps.s70AddEventStoreCommandEnforceOwner,
|
|
||||||
steps.s1ProjectionTable,
|
steps.s1ProjectionTable,
|
||||||
steps.s2AssetsTable,
|
steps.s2AssetsTable,
|
||||||
steps.s28AddFieldTable,
|
steps.s28AddFieldTable,
|
||||||
@@ -312,6 +311,7 @@ func Setup(ctx context.Context, config *Config, steps *Steps, masterKey string)
|
|||||||
steps.s65FixUserMetadata5Index,
|
steps.s65FixUserMetadata5Index,
|
||||||
steps.s67SyncMemberRoleFields,
|
steps.s67SyncMemberRoleFields,
|
||||||
steps.s69CacheTablesLogged,
|
steps.s69CacheTablesLogged,
|
||||||
|
steps.s70AddEventStoreCommandEnforceOwner,
|
||||||
} {
|
} {
|
||||||
setupErr = executeMigration(ctx, eventstoreClient, step, "migration failed")
|
setupErr = executeMigration(ctx, eventstoreClient, step, "migration failed")
|
||||||
if setupErr != nil {
|
if setupErr != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user