fix(setup): member role synchronization execution check (#11180)

The change was introduced in
https://github.com/zitadel/zitadel/pull/11178.
The fix is to prevent wiping the memberships because the projection did
not init yet.

### Changes
- Introduces a check to determine if the member role synchronization
should be executed based on the existence of a specific database table
(`projections.instance_members4`).
- Ensures that the synchronization process only runs if the required
table is present in the database.

(cherry picked from commit 1b54a9eb05)
This commit is contained in:
Silvan
2025-12-12 11:09:03 +01:00
committed by Livio Spring
parent 2e09effe8b
commit b58292847b
2 changed files with 13 additions and 2 deletions

View File

@@ -2,6 +2,7 @@ package setup
import (
"context"
"database/sql"
_ "embed"
"github.com/zitadel/zitadel/internal/database"
@@ -18,7 +19,17 @@ type SyncMemberRoleFields struct {
}
func (mig *SyncMemberRoleFields) Execute(ctx context.Context, _ eventstore.Event) error {
_, err := mig.dbClient.ExecContext(ctx, syncMemberRoleFields)
var exists bool
err := mig.dbClient.QueryRowContext(
ctx,
func(row *sql.Row) error {
return row.Scan(&exists)
},
"SELECT EXISTS(SELECT FROM pg_catalog.pg_tables WHERE schemaname = 'projections' and tablename = 'instance_members4')")
if err != nil || !exists {
return err
}
_, err = mig.dbClient.ExecContext(ctx, syncMemberRoleFields)
return err
}

View File

@@ -277,6 +277,7 @@ func Setup(ctx context.Context, config *Config, steps *Steps, masterKey string)
steps.s63AlterResourceCounts,
steps.s64ChangePushPosition,
steps.s65FixUserMetadata5Index,
steps.s67SyncMemberRoleFields,
} {
setupErr = executeMigration(ctx, eventstoreClient, step, "migration failed")
if setupErr != nil {
@@ -336,7 +337,6 @@ func Setup(ctx context.Context, config *Config, steps *Steps, masterKey string)
steps.s43CreateFieldsDomainIndex,
steps.s48Apps7SAMLConfigsLoginVersion,
steps.s59SetupWebkeys, // this step needs commands.
steps.s67SyncMemberRoleFields,
} {
setupErr = executeMigration(ctx, eventstoreClient, step, "migration failed")
if setupErr != nil {