mirror of
https://github.com/hoernschen/dendrite.git
synced 2025-07-31 05:12:46 +00:00
Fetch missing auth events, implement QueryMissingAuthPrevEvents, try other servers in room for /event and /get_missing_events (#1450)
* Try to ask other servers in the room for missing events if the origin won't provide them * Logging * More logging * Implement QueryMissingAuthPrevEvents * Try to get missing auth events badly * Use processEvent * Logging * Update QueryMissingAuthPrevEvents * Try to find missing auth events * Patchy fix for test * Logging tweaks * Send auth events as outliers * Update check in QueryMissingAuthPrevEvents * Error responses * More return codes * Don't return error on reject/soft-fail since it was ultimately handled * More tweaks * More error tweaks
This commit is contained in:
parent
4ff7ac7b65
commit
738b829a23
12 changed files with 291 additions and 81 deletions
|
@ -68,6 +68,13 @@ type RoomserverInternalAPI interface {
|
|||
response *QueryStateAfterEventsResponse,
|
||||
) error
|
||||
|
||||
// Query whether the roomserver is missing any auth or prev events.
|
||||
QueryMissingAuthPrevEvents(
|
||||
ctx context.Context,
|
||||
request *QueryMissingAuthPrevEventsRequest,
|
||||
response *QueryMissingAuthPrevEventsResponse,
|
||||
) error
|
||||
|
||||
// Query a list of events by event ID.
|
||||
QueryEventsByID(
|
||||
ctx context.Context,
|
||||
|
|
|
@ -104,6 +104,16 @@ func (t *RoomserverInternalAPITrace) QueryStateAfterEvents(
|
|||
return err
|
||||
}
|
||||
|
||||
func (t *RoomserverInternalAPITrace) QueryMissingAuthPrevEvents(
|
||||
ctx context.Context,
|
||||
req *QueryMissingAuthPrevEventsRequest,
|
||||
res *QueryMissingAuthPrevEventsResponse,
|
||||
) error {
|
||||
err := t.Impl.QueryMissingAuthPrevEvents(ctx, req, res)
|
||||
util.GetLogger(ctx).WithError(err).Infof("QueryMissingAuthPrevEvents req=%+v res=%+v", js(req), js(res))
|
||||
return err
|
||||
}
|
||||
|
||||
func (t *RoomserverInternalAPITrace) QueryEventsByID(
|
||||
ctx context.Context,
|
||||
req *QueryEventsByIDRequest,
|
||||
|
|
|
@ -82,6 +82,27 @@ type QueryStateAfterEventsResponse struct {
|
|||
StateEvents []gomatrixserverlib.HeaderedEvent `json:"state_events"`
|
||||
}
|
||||
|
||||
type QueryMissingAuthPrevEventsRequest struct {
|
||||
// The room ID to query the state in.
|
||||
RoomID string `json:"room_id"`
|
||||
// The list of auth events to check the existence of.
|
||||
AuthEventIDs []string `json:"auth_event_ids"`
|
||||
// The list of previous events to check the existence of.
|
||||
PrevEventIDs []string `json:"prev_event_ids"`
|
||||
}
|
||||
|
||||
type QueryMissingAuthPrevEventsResponse struct {
|
||||
// Does the room exist on this roomserver?
|
||||
// If the room doesn't exist all other fields will be empty.
|
||||
RoomExists bool `json:"room_exists"`
|
||||
// The room version of the room.
|
||||
RoomVersion gomatrixserverlib.RoomVersion `json:"room_version"`
|
||||
// The event IDs of the auth events that we don't know locally.
|
||||
MissingAuthEventIDs []string `json:"missing_auth_event_ids"`
|
||||
// The event IDs of the previous events that we don't know locally.
|
||||
MissingPrevEventIDs []string `json:"missing_prev_event_ids"`
|
||||
}
|
||||
|
||||
// QueryEventsByIDRequest is a request to QueryEventsByID
|
||||
type QueryEventsByIDRequest struct {
|
||||
// The event IDs to look up.
|
||||
|
@ -154,6 +175,8 @@ type QueryServerJoinedToRoomResponse struct {
|
|||
RoomExists bool `json:"room_exists"`
|
||||
// True if we still believe that we are participating in the room
|
||||
IsInRoom bool `json:"is_in_room"`
|
||||
// List of servers that are also in the room
|
||||
ServerNames []gomatrixserverlib.ServerName `json:"server_names"`
|
||||
}
|
||||
|
||||
// QueryServerAllowedToSeeEventRequest is a request to QueryServerAllowedToSeeEvent
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue