Use provided filter for account_data (#2372)

* Reuse IncrementalSync, use provided filter

* Inform SyncAPI about newly created push_rules
This commit is contained in:
Till 2022-04-25 19:04:46 +02:00 committed by GitHub
parent aad81b7b4d
commit e95fc5c5e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 10 additions and 38 deletions

View File

@ -30,37 +30,7 @@ func (p *AccountDataStreamProvider) CompleteSync(
ctx context.Context, ctx context.Context,
req *types.SyncRequest, req *types.SyncRequest,
) types.StreamPosition { ) types.StreamPosition {
dataReq := &userapi.QueryAccountDataRequest{ return p.IncrementalSync(ctx, req, 0, p.LatestPosition(ctx))
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)
} }
func (p *AccountDataStreamProvider) IncrementalSync( func (p *AccountDataStreamProvider) IncrementalSync(
@ -72,10 +42,9 @@ func (p *AccountDataStreamProvider) IncrementalSync(
From: from, From: from,
To: to, To: to,
} }
accountDataFilter := gomatrixserverlib.DefaultEventFilter() // TODO: use filter provided in req instead
dataTypes, err := p.DB.GetAccountDataInRange( dataTypes, err := p.DB.GetAccountDataInRange(
ctx, req.Device.UserID, r, &accountDataFilter, ctx, req.Device.UserID, r, &req.Filter.AccountData,
) )
if err != nil { if err != nil {
req.Log.WithError(err).Error("p.DB.GetAccountDataInRange failed") req.Log.WithError(err).Error("p.DB.GetAccountDataInRange failed")

View File

@ -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 # Relies on a rejected PL event which will never be accepted into the DAG
# Caused by <https://github.com/matrix-org/sytest/pull/911> # Caused by <https://github.com/matrix-org/sytest/pull/911>

View File

@ -154,7 +154,7 @@ Can add account data
Can add account data to room Can add account data to room
Can get account data without syncing Can get account data without syncing
Can get room 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 New account data appears in incremental v2 /sync
Checking local federation server Checking local federation server
Inbound federation can query profile data Inbound federation can query profile data

View File

@ -90,6 +90,13 @@ func (a *UserInternalAPI) PerformAccountCreation(ctx context.Context, req *api.P
return nil 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 { if req.AccountType == api.AccountTypeGuest {
res.AccountCreated = true res.AccountCreated = true
res.Account = acc res.Account = acc