mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-07 06:03:09 -06:00
Remove recursion from loadAuthEvents
This commit is contained in:
parent
992d324c10
commit
507616b77a
|
|
@ -981,35 +981,38 @@ func (v *StateResolution) loadAuthEvents(
|
||||||
ctx context.Context, event *gomatrixserverlib.Event,
|
ctx context.Context, event *gomatrixserverlib.Event,
|
||||||
) ([]*gomatrixserverlib.Event, map[string]types.StateEntry, error) {
|
) ([]*gomatrixserverlib.Event, map[string]types.StateEntry, error) {
|
||||||
eventMap := map[string]struct{}{}
|
eventMap := map[string]struct{}{}
|
||||||
var getEvents func(eventIDs []string) ([]types.Event, error)
|
var lookup []string
|
||||||
getEvents = func(eventIDs []string) ([]types.Event, error) {
|
var authEvents []types.Event
|
||||||
lookup := make([]string, 0, len(event.AuthEventIDs()))
|
queue := event.AuthEventIDs()
|
||||||
for _, eventID := range eventIDs {
|
for i := 0; i < len(queue); i++ {
|
||||||
if _, ok := eventMap[eventID]; ok {
|
lookup = lookup[:0]
|
||||||
|
for _, authEventID := range queue {
|
||||||
|
if _, ok := eventMap[authEventID]; ok {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
lookup = append(lookup, eventID)
|
lookup = append(lookup, authEventID)
|
||||||
}
|
}
|
||||||
if len(lookup) == 0 {
|
if len(lookup) == 0 {
|
||||||
return nil, nil
|
break
|
||||||
}
|
}
|
||||||
events, err := v.db.EventsFromIDs(ctx, lookup)
|
events, err := v.db.EventsFromIDs(ctx, lookup)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("v.db.EventsFromIDs: %w", err)
|
return nil, nil, fmt.Errorf("v.db.EventsFromIDs: %w", err)
|
||||||
}
|
}
|
||||||
|
add := map[string]struct{}{}
|
||||||
for _, event := range events {
|
for _, event := range events {
|
||||||
eventMap[event.EventID()] = struct{}{}
|
eventMap[event.EventID()] = struct{}{}
|
||||||
next, err := getEvents(event.AuthEventIDs())
|
authEvents = append(authEvents, event)
|
||||||
if err != nil {
|
for _, authEventID := range event.AuthEventIDs() {
|
||||||
return nil, err
|
if _, ok := eventMap[authEventID]; ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
add[authEventID] = struct{}{}
|
||||||
|
}
|
||||||
|
for authEventID := range add {
|
||||||
|
queue = append(queue, authEventID)
|
||||||
}
|
}
|
||||||
events = append(events, next...)
|
|
||||||
}
|
}
|
||||||
return events, nil
|
|
||||||
}
|
|
||||||
authEvents, err := getEvents(event.AuthEventIDs())
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, fmt.Errorf("getEvents: %w", err)
|
|
||||||
}
|
}
|
||||||
authEventTypes := map[string]struct{}{}
|
authEventTypes := map[string]struct{}{}
|
||||||
authEventStateKeys := map[string]struct{}{}
|
authEventStateKeys := map[string]struct{}{}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue