fix(migration): speed up step 11 (#6086)

This commit is contained in:
Silvan 2023-06-27 11:56:17 +02:00 committed by GitHub
parent cef17b4a7a
commit d0cda1b479
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 29 additions and 51 deletions

View File

@ -4,7 +4,6 @@ import (
"context" "context"
"database/sql" "database/sql"
"embed" "embed"
"time"
"github.com/cockroachdb/cockroach-go/v2/crdb" "github.com/cockroachdb/cockroach-go/v2/crdb"
"github.com/zitadel/logging" "github.com/zitadel/logging"
@ -15,10 +14,8 @@ import (
var ( var (
//go:embed 11/11_add_column.sql //go:embed 11/11_add_column.sql
addEventCreatedAt string addEventCreatedAt string
//go:embed 11/11_fetch_events.sql //go:embed 11/11_update_events.sql
fetchCreatedAt string setCreatedAt string
//go:embed 11/11_fill_column.sql
fillCreatedAt string
//go:embed 11/11_set_column.sql //go:embed 11/11_set_column.sql
setCreatedAtDetails string setCreatedAtDetails string
//go:embed 11/postgres/create_index.sql //go:embed 11/postgres/create_index.sql
@ -55,49 +52,22 @@ func (mig *AddEventCreatedAt) Execute(ctx context.Context) error {
return err return err
} }
for { for i := 0; ; i++ {
var count int var affected int64
err = crdb.ExecuteTx(ctx, mig.dbClient.DB, nil, func(tx *sql.Tx) error { err = crdb.ExecuteTx(ctx, mig.dbClient.DB, nil, func(tx *sql.Tx) error {
rows, err := tx.Query(fetchCreatedAt, mig.BulkAmount) res, err := tx.Exec(setCreatedAt, mig.BulkAmount)
if err != nil {
return err
}
defer rows.Close()
data := make(map[string]time.Time, 20)
for rows.Next() {
count++
var (
id string
creationDate time.Time
)
err = rows.Scan(&id, &creationDate)
if err != nil { if err != nil {
return err return err
} }
data[id] = creationDate affected, _ = res.RowsAffected()
}
if err := rows.Err(); err != nil {
return err
}
for id, creationDate := range data {
_, err = tx.Exec(fillCreatedAt, creationDate, id)
if err != nil {
return err
}
}
return nil return nil
}) })
if err != nil { if err != nil {
return err return err
} }
logging.WithFields("count", count).Info("creation dates set") logging.WithFields("step", "11", "iteration", i, "affected", affected).Info("set created_at iteration done")
if count < 20 { if affected < int64(mig.BulkAmount) {
break break
} }
} }

View File

@ -1,12 +0,0 @@
SELECT
id
, creation_date
FROM
eventstore.events
WHERE
created_at IS NULL
ORDER BY
event_sequence DESC
, instance_id
LIMIT $1
FOR UPDATE

View File

@ -1 +0,0 @@
UPDATE eventstore.events SET created_at = $1 WHERE id = $2

View File

@ -0,0 +1,21 @@
UPDATE eventstore.events SET
created_at = creation_date
FROM (
SELECT
e.event_sequence as seq
, e.instance_id as i_id
, e.creation_date as cd
FROM
eventstore.events e
WHERE
created_at IS NULL
ORDER BY
event_sequence ASC
, instance_id
LIMIT $1
) AS e
WHERE
e.seq = eventstore.events.event_sequence
AND e.i_id = eventstore.events.instance_id
AND e.cd = eventstore.events.creation_date
;