fix(setup): reenable index creation (#9868)

# Which Problems Are Solved

We saw high CPU usage if many events were created on the database. This
was caused by the new actions which query for all event types and
aggregate types.

# How the Problems Are Solved

- the handler of action execution does not filter for aggregate and
event types.
- the index for `instance_id` and `position` is reenabled.

# Additional Changes

none

# Additional Context

none
This commit is contained in:
Silvan
2025-05-08 17:13:57 +02:00
committed by GitHub
parent 867e9cb15a
commit 60ce32ca4f
4 changed files with 19 additions and 2 deletions

View File

@@ -23,5 +23,5 @@ func (mig *InstancePositionIndex) Execute(ctx context.Context, _ eventstore.Even
}
func (mig *InstancePositionIndex) String() string {
return "54_instance_position_index_remove"
return "54_instance_position_index_again"
}

View File

@@ -1 +1 @@
DROP INDEX IF EXISTS eventstore.es_instance_position;
CREATE INDEX CONCURRENTLY IF NOT EXISTS es_instance_position ON eventstore.events2 (instance_id, position);

View File

@@ -60,6 +60,7 @@ type Handler struct {
requeueEvery time.Duration
txDuration time.Duration
now nowFunc
queryGlobal bool
triggeredInstancesSync sync.Map
@@ -143,6 +144,11 @@ type Projection interface {
Reducers() []AggregateReducer
}
type GlobalProjection interface {
Projection
FilterGlobalEvents()
}
func NewHandler(
ctx context.Context,
config *Config,
@@ -185,6 +191,10 @@ func NewHandler(
metrics: metrics,
}
if _, ok := projection.(GlobalProjection); ok {
handler.queryGlobal = true
}
return handler
}
@@ -676,6 +686,10 @@ func (h *Handler) eventQuery(currentState *state) *eventstore.SearchQueryBuilder
}
}
if h.queryGlobal {
return builder
}
aggregateTypes := make([]eventstore.AggregateType, 0, len(h.eventTypes))
eventTypes := make([]eventstore.EventType, 0, len(h.eventTypes))

View File

@@ -84,6 +84,9 @@ func (u *eventHandler) Reducers() []handler.AggregateReducer {
return aggReducers
}
// FilterGlobalEvents implements [handler.GlobalProjection]
func (u *eventHandler) FilterGlobalEvents() {}
func groupsFromEventType(s string) []string {
parts := strings.Split(s, ".")
groups := make([]string, len(parts))