mirror of
https://github.com/zitadel/zitadel.git
synced 2025-07-17 16:38:37 +00:00

# Eventstore fixes - `event.Position` used float64 before which can lead to [precision loss](https://github.com/golang/go/issues/47300). The type got replaced by [a type without precision loss](https://github.com/jackc/pgx-shopspring-decimal) - the handler reported the wrong error if the current state was updated and therefore took longer to retry failed events. # Mirror fixes - max age of auth requests can be configured to speed up copying data from `auth.auth_requests` table. Auth requests last updated before the set age will be ignored. Default is 1 month - notification projections are skipped because notifications should be sent by the source system. The projections are set to the latest position - ensure that mirror can be executed multiple times --------- Co-authored-by: Livio Spring <livio.a@gmail.com>
65 lines
1.7 KiB
Go
65 lines
1.7 KiB
Go
package mirror
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/shopspring/decimal"
|
|
|
|
"github.com/zitadel/zitadel/internal/v2/eventstore"
|
|
"github.com/zitadel/zitadel/internal/v2/readmodel"
|
|
"github.com/zitadel/zitadel/internal/v2/system"
|
|
mirror_event "github.com/zitadel/zitadel/internal/v2/system/mirror"
|
|
)
|
|
|
|
func queryLastSuccessfulMigration(ctx context.Context, destinationES *eventstore.EventStore, source string) (*readmodel.LastSuccessfulMirror, error) {
|
|
lastSuccess := readmodel.NewLastSuccessfulMirror(source)
|
|
if shouldIgnorePrevious {
|
|
return lastSuccess, nil
|
|
}
|
|
_, err := destinationES.Query(
|
|
ctx,
|
|
eventstore.NewQuery(
|
|
system.AggregateInstance,
|
|
lastSuccess,
|
|
eventstore.SetFilters(lastSuccess.Filter()),
|
|
),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return lastSuccess, nil
|
|
}
|
|
|
|
func writeMigrationSucceeded(ctx context.Context, destinationES *eventstore.EventStore, id, source string, position decimal.Decimal) error {
|
|
return destinationES.Push(
|
|
ctx,
|
|
eventstore.NewPushIntent(
|
|
system.AggregateInstance,
|
|
eventstore.AppendAggregate(
|
|
system.AggregateOwner,
|
|
system.AggregateType,
|
|
id,
|
|
eventstore.CurrentSequenceMatches(0),
|
|
eventstore.AppendCommands(mirror_event.NewSucceededCommand(source, position)),
|
|
),
|
|
),
|
|
)
|
|
}
|
|
|
|
func writeMigrationFailed(ctx context.Context, destinationES *eventstore.EventStore, id, source string, err error) error {
|
|
return destinationES.Push(
|
|
ctx,
|
|
eventstore.NewPushIntent(
|
|
system.AggregateInstance,
|
|
eventstore.AppendAggregate(
|
|
system.AggregateOwner,
|
|
system.AggregateType,
|
|
id,
|
|
eventstore.CurrentSequenceMatches(0),
|
|
eventstore.AppendCommands(mirror_event.NewFailedCommand(source, err)),
|
|
),
|
|
),
|
|
)
|
|
}
|