mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-18 04:13:10 -06:00
refactor: split out grabbing state to reduce cyclo complexity
This commit is contained in:
parent
137b58a8a9
commit
5f7ff41ed9
|
|
@ -637,12 +637,6 @@ func (r *RoomserverQueryAPI) QueryStateAndAuthChain(
|
||||||
request *api.QueryStateAndAuthChainRequest,
|
request *api.QueryStateAndAuthChainRequest,
|
||||||
response *api.QueryStateAndAuthChainResponse,
|
response *api.QueryStateAndAuthChainResponse,
|
||||||
) error {
|
) error {
|
||||||
// TODO: get the correct room version
|
|
||||||
roomState, err := state.GetStateResolutionAlgorithm(state.StateResolutionAlgorithmV1, r.DB)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
response.QueryStateAndAuthChainRequest = *request
|
response.QueryStateAndAuthChainRequest = *request
|
||||||
roomNID, err := r.DB.RoomNID(ctx, request.RoomID)
|
roomNID, err := r.DB.RoomNID(ctx, request.RoomID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -653,30 +647,12 @@ func (r *RoomserverQueryAPI) QueryStateAndAuthChain(
|
||||||
}
|
}
|
||||||
response.RoomExists = true
|
response.RoomExists = true
|
||||||
|
|
||||||
prevStates, err := r.DB.StateAtEventIDs(ctx, request.PrevEventIDs)
|
stateEvents, err := r.loadStateAtEventIDs(ctx, request.PrevEventIDs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
switch err.(type) {
|
|
||||||
case types.MissingEventError:
|
|
||||||
return nil
|
|
||||||
default:
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
|
||||||
response.PrevEventsExist = true
|
response.PrevEventsExist = true
|
||||||
|
|
||||||
// Look up the currrent state for the requested tuples.
|
|
||||||
stateEntries, err := roomState.LoadCombinedStateAfterEvents(
|
|
||||||
ctx, prevStates,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
stateEvents, err := r.loadStateEvents(ctx, stateEntries)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// add the auth event IDs for the current state events too
|
// add the auth event IDs for the current state events too
|
||||||
var authEventIDs []string
|
var authEventIDs []string
|
||||||
authEventIDs = append(authEventIDs, request.AuthEventIDs...)
|
authEventIDs = append(authEventIDs, request.AuthEventIDs...)
|
||||||
|
|
@ -707,6 +683,34 @@ func (r *RoomserverQueryAPI) QueryStateAndAuthChain(
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *RoomserverQueryAPI) loadStateAtEventIDs(ctx context.Context, eventIDs []string) ([]gomatrixserverlib.Event, error) {
|
||||||
|
// TODO: get the correct room version
|
||||||
|
roomState, err := state.GetStateResolutionAlgorithm(state.StateResolutionAlgorithmV1, r.DB)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
prevStates, err := r.DB.StateAtEventIDs(ctx, eventIDs)
|
||||||
|
if err != nil {
|
||||||
|
switch err.(type) {
|
||||||
|
case types.MissingEventError:
|
||||||
|
return nil, nil
|
||||||
|
default:
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Look up the currrent state for the requested tuples.
|
||||||
|
stateEntries, err := roomState.LoadCombinedStateAfterEvents(
|
||||||
|
ctx, prevStates,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.loadStateEvents(ctx, stateEntries)
|
||||||
|
}
|
||||||
|
|
||||||
// getAuthChain fetches the auth chain for the given auth events. An auth chain
|
// getAuthChain fetches the auth chain for the given auth events. An auth chain
|
||||||
// is the list of all events that are referenced in the auth_events section, and
|
// is the list of all events that are referenced in the auth_events section, and
|
||||||
// all their auth_events, recursively. The returned set of events contain the
|
// all their auth_events, recursively. The returned set of events contain the
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue