fix(migration): speed up update and add logs

This commit is contained in:
adlerhurst 2023-06-24 08:54:25 +02:00
parent 8041dd995c
commit c8b4ef28bd
4 changed files with 28 additions and 15 deletions

View File

@ -35,7 +35,7 @@ func (mig *CorrectCreationDate) Execute(ctx context.Context) (err error) {
defer cancel()
for {
affected := int64(0)
var affected int64
err = crdb.ExecuteTx(ctx, mig.dbClient.DB, nil, func(tx *sql.Tx) error {
if mig.dbClient.Type() == "cockroach" {
if _, err := tx.Exec("SET experimental_enable_temp_tables=on"); err != nil {

View File

@ -38,24 +38,34 @@ type AddEventCreatedAt struct {
func (mig *AddEventCreatedAt) Execute(ctx context.Context) error {
// execute step 10 again because events created after the first execution of step 10
// could still have the wrong ordering of sequences and creation date
logging.WithFields("step", "11").Info("ensure creation dates order")
if err := mig.step10.Execute(ctx); err != nil {
logging.WithFields("step", "11").WithError(err).Info("ensure creation dates order failed")
return err
}
logging.WithFields("step", "11").Info("ensure creation dates order done")
logging.WithFields("step", "11").Info("add created_at column")
_, err := mig.dbClient.ExecContext(ctx, addEventCreatedAt)
if err != nil {
logging.WithFields("step", "11").WithError(err).Info("add created_at column failed")
return err
}
logging.WithFields("step", "11").Info("created_at column added")
createIndex, err := readStmt(createdAtIndexCreateStmt, "11", mig.dbClient.Type(), "create_index.sql")
if err != nil {
return err
}
logging.WithFields("step", "11").Info("create index")
_, err = mig.dbClient.ExecContext(ctx, createIndex)
logging.WithFields("step", "11").WithError(err).Info("create index failed")
if err != nil {
return err
}
logging.WithFields("step", "11").Info("index created")
for {
for i := 0; ; i++ {
logging.WithFields("step", "11", "iteration", i).Info("begin set created_at iteration")
var count int
err = crdb.ExecuteTx(ctx, mig.dbClient.DB, nil, func(tx *sql.Tx) error {
rows, err := tx.Query(fetchCreatedAt, mig.BulkAmount)
@ -64,28 +74,30 @@ func (mig *AddEventCreatedAt) Execute(ctx context.Context) error {
}
defer rows.Close()
data := make(map[string]time.Time, 20)
type date struct {
instanceID string
eventSequence uint64
creationDate time.Time
}
dates := make([]*date, 0, 20)
for rows.Next() {
count++
var (
id string
creationDate time.Time
)
err = rows.Scan(&id, &creationDate)
d := new(date)
err = rows.Scan(&d.instanceID, &d.eventSequence, &d.creationDate)
if err != nil {
return err
}
data[id] = creationDate
dates = append(dates, d)
}
if err := rows.Err(); err != nil {
return err
}
for id, creationDate := range data {
_, err = tx.Exec(fillCreatedAt, creationDate, id)
for _, d := range dates {
_, err = tx.Exec(fillCreatedAt, d.creationDate, d.instanceID, d.eventSequence)
if err != nil {
return err
}
@ -96,7 +108,7 @@ func (mig *AddEventCreatedAt) Execute(ctx context.Context) error {
if err != nil {
return err
}
logging.WithFields("count", count).Info("creation dates set")
logging.WithFields("step", "11", "iteration", i, "count", count).Info("set created_at iteration done")
if count < 20 {
break
}

View File

@ -1,5 +1,6 @@
SELECT
id
instance_id
, event_sequence
, creation_date
FROM
eventstore.events

View File

@ -1 +1 @@
UPDATE eventstore.events SET created_at = $1 WHERE id = $2
UPDATE eventstore.events SET created_at = $1 WHERE instance_id = $2 AND event_sequence = $3