mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-12 00:17:32 +00:00
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:
@@ -168,12 +168,11 @@ func instanceIDsScanner(scanner scan, dest interface{}) (err error) {
|
||||
|
||||
func eventsScanner(useV1 bool) func(scanner scan, dest interface{}) (err error) {
|
||||
return func(scanner scan, dest interface{}) (err error) {
|
||||
events, ok := dest.(*[]eventstore.Event)
|
||||
reduce, ok := dest.(eventstore.Reducer)
|
||||
if !ok {
|
||||
return z_errors.ThrowInvalidArgument(nil, "SQL-4GP6F", "type must be event")
|
||||
return z_errors.ThrowInvalidArgumentf(nil, "SQL-4GP6F", "events scanner: invalid type %T", dest)
|
||||
}
|
||||
event := new(repository.Event)
|
||||
data := sql.RawBytes{}
|
||||
position := new(sql.NullFloat64)
|
||||
|
||||
if useV1 {
|
||||
@@ -181,7 +180,7 @@ func eventsScanner(useV1 bool) func(scanner scan, dest interface{}) (err error)
|
||||
&event.CreationDate,
|
||||
&event.Typ,
|
||||
&event.Seq,
|
||||
&data,
|
||||
&event.Data,
|
||||
&event.EditorUser,
|
||||
&event.ResourceOwner,
|
||||
&event.InstanceID,
|
||||
@@ -196,7 +195,7 @@ func eventsScanner(useV1 bool) func(scanner scan, dest interface{}) (err error)
|
||||
&event.Typ,
|
||||
&event.Seq,
|
||||
position,
|
||||
&data,
|
||||
&event.Data,
|
||||
&event.EditorUser,
|
||||
&event.ResourceOwner,
|
||||
&event.InstanceID,
|
||||
@@ -211,14 +210,8 @@ func eventsScanner(useV1 bool) func(scanner scan, dest interface{}) (err error)
|
||||
logging.New().WithError(err).Warn("unable to scan row")
|
||||
return z_errors.ThrowInternal(err, "SQL-M0dsf", "unable to scan row")
|
||||
}
|
||||
|
||||
event.Data = make([]byte, len(data))
|
||||
copy(event.Data, data)
|
||||
event.Pos = position.Float64
|
||||
|
||||
*events = append(*events, event)
|
||||
|
||||
return nil
|
||||
return reduce(event)
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user