fix(eventstore): prevent allocation of filtered events (#6749)

* fix(eventstore): prevent allocation of filtered events

Directly reduce each event obtained from a sql.Rows scan,
so that we do not have to allocate all events in a slice.

* reinstate the mutex as RWMutex

* scan data directly

* add todos

* fix(writemodels): add reduce of parent

* test: remove comment

* update comments

---------

Co-authored-by: adlerhurst <silvan.reusser@gmail.com>
This commit is contained in:
Tim Möhlmann
2023-10-19 18:21:31 +03:00
committed by GitHub
parent 459761d99a
commit ab79855cf0
16 changed files with 150 additions and 93 deletions

View File

@@ -38,7 +38,7 @@ func (rm *ExistingLabelPoliciesReadModel) Reduce() error {
}
}
}
return nil
return rm.WriteModel.Reduce()
}
func (rm *ExistingLabelPoliciesReadModel) Query() *eventstore.SearchQueryBuilder {

View File

@@ -55,7 +55,7 @@ func (wm *InstanceDomainWriteModel) Reduce() error {
wm.State = domain.InstanceDomainStateRemoved
}
}
return nil
return wm.WriteModel.Reduce()
}
func (wm *InstanceDomainWriteModel) Query() *eventstore.SearchQueryBuilder {

View File

@@ -60,7 +60,7 @@ func (wm *InstanceWriteModel) Reduce() error {
wm.DefaultLanguage = e.Language
}
}
return nil
return wm.WriteModel.Reduce()
}
func (wm *InstanceWriteModel) Query() *eventstore.SearchQueryBuilder {

View File

@@ -84,7 +84,7 @@ func (wm *OrgDomainWriteModel) Reduce() error {
wm.ValidationCode = nil
}
}
return nil
return wm.WriteModel.Reduce()
}
func (wm *OrgDomainWriteModel) Query() *eventstore.SearchQueryBuilder {
@@ -154,7 +154,7 @@ func (wm *OrgDomainsWriteModel) Reduce() error {
}
}
}
return nil
return wm.WriteModel.Reduce()
}
func (wm *OrgDomainsWriteModel) Query() *eventstore.SearchQueryBuilder {
@@ -216,7 +216,7 @@ func (wm *OrgDomainVerifiedWriteModel) Reduce() error {
wm.Verified = false
}
}
return nil
return wm.WriteModel.Reduce()
}
func (wm *OrgDomainVerifiedWriteModel) Query() *eventstore.SearchQueryBuilder {

View File

@@ -25,6 +25,8 @@ var (
)
// PrepareCommands checks the passed validations and if ok creates the commands
//
// Deprecated: filter causes unneeded allocation. Use [eventstore.FilterToQueryReducer] instead.
func PrepareCommands(ctx context.Context, filter FilterToQueryReducer, validations ...Validation) (cmds []eventstore.Command, err error) {
commanders, err := validate(validations)
if err != nil {

View File

@@ -79,7 +79,7 @@ func (wm *quotaWriteModel) Reduce() error {
}
// wm.WriteModel.Reduce() sets the aggregateID to the first event's aggregateID, but we need the last one
wm.AggregateID = wm.rollingAggregateID
return nil
return wm.WriteModel.Reduce()
}
// NewChanges returns all changes that need to be applied to the aggregate.

View File

@@ -94,7 +94,7 @@ func (wm *SystemConfigWriteModel) Reduce() error {
}
}
}
return nil
return wm.WriteModel.Reduce()
}
func (wm *SystemConfigWriteModel) Query() *eventstore.SearchQueryBuilder {

View File

@@ -183,7 +183,7 @@ func (rm *UniqueConstraintReadModel) Reduce() error {
rm.removeUniqueConstraint(e.Aggregate().ID, e.UserID, member.UniqueMember)
}
}
return nil
return rm.WriteModel.Reduce()
}
func (rm *UniqueConstraintReadModel) Query() *eventstore.SearchQueryBuilder {