mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-01 11:13:12 -06:00
Merge branch 'matrix-org:main' into main
This commit is contained in:
commit
86e1afe65c
|
|
@ -129,6 +129,13 @@ func getState(
|
|||
return nil, nil, &resErr
|
||||
}
|
||||
|
||||
if response.IsRejected {
|
||||
return nil, nil, &util.JSONResponse{
|
||||
Code: http.StatusNotFound,
|
||||
JSON: jsonerror.NotFound("Event not found"),
|
||||
}
|
||||
}
|
||||
|
||||
if !response.RoomExists {
|
||||
return nil, nil, &util.JSONResponse{Code: http.StatusNotFound, JSON: nil}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -230,6 +230,8 @@ type QueryStateAndAuthChainResponse struct {
|
|||
// The lists will be in an arbitrary order.
|
||||
StateEvents []*gomatrixserverlib.HeaderedEvent `json:"state_events"`
|
||||
AuthChainEvents []*gomatrixserverlib.HeaderedEvent `json:"auth_chain_events"`
|
||||
// True if the queried event was rejected earlier.
|
||||
IsRejected bool `json:"is_rejected"`
|
||||
}
|
||||
|
||||
// QueryRoomVersionCapabilitiesRequest asks for the default room version
|
||||
|
|
|
|||
|
|
@ -441,11 +441,11 @@ func (r *Queryer) QueryStateAndAuthChain(
|
|||
}
|
||||
|
||||
var stateEvents []*gomatrixserverlib.Event
|
||||
stateEvents, err = r.loadStateAtEventIDs(ctx, info, request.PrevEventIDs)
|
||||
stateEvents, rejected, err := r.loadStateAtEventIDs(ctx, info, request.PrevEventIDs)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
response.IsRejected = rejected
|
||||
response.PrevEventsExist = true
|
||||
|
||||
// add the auth event IDs for the current state events too
|
||||
|
|
@ -480,15 +480,23 @@ func (r *Queryer) QueryStateAndAuthChain(
|
|||
return err
|
||||
}
|
||||
|
||||
func (r *Queryer) loadStateAtEventIDs(ctx context.Context, roomInfo *types.RoomInfo, eventIDs []string) ([]*gomatrixserverlib.Event, error) {
|
||||
func (r *Queryer) loadStateAtEventIDs(ctx context.Context, roomInfo *types.RoomInfo, eventIDs []string) ([]*gomatrixserverlib.Event, bool, error) {
|
||||
roomState := state.NewStateResolution(r.DB, roomInfo)
|
||||
prevStates, err := r.DB.StateAtEventIDs(ctx, eventIDs)
|
||||
if err != nil {
|
||||
switch err.(type) {
|
||||
case types.MissingEventError:
|
||||
return nil, nil
|
||||
return nil, false, nil
|
||||
default:
|
||||
return nil, err
|
||||
return nil, false, err
|
||||
}
|
||||
}
|
||||
// Currently only used on /state and /state_ids
|
||||
rejected := false
|
||||
for i := range prevStates {
|
||||
if prevStates[i].IsRejected {
|
||||
rejected = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -497,10 +505,12 @@ func (r *Queryer) loadStateAtEventIDs(ctx context.Context, roomInfo *types.RoomI
|
|||
ctx, prevStates,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, rejected, err
|
||||
}
|
||||
|
||||
return helpers.LoadStateEvents(ctx, r.DB, stateEntries)
|
||||
events, err := helpers.LoadStateEvents(ctx, r.DB, stateEntries)
|
||||
|
||||
return events, rejected, err
|
||||
}
|
||||
|
||||
type eventsFromIDs func(context.Context, []string) ([]types.Event, error)
|
||||
|
|
|
|||
|
|
@ -30,37 +30,7 @@ func (p *AccountDataStreamProvider) CompleteSync(
|
|||
ctx context.Context,
|
||||
req *types.SyncRequest,
|
||||
) types.StreamPosition {
|
||||
dataReq := &userapi.QueryAccountDataRequest{
|
||||
UserID: req.Device.UserID,
|
||||
}
|
||||
dataRes := &userapi.QueryAccountDataResponse{}
|
||||
if err := p.userAPI.QueryAccountData(ctx, dataReq, dataRes); err != nil {
|
||||
req.Log.WithError(err).Error("p.userAPI.QueryAccountData failed")
|
||||
return p.LatestPosition(ctx)
|
||||
}
|
||||
for datatype, databody := range dataRes.GlobalAccountData {
|
||||
req.Response.AccountData.Events = append(
|
||||
req.Response.AccountData.Events,
|
||||
gomatrixserverlib.ClientEvent{
|
||||
Type: datatype,
|
||||
Content: gomatrixserverlib.RawJSON(databody),
|
||||
},
|
||||
)
|
||||
}
|
||||
for r, j := range req.Response.Rooms.Join {
|
||||
for datatype, databody := range dataRes.RoomAccountData[r] {
|
||||
j.AccountData.Events = append(
|
||||
j.AccountData.Events,
|
||||
gomatrixserverlib.ClientEvent{
|
||||
Type: datatype,
|
||||
Content: gomatrixserverlib.RawJSON(databody),
|
||||
},
|
||||
)
|
||||
req.Response.Rooms.Join[r] = j
|
||||
}
|
||||
}
|
||||
|
||||
return p.LatestPosition(ctx)
|
||||
return p.IncrementalSync(ctx, req, 0, p.LatestPosition(ctx))
|
||||
}
|
||||
|
||||
func (p *AccountDataStreamProvider) IncrementalSync(
|
||||
|
|
@ -72,10 +42,9 @@ func (p *AccountDataStreamProvider) IncrementalSync(
|
|||
From: from,
|
||||
To: to,
|
||||
}
|
||||
accountDataFilter := gomatrixserverlib.DefaultEventFilter() // TODO: use filter provided in req instead
|
||||
|
||||
dataTypes, err := p.DB.GetAccountDataInRange(
|
||||
ctx, req.Device.UserID, r, &accountDataFilter,
|
||||
ctx, req.Device.UserID, r, &req.Filter.AccountData,
|
||||
)
|
||||
if err != nil {
|
||||
req.Log.WithError(err).Error("p.DB.GetAccountDataInRange failed")
|
||||
|
|
|
|||
|
|
@ -1,7 +1,3 @@
|
|||
# Blacklisted until matrix-org/dendrite#862 is reverted due to Riot bug
|
||||
|
||||
Latest account data appears in v2 /sync
|
||||
|
||||
# Relies on a rejected PL event which will never be accepted into the DAG
|
||||
|
||||
# Caused by <https://github.com/matrix-org/sytest/pull/911>
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ Can add account data
|
|||
Can add account data to room
|
||||
Can get account data without syncing
|
||||
Can get room account data without syncing
|
||||
#Latest account data appears in v2 /sync
|
||||
Latest account data appears in v2 /sync
|
||||
New account data appears in incremental v2 /sync
|
||||
Checking local federation server
|
||||
Inbound federation can query profile data
|
||||
|
|
@ -709,4 +709,8 @@ Gapped incremental syncs include all state changes
|
|||
Old leaves are present in gapped incremental syncs
|
||||
Leaves are present in non-gapped incremental syncs
|
||||
Members from the gap are included in gappy incr LL sync
|
||||
Presence can be set from sync
|
||||
Presence can be set from sync
|
||||
/state returns M_NOT_FOUND for a rejected message event
|
||||
/state_ids returns M_NOT_FOUND for a rejected message event
|
||||
/state returns M_NOT_FOUND for a rejected state event
|
||||
/state_ids returns M_NOT_FOUND for a rejected state event
|
||||
|
|
@ -90,6 +90,13 @@ func (a *UserInternalAPI) PerformAccountCreation(ctx context.Context, req *api.P
|
|||
return nil
|
||||
}
|
||||
|
||||
// Inform the SyncAPI about the newly created push_rules
|
||||
if err = a.SyncProducer.SendAccountData(acc.UserID, "", "m.push_rules"); err != nil {
|
||||
util.GetLogger(ctx).WithFields(logrus.Fields{
|
||||
"user_id": acc.UserID,
|
||||
}).WithError(err).Warn("failed to send account data to the SyncAPI")
|
||||
}
|
||||
|
||||
if req.AccountType == api.AccountTypeGuest {
|
||||
res.AccountCreated = true
|
||||
res.Account = acc
|
||||
|
|
|
|||
Loading…
Reference in a new issue