mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-24 07:13:09 -06:00
Resolve state
This commit is contained in:
parent
8fce60c746
commit
077a23fea0
|
|
@ -49,6 +49,7 @@ func (r *Queryer) QueryLatestEventsAndState(
|
||||||
}
|
}
|
||||||
|
|
||||||
// QueryStateAfterEvents implements api.RoomserverInternalAPI
|
// QueryStateAfterEvents implements api.RoomserverInternalAPI
|
||||||
|
// nolint:gocyclo
|
||||||
func (r *Queryer) QueryStateAfterEvents(
|
func (r *Queryer) QueryStateAfterEvents(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
request *api.QueryStateAfterEventsRequest,
|
request *api.QueryStateAfterEventsRequest,
|
||||||
|
|
@ -81,7 +82,6 @@ func (r *Queryer) QueryStateAfterEvents(
|
||||||
var stateEntries []types.StateEntry
|
var stateEntries []types.StateEntry
|
||||||
if len(request.StateToFetch) == 0 {
|
if len(request.StateToFetch) == 0 {
|
||||||
// Look up all of the current room state.
|
// Look up all of the current room state.
|
||||||
// TODO: This can return duplicate state-key tuples, is this a problem?
|
|
||||||
stateEntries, err = roomState.LoadCombinedStateAfterEvents(
|
stateEntries, err = roomState.LoadCombinedStateAfterEvents(
|
||||||
ctx, prevStates,
|
ctx, prevStates,
|
||||||
)
|
)
|
||||||
|
|
@ -100,6 +100,24 @@ func (r *Queryer) QueryStateAfterEvents(
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(request.PrevEventIDs) > 1 && len(request.StateToFetch) == 0 {
|
||||||
|
var authEventIDs []string
|
||||||
|
for _, e := range stateEvents {
|
||||||
|
authEventIDs = append(authEventIDs, e.AuthEventIDs()...)
|
||||||
|
}
|
||||||
|
authEventIDs = util.UniqueStrings(authEventIDs)
|
||||||
|
|
||||||
|
authEvents, err := getAuthChain(ctx, r.DB.EventsFromIDs, authEventIDs)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("getAuthChain: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
stateEvents, err = state.ResolveConflictsAdhoc(info.RoomVersion, stateEvents, authEvents)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("state.ResolveConflictsAdhoc: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for _, event := range stateEvents {
|
for _, event := range stateEvents {
|
||||||
response.StateEvents = append(response.StateEvents, event.Headered(info.RoomVersion))
|
response.StateEvents = append(response.StateEvents, event.Headered(info.RoomVersion))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue