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:
Eric Eastwood 2021-01-14 01:59:18 -06:00
parent 1be95012d4
commit 76e1faeaf8
3 changed files with 61 additions and 8 deletions

View file

@ -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
} }

View file

@ -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

View file

@ -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