mirror of
https://github.com/hoernschen/dendrite.git
synced 2024-12-29 08:18:27 +00:00
Try get Sytest working again
Currently it's failing way earlier on "Newly left rooms appear in the leave section of incremental sync" and I've commented out all of my new functionality so need to figure out what is interfering in this branch now
This commit is contained in:
parent
1be95012d4
commit
76e1faeaf8
3 changed files with 61 additions and 8 deletions
|
@ -8,6 +8,7 @@ import (
|
||||||
"github.com/matrix-org/dendrite/syncapi/types"
|
"github.com/matrix-org/dendrite/syncapi/types"
|
||||||
userapi "github.com/matrix-org/dendrite/userapi/api"
|
userapi "github.com/matrix-org/dendrite/userapi/api"
|
||||||
"github.com/matrix-org/gomatrixserverlib"
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
type PDUStreamProvider struct {
|
type PDUStreamProvider struct {
|
||||||
|
@ -146,7 +147,7 @@ func (p *PDUStreamProvider) IncrementalSync(
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, delta := range stateDeltas {
|
for _, delta := range stateDeltas {
|
||||||
if err = p.addRoomDeltaToResponse(ctx, req.Device, r, delta, req.Limit, req.Response); err != nil {
|
if err = p.addRoomDeltaToResponse(ctx, req.Device, r, delta, req.Filter.Room.Timeline.Limit, req.Response); err != nil {
|
||||||
req.Log.WithError(err).Error("d.addRoomDeltaToResponse failed")
|
req.Log.WithError(err).Error("d.addRoomDeltaToResponse failed")
|
||||||
return newPos
|
return newPos
|
||||||
}
|
}
|
||||||
|
@ -179,6 +180,13 @@ func (p *PDUStreamProvider) addRoomDeltaToResponse(
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logrus.WithFields(logrus.Fields{
|
||||||
|
"limited": limited,
|
||||||
|
"delta.stateEvents": len(delta.StateEvents),
|
||||||
|
"recentStreamEvents": len(recentStreamEvents),
|
||||||
|
}).Info("isync addRoomDeltaToResponse removeDuplicates")
|
||||||
|
|
||||||
recentEvents := p.DB.StreamEventsToEvents(device, recentStreamEvents)
|
recentEvents := p.DB.StreamEventsToEvents(device, recentStreamEvents)
|
||||||
delta.StateEvents = removeDuplicates(delta.StateEvents, recentEvents) // roll back
|
delta.StateEvents = removeDuplicates(delta.StateEvents, recentEvents) // roll back
|
||||||
prevBatch, err := p.DB.GetBackwardTopologyPos(ctx, recentStreamEvents)
|
prevBatch, err := p.DB.GetBackwardTopologyPos(ctx, recentStreamEvents)
|
||||||
|
@ -250,7 +258,44 @@ func (p *PDUStreamProvider) getResponseForCompleteSync(
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
recentStreamEvents, limited = p.filterStreamEventsAccordingToHistoryVisibility(recentStreamEvents, stateEvents, device, limited)
|
events := make([]string, len(recentStreamEvents))
|
||||||
|
for i, v := range recentStreamEvents {
|
||||||
|
events[i] = string(v.HeaderedEvent.Event.JSON())
|
||||||
|
}
|
||||||
|
|
||||||
|
logrus.WithFields(logrus.Fields{
|
||||||
|
"filter.Room.Timeline.Limit": filter.Room.Timeline.Limit,
|
||||||
|
"recentStreamEvents": fmt.Sprintf("%+v", events),
|
||||||
|
}).Info("getResponseForCompleteSync")
|
||||||
|
|
||||||
|
//recentStreamEvents, limited = p.filterStreamEventsAccordingToHistoryVisibility(recentStreamEvents, stateEvents, device, limited)
|
||||||
|
|
||||||
|
// TODO FIXME: We don't fully implement history visibility yet. To avoid leaking events which the
|
||||||
|
// user shouldn't see, we check the recent events and remove any prior to the join event of the user
|
||||||
|
// which is equiv to history_visibility: joined
|
||||||
|
joinEventIndex := -1
|
||||||
|
for i := len(recentStreamEvents) - 1; i >= 0; i-- {
|
||||||
|
ev := recentStreamEvents[i]
|
||||||
|
if ev.Type() == gomatrixserverlib.MRoomMember && ev.StateKeyEquals(device.UserID) {
|
||||||
|
membership, _ := ev.Membership()
|
||||||
|
if membership == "join" {
|
||||||
|
joinEventIndex = i
|
||||||
|
if i > 0 {
|
||||||
|
// the create event happens before the first join, so we should cut it at that point instead
|
||||||
|
if recentStreamEvents[i-1].Type() == gomatrixserverlib.MRoomCreate && recentStreamEvents[i-1].StateKeyEquals("") {
|
||||||
|
joinEventIndex = i - 1
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if joinEventIndex != -1 {
|
||||||
|
// cut all events earlier than the join (but not the join itself)
|
||||||
|
recentStreamEvents = recentStreamEvents[joinEventIndex:]
|
||||||
|
limited = false // so clients know not to try to backpaginate
|
||||||
|
}
|
||||||
|
|
||||||
// Retrieve the backward topology position, i.e. the position of the
|
// Retrieve the backward topology position, i.e. the position of the
|
||||||
// oldest event in the room's topology.
|
// oldest event in the room's topology.
|
||||||
|
@ -382,6 +427,17 @@ func (p *PDUStreamProvider) filterStreamEventsAccordingToHistoryVisibility(
|
||||||
sliceEnd = leaveEventIndex
|
sliceEnd = leaveEventIndex
|
||||||
}
|
}
|
||||||
|
|
||||||
|
events := make([]string, len(recentStreamEvents))
|
||||||
|
for i, v := range recentStreamEvents {
|
||||||
|
events[i] = string(v.HeaderedEvent.Event.JSON())
|
||||||
|
}
|
||||||
|
|
||||||
|
logrus.WithFields(logrus.Fields{
|
||||||
|
"sliceStart": sliceStart,
|
||||||
|
"sliceEnd": sliceEnd,
|
||||||
|
"before recentStreamEvents": fmt.Sprintf("%+v", events),
|
||||||
|
}).Info("cutting down the events")
|
||||||
|
|
||||||
return recentStreamEvents[sliceStart:sliceEnd], limited
|
return recentStreamEvents[sliceStart:sliceEnd], limited
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const defaultSyncTimeout = time.Duration(0)
|
const defaultSyncTimeout = time.Duration(0)
|
||||||
const DefaultTimelineLimit = 20
|
const defaultTimelineLimit = 20
|
||||||
|
|
||||||
func newSyncRequest(req *http.Request, device userapi.Device, syncDB storage.Database) (*types.SyncRequest, error) {
|
func newSyncRequest(req *http.Request, device userapi.Device, syncDB storage.Database) (*types.SyncRequest, error) {
|
||||||
timeout := getTimeout(req.URL.Query().Get("timeout"))
|
timeout := getTimeout(req.URL.Query().Get("timeout"))
|
||||||
|
@ -76,16 +76,15 @@ func newSyncRequest(req *http.Request, device userapi.Device, syncDB storage.Dat
|
||||||
}
|
}
|
||||||
limit := filter.Room.Timeline.Limit
|
limit := filter.Room.Timeline.Limit
|
||||||
if limit == 0 {
|
if limit == 0 {
|
||||||
limit = DefaultTimelineLimit
|
filter.Room.Timeline.Limit = defaultTimelineLimit
|
||||||
}
|
}
|
||||||
// TODO: Additional query params: set_presence, filter
|
// TODO: Additional query params: set_presence
|
||||||
|
|
||||||
logger := util.GetLogger(req.Context()).WithFields(logrus.Fields{
|
logger := util.GetLogger(req.Context()).WithFields(logrus.Fields{
|
||||||
"user_id": device.UserID,
|
"user_id": device.UserID,
|
||||||
"device_id": device.ID,
|
"device_id": device.ID,
|
||||||
"since": since,
|
"since": since,
|
||||||
"timeout": timeout,
|
"timeout": timeout,
|
||||||
"limit": limit,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
return &types.SyncRequest{
|
return &types.SyncRequest{
|
||||||
|
@ -96,7 +95,6 @@ func newSyncRequest(req *http.Request, device userapi.Device, syncDB storage.Dat
|
||||||
Filter: filter, //
|
Filter: filter, //
|
||||||
Since: since, //
|
Since: since, //
|
||||||
Timeout: timeout, //
|
Timeout: timeout, //
|
||||||
Limit: limit, //
|
|
||||||
Rooms: make(map[string]string), // Populated by the PDU stream
|
Rooms: make(map[string]string), // Populated by the PDU stream
|
||||||
WantFullState: wantFullState, //
|
WantFullState: wantFullState, //
|
||||||
}, nil
|
}, nil
|
||||||
|
|
|
@ -16,7 +16,6 @@ type SyncRequest struct {
|
||||||
Response *Response
|
Response *Response
|
||||||
Filter gomatrixserverlib.Filter
|
Filter gomatrixserverlib.Filter
|
||||||
Since StreamingToken
|
Since StreamingToken
|
||||||
Limit int
|
|
||||||
Timeout time.Duration
|
Timeout time.Duration
|
||||||
WantFullState bool
|
WantFullState bool
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue