feat(eventstore): increase parallel write capabilities (#5940)

This implementation increases parallel write capabilities of the eventstore.
Please have a look at the technical advisories: [05](https://zitadel.com/docs/support/advisory/a10005) and  [06](https://zitadel.com/docs/support/advisory/a10006).
The implementation of eventstore.push is rewritten and stored events are migrated to a new table `eventstore.events2`.
If you are using cockroach: make sure that the database user of ZITADEL has `VIEWACTIVITY` grant. This is used to query events.
This commit is contained in:
Silvan
2023-10-19 12:19:10 +02:00
committed by GitHub
parent 259faba3f0
commit b5564572bc
791 changed files with 30326 additions and 43202 deletions

View File

@@ -8,7 +8,7 @@ import (
type aggregateOpt func(*Aggregate)
//NewAggregate is the default constructor of an aggregate
// NewAggregate is the default constructor of an aggregate
// opts overwrite values calculated by given parameters
func NewAggregate(
ctx context.Context,
@@ -32,7 +32,7 @@ func NewAggregate(
return a
}
//WithResourceOwner overwrites the resource owner of the aggregate
// WithResourceOwner overwrites the resource owner of the aggregate
// by default the resource owner is set by the context
func WithResourceOwner(resourceOwner string) aggregateOpt {
return func(aggregate *Aggregate) {
@@ -40,36 +40,48 @@ func WithResourceOwner(resourceOwner string) aggregateOpt {
}
}
//AggregateFromWriteModel maps the given WriteModel to an Aggregate
// WithInstanceID overwrites the instance id of the aggregate
// by default the instance is set by the context
func WithInstanceID(id string) aggregateOpt {
return func(aggregate *Aggregate) {
aggregate.InstanceID = id
}
}
// AggregateFromWriteModel maps the given WriteModel to an Aggregate
func AggregateFromWriteModel(
wm *WriteModel,
typ AggregateType,
version Version,
) *Aggregate {
return &Aggregate{
ID: wm.AggregateID,
Type: typ,
ResourceOwner: wm.ResourceOwner,
InstanceID: wm.InstanceID,
Version: version,
}
return NewAggregate(
context.Background(),
wm.AggregateID,
typ,
version,
WithResourceOwner(wm.ResourceOwner),
WithInstanceID(wm.InstanceID),
)
}
//Aggregate is the basic implementation of Aggregater
// Aggregate is the basic implementation of Aggregater
type Aggregate struct {
//ID is the unique identitfier of this aggregate
// ID is the unique identitfier of this aggregate
ID string `json:"-"`
//Type is the name of the aggregate.
// Type is the name of the aggregate.
Type AggregateType `json:"-"`
//ResourceOwner is the org this aggregates belongs to
// ResourceOwner is the org this aggregates belongs to
ResourceOwner string `json:"-"`
//InstanceID is the instance this aggregate belongs to
// InstanceID is the instance this aggregate belongs to
InstanceID string `json:"-"`
//Version is the semver this aggregate represents
// Version is the semver this aggregate represents
Version Version `json:"-"`
}
func isAggreagteTypes(a Aggregate, types ...AggregateType) bool {
// AggregateType is the object name
type AggregateType string
func isAggreagteTypes(a *Aggregate, types ...AggregateType) bool {
for _, typ := range types {
if a.Type == typ {
return true
@@ -78,7 +90,7 @@ func isAggreagteTypes(a Aggregate, types ...AggregateType) bool {
return false
}
func isAggregateIDs(a Aggregate, ids ...string) bool {
func isAggregateIDs(a *Aggregate, ids ...string) bool {
for _, id := range ids {
if a.ID == id {
return true