mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-10 15:43:09 -06:00
Tweaks
This commit is contained in:
parent
bb3566a649
commit
1bc7faf63c
|
|
@ -336,7 +336,15 @@ func (r *messagesReq) retrieveEvents(ctx context.Context, rsAPI api.SyncRoomserv
|
||||||
// removed all of them. This means there are no events for this user
|
// removed all of them. This means there are no events for this user
|
||||||
// anymore. Let them know.
|
// anymore. Let them know.
|
||||||
if errors.Is(err, shared.ErrNoEventsForFilter) {
|
if errors.Is(err, shared.ErrNoEventsForFilter) {
|
||||||
return []synctypes.ClientEvent{}, *r.from, emptyToken, nil
|
if len(streamEvents) == 0 {
|
||||||
|
return []synctypes.ClientEvent{}, *r.from, emptyToken, nil
|
||||||
|
}
|
||||||
|
// We possibly received events, try to get start/end from them
|
||||||
|
start, end, err = r.getStartEnd(r.snapshot.StreamEventsToEvents(ctx, r.device, streamEvents, rsAPI))
|
||||||
|
if err != nil {
|
||||||
|
return []synctypes.ClientEvent{}, *r.from, *r.to, err
|
||||||
|
}
|
||||||
|
return []synctypes.ClientEvent{}, start, end, nil
|
||||||
}
|
}
|
||||||
err = fmt.Errorf("GetEventsInRange: %w", err)
|
err = fmt.Errorf("GetEventsInRange: %w", err)
|
||||||
return []synctypes.ClientEvent{}, *r.from, emptyToken, err
|
return []synctypes.ClientEvent{}, *r.from, emptyToken, err
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,10 @@ type DatabaseTransaction interface {
|
||||||
// If no data is retrieved, returns an empty map
|
// If no data is retrieved, returns an empty map
|
||||||
// If there was an issue with the retrieval, returns an error
|
// If there was an issue with the retrieval, returns an error
|
||||||
GetAccountDataInRange(ctx context.Context, userID string, r types.Range, accountDataFilterPart *synctypes.EventFilter) (map[string][]string, types.StreamPosition, error)
|
GetAccountDataInRange(ctx context.Context, userID string, r types.Range, accountDataFilterPart *synctypes.EventFilter) (map[string][]string, types.StreamPosition, error)
|
||||||
// GetEventsInTopologicalRange retrieves all of the events on a given ordering using the given extremities and limit. If backwardsOrdering is true, the most recent event must be first, else last.
|
// GetEventsInTopologicalRange retrieves all of the events on a given ordering using the given extremities and limit.
|
||||||
|
// If backwardsOrdering is true, the most recent event must be first, else last.
|
||||||
|
// Returns the filtered StreamEvents on success. Returns **unfiltered** StreamEvents and ErrNoEventsForFilter if
|
||||||
|
// the provided filter removed all events, this can be used to still calculate the start/end position. (e.g for `/messages`)
|
||||||
GetEventsInTopologicalRange(ctx context.Context, from, to *types.TopologyToken, roomID string, filter *synctypes.RoomEventFilter, backwardOrdering bool) (events []types.StreamEvent, err error)
|
GetEventsInTopologicalRange(ctx context.Context, from, to *types.TopologyToken, roomID string, filter *synctypes.RoomEventFilter, backwardOrdering bool) (events []types.StreamEvent, err error)
|
||||||
// EventPositionInTopology returns the depth and stream position of the given event.
|
// EventPositionInTopology returns the depth and stream position of the given event.
|
||||||
EventPositionInTopology(ctx context.Context, eventID string) (types.TopologyToken, error)
|
EventPositionInTopology(ctx context.Context, eventID string) (types.TopologyToken, error)
|
||||||
|
|
|
||||||
|
|
@ -273,7 +273,13 @@ func (d *DatabaseTransaction) GetEventsInTopologicalRange(
|
||||||
// Check if we should be able to return events.
|
// Check if we should be able to return events.
|
||||||
// If we received 0 events, this most likely means that the provided filter removed them.
|
// If we received 0 events, this most likely means that the provided filter removed them.
|
||||||
if len(eIDs) > 0 && len(events) == 0 {
|
if len(eIDs) > 0 && len(events) == 0 {
|
||||||
return nil, ErrNoEventsForFilter
|
// We try to fetch the events without a filter, so we can tell the client if there
|
||||||
|
// are more events earlier than the requested and filtered.
|
||||||
|
events, err = d.OutputEvents.SelectEvents(ctx, d.txn, eIDs, nil, true)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return events, ErrNoEventsForFilter
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -250,7 +250,8 @@ func TestGetEventsInRangeWithTopologyTokenNoEventsForFilter(t *testing.T) {
|
||||||
filter := &synctypes.RoomEventFilter{Limit: 20, NotTypes: ¬Types, Senders: &senders}
|
filter := &synctypes.RoomEventFilter{Limit: 20, NotTypes: ¬Types, Senders: &senders}
|
||||||
paginatedEvents, err := snapshot.GetEventsInTopologicalRange(ctx, &from, &to, r.ID, filter, true)
|
paginatedEvents, err := snapshot.GetEventsInTopologicalRange(ctx, &from, &to, r.ID, filter, true)
|
||||||
assert.Equal(t, shared.ErrNoEventsForFilter, err)
|
assert.Equal(t, shared.ErrNoEventsForFilter, err)
|
||||||
assert.Nil(t, paginatedEvents)
|
gots := snapshot.StreamEventsToEvents(context.Background(), nil, paginatedEvents, nil)
|
||||||
|
test.AssertEventsEqual(t, gots, test.Reversed(events[len(events)-15:]))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue