diff --git a/cmd/setup/44.go b/cmd/setup/44.go new file mode 100644 index 0000000000..11c355a053 --- /dev/null +++ b/cmd/setup/44.go @@ -0,0 +1,39 @@ +package setup + +import ( + "context" + "embed" + "fmt" + + "github.com/zitadel/logging" + + "github.com/zitadel/zitadel/internal/database" + "github.com/zitadel/zitadel/internal/eventstore" +) + +var ( + //go:embed 44/*.sql + replaceCurrentSequencesIndex embed.FS +) + +type ReplaceCurrentSequencesIndex struct { + dbClient *database.DB +} + +func (mig *ReplaceCurrentSequencesIndex) Execute(ctx context.Context, _ eventstore.Event) error { + statements, err := readStatements(replaceCurrentSequencesIndex, "44", "") + if err != nil { + return err + } + for _, stmt := range statements { + logging.WithFields("file", stmt.file, "migration", mig.String()).Info("execute statement") + if _, err := mig.dbClient.ExecContext(ctx, stmt.query); err != nil { + return fmt.Errorf("%s %s: %w", mig.String(), stmt.file, err) + } + } + return nil +} + +func (mig *ReplaceCurrentSequencesIndex) String() string { + return "44_replace_current_sequences_index" +} diff --git a/cmd/setup/44/01_create_index.sql b/cmd/setup/44/01_create_index.sql new file mode 100644 index 0000000000..105d5b76b6 --- /dev/null +++ b/cmd/setup/44/01_create_index.sql @@ -0,0 +1,3 @@ +CREATE INDEX CONCURRENTLY IF NOT EXISTS events2_current_sequence2 + ON eventstore.events2 USING btree + (aggregate_id ASC, aggregate_type ASC, instance_id ASC, sequence DESC); diff --git a/cmd/setup/44/02_drop_old_index.sql b/cmd/setup/44/02_drop_old_index.sql new file mode 100644 index 0000000000..cf97ff9fc3 --- /dev/null +++ b/cmd/setup/44/02_drop_old_index.sql @@ -0,0 +1 @@ +DROP INDEX IF EXISTS eventstore.events2_current_sequence; \ No newline at end of file diff --git a/cmd/setup/config.go b/cmd/setup/config.go index 407a9412bb..9f34c2baa5 100644 --- a/cmd/setup/config.go +++ b/cmd/setup/config.go @@ -129,6 +129,7 @@ type Steps struct { s40InitPushFunc *InitPushFunc s42Apps7OIDCConfigsLoginVersion *Apps7OIDCConfigsLoginVersion s43CreateFieldsDomainIndex *CreateFieldsDomainIndex + s44ReplaceCurrentSequencesIndex *ReplaceCurrentSequencesIndex } func MustNewSteps(v *viper.Viper) *Steps { diff --git a/cmd/setup/setup.go b/cmd/setup/setup.go index c803ab55b6..4ffef441af 100644 --- a/cmd/setup/setup.go +++ b/cmd/setup/setup.go @@ -172,6 +172,7 @@ func Setup(ctx context.Context, config *Config, steps *Steps, masterKey string) steps.s40InitPushFunc = &InitPushFunc{dbClient: esPusherDBClient} steps.s42Apps7OIDCConfigsLoginVersion = &Apps7OIDCConfigsLoginVersion{dbClient: esPusherDBClient} steps.s43CreateFieldsDomainIndex = &CreateFieldsDomainIndex{dbClient: queryDBClient} + steps.s44ReplaceCurrentSequencesIndex = &ReplaceCurrentSequencesIndex{dbClient: esPusherDBClient} err = projection.Create(ctx, projectionDBClient, eventstoreClient, config.Projections, nil, nil, nil) logging.OnError(err).Fatal("unable to start projections") @@ -225,6 +226,7 @@ func Setup(ctx context.Context, config *Config, steps *Steps, masterKey string) steps.s35AddPositionToIndexEsWm, steps.s36FillV2Milestones, steps.s38BackChannelLogoutNotificationStart, + steps.s44ReplaceCurrentSequencesIndex, } { mustExecuteMigration(ctx, eventstoreClient, step, "migration failed") }