loadStateEvents loads the matrix events for a list of state entries. Returns a list of state events in no particular order and a map from string event ID back to state entry. The map can be used to recover which numeric state entry a given event is for. Returns an error if there was a problem talkin
( ctx context.Context, entries []types.StateEntry, )
| 1043 | // The map can be used to recover which numeric state entry a given event is for. |
| 1044 | // Returns an error if there was a problem talking to the database. |
| 1045 | func (v *StateResolution) loadStateEvents( |
| 1046 | ctx context.Context, entries []types.StateEntry, |
| 1047 | ) ([]*gomatrixserverlib.Event, map[string]types.StateEntry, error) { |
| 1048 | span, ctx := opentracing.StartSpanFromContext(ctx, "StateResolution.loadStateEvents") |
| 1049 | defer span.Finish() |
| 1050 | |
| 1051 | result := make([]*gomatrixserverlib.Event, 0, len(entries)) |
| 1052 | eventEntries := make([]types.StateEntry, 0, len(entries)) |
| 1053 | eventNIDs := make(types.EventNIDs, 0, len(entries)) |
| 1054 | for _, entry := range entries { |
| 1055 | if e, ok := v.events[entry.EventNID]; ok { |
| 1056 | result = append(result, e) |
| 1057 | } else { |
| 1058 | eventEntries = append(eventEntries, entry) |
| 1059 | eventNIDs = append(eventNIDs, entry.EventNID) |
| 1060 | } |
| 1061 | } |
| 1062 | events, err := v.db.Events(ctx, eventNIDs) |
| 1063 | if err != nil { |
| 1064 | return nil, nil, err |
| 1065 | } |
| 1066 | eventIDMap := map[string]types.StateEntry{} |
| 1067 | for _, entry := range eventEntries { |
| 1068 | event, ok := eventMap(events).lookup(entry.EventNID) |
| 1069 | if !ok { |
| 1070 | panic(fmt.Errorf("corrupt DB: Missing event numeric ID %d", entry.EventNID)) |
| 1071 | } |
| 1072 | result = append(result, event.Event) |
| 1073 | eventIDMap[event.Event.EventID()] = entry |
| 1074 | v.events[entry.EventNID] = event.Event |
| 1075 | } |
| 1076 | return result, eventIDMap, nil |
| 1077 | } |
| 1078 | |
| 1079 | type authEventLoader struct { |
| 1080 | sync.Mutex |
no test coverage detected