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

@@ -2,13 +2,10 @@ package project
import (
"context"
"encoding/json"
"fmt"
"github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -22,15 +19,15 @@ var (
GrantRemovedType = grantEventTypePrefix + "removed"
)
func NewAddProjectGrantUniqueConstraint(grantedOrgID, projectID string) *eventstore.EventUniqueConstraint {
func NewAddProjectGrantUniqueConstraint(grantedOrgID, projectID string) *eventstore.UniqueConstraint {
return eventstore.NewAddEventUniqueConstraint(
UniqueGrantType,
fmt.Sprintf("%s:%s", grantedOrgID, projectID),
"Errors.Project.Grant.AlreadyExists")
}
func NewRemoveProjectGrantUniqueConstraint(grantedOrgID, projectID string) *eventstore.EventUniqueConstraint {
return eventstore.NewRemoveEventUniqueConstraint(
func NewRemoveProjectGrantUniqueConstraint(grantedOrgID, projectID string) *eventstore.UniqueConstraint {
return eventstore.NewRemoveUniqueConstraint(
UniqueGrantType,
fmt.Sprintf("%s:%s", grantedOrgID, projectID))
}
@@ -43,12 +40,12 @@ type GrantAddedEvent struct {
RoleKeys []string `json:"roleKeys,omitempty"`
}
func (e *GrantAddedEvent) Data() interface{} {
func (e *GrantAddedEvent) Payload() interface{} {
return e
}
func (e *GrantAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
return []*eventstore.EventUniqueConstraint{NewAddProjectGrantUniqueConstraint(e.GrantedOrgID, e.Aggregate().ID)}
func (e *GrantAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return []*eventstore.UniqueConstraint{NewAddProjectGrantUniqueConstraint(e.GrantedOrgID, e.Aggregate().ID)}
}
func NewGrantAddedEvent(
@@ -70,12 +67,12 @@ func NewGrantAddedEvent(
}
}
func GrantAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
func GrantAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GrantAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
err := json.Unmarshal(event.Data, e)
err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-mL0vs", "unable to unmarshal project grant")
}
@@ -90,11 +87,11 @@ type GrantChangedEvent struct {
RoleKeys []string `json:"roleKeys,omitempty"`
}
func (e *GrantChangedEvent) Data() interface{} {
func (e *GrantChangedEvent) Payload() interface{} {
return e
}
func (e *GrantChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
func (e *GrantChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -115,12 +112,12 @@ func NewGrantChangedEvent(
}
}
func GrantChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
func GrantChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GrantChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
err := json.Unmarshal(event.Data, e)
err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-mL0vs", "unable to unmarshal project grant")
}
@@ -135,11 +132,11 @@ type GrantCascadeChangedEvent struct {
RoleKeys []string `json:"roleKeys,omitempty"`
}
func (e *GrantCascadeChangedEvent) Data() interface{} {
func (e *GrantCascadeChangedEvent) Payload() interface{} {
return e
}
func (e *GrantCascadeChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
func (e *GrantCascadeChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -160,12 +157,12 @@ func NewGrantCascadeChangedEvent(
}
}
func GrantCascadeChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
func GrantCascadeChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GrantCascadeChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
err := json.Unmarshal(event.Data, e)
err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-9o0se", "unable to unmarshal project grant")
}
@@ -179,11 +176,11 @@ type GrantDeactivateEvent struct {
GrantID string `json:"grantId,omitempty"`
}
func (e *GrantDeactivateEvent) Data() interface{} {
func (e *GrantDeactivateEvent) Payload() interface{} {
return e
}
func (e *GrantDeactivateEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
func (e *GrantDeactivateEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -202,12 +199,12 @@ func NewGrantDeactivateEvent(
}
}
func GrantDeactivateEventMapper(event *repository.Event) (eventstore.Event, error) {
func GrantDeactivateEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GrantDeactivateEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
err := json.Unmarshal(event.Data, e)
err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-9o0se", "unable to unmarshal project grant")
}
@@ -221,11 +218,11 @@ type GrantReactivatedEvent struct {
GrantID string `json:"grantId,omitempty"`
}
func (e *GrantReactivatedEvent) Data() interface{} {
func (e *GrantReactivatedEvent) Payload() interface{} {
return e
}
func (e *GrantReactivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
func (e *GrantReactivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -244,12 +241,12 @@ func NewGrantReactivatedEvent(
}
}
func GrantReactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
func GrantReactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GrantReactivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
err := json.Unmarshal(event.Data, e)
err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-78f7D", "unable to unmarshal project grant")
}
@@ -264,12 +261,12 @@ type GrantRemovedEvent struct {
grantedOrgID string
}
func (e *GrantRemovedEvent) Data() interface{} {
func (e *GrantRemovedEvent) Payload() interface{} {
return e
}
func (e *GrantRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
return []*eventstore.EventUniqueConstraint{NewRemoveProjectGrantUniqueConstraint(e.grantedOrgID, e.Aggregate().ID)}
func (e *GrantRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return []*eventstore.UniqueConstraint{NewRemoveProjectGrantUniqueConstraint(e.grantedOrgID, e.Aggregate().ID)}
}
func NewGrantRemovedEvent(
@@ -289,12 +286,12 @@ func NewGrantRemovedEvent(
}
}
func GrantRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
func GrantRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GrantRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
err := json.Unmarshal(event.Data, e)
err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-28jM8", "unable to unmarshal project grant")
}