From 4a4dac9faea30fb98315dd15403c8470ff30291e Mon Sep 17 00:00:00 2001 From: Prateek Sachan Date: Thu, 6 Feb 2020 05:27:35 +0530 Subject: [PATCH] fixed review changes --- .../postgres/output_room_events_table.go | 8 +++--- syncapi/storage/postgres/syncserver.go | 28 ++----------------- syncapi/sync/requestpool.go | 8 ++++-- 3 files changed, 13 insertions(+), 31 deletions(-) diff --git a/syncapi/storage/postgres/output_room_events_table.go b/syncapi/storage/postgres/output_room_events_table.go index 2db46c5db..96691bee4 100644 --- a/syncapi/storage/postgres/output_room_events_table.go +++ b/syncapi/storage/postgres/output_room_events_table.go @@ -80,12 +80,12 @@ const selectEventsSQL = "" + const selectRecentEventsSQL = "" + "SELECT id, event_json, session_id, exclude_from_sync, transaction_id FROM syncapi_output_room_events" + - " WHERE room_id = $1 AND id > $2 AND id <= $3" + + " WHERE room_id = $1 AND id > $2 AND id <= $3 AND sender != ALL($5)" + " ORDER BY id DESC LIMIT $4" const selectRecentEventsForSyncSQL = "" + "SELECT id, event_json, session_id, exclude_from_sync, transaction_id FROM syncapi_output_room_events" + - " WHERE room_id = $1 AND id > $2 AND id <= $3 AND exclude_from_sync = FALSE" + + " WHERE room_id = $1 AND id > $2 AND id <= $3 AND exclude_from_sync = FALSE AND sender != ALL($5)" + " ORDER BY id DESC LIMIT $4" const selectEarlyEventsSQL = "" + @@ -290,7 +290,7 @@ func (s *outputRoomEventsStatements) insertEvent( func (s *outputRoomEventsStatements) selectRecentEvents( ctx context.Context, txn *sql.Tx, roomID string, fromPos, toPos types.StreamPosition, limit int, - chronologicalOrder bool, onlySyncEvents bool, + chronologicalOrder bool, onlySyncEvents bool, ignoredUsers []string, ) ([]types.StreamEvent, error) { var stmt *sql.Stmt if onlySyncEvents { @@ -299,7 +299,7 @@ func (s *outputRoomEventsStatements) selectRecentEvents( stmt = common.TxStmt(txn, s.selectRecentEventsStmt) } - rows, err := stmt.QueryContext(ctx, roomID, fromPos, toPos, limit) + rows, err := stmt.QueryContext(ctx, roomID, fromPos, toPos, limit, pq.StringArray(ignoredUsers)) if err != nil { return nil, err } diff --git a/syncapi/storage/postgres/syncserver.go b/syncapi/storage/postgres/syncserver.go index 5c34db967..c596af326 100644 --- a/syncapi/storage/postgres/syncserver.go +++ b/syncapi/storage/postgres/syncserver.go @@ -292,7 +292,7 @@ func (d *SyncServerDatasource) GetEventsInRange( if backwardOrdering { // When using backward ordering, we want the most recent events first. if events, err = d.events.selectRecentEvents( - ctx, nil, roomID, to.PDUPosition, from.PDUPosition, limit, false, false, + ctx, nil, roomID, to.PDUPosition, from.PDUPosition, limit, false, false, nil, ); err != nil { return } @@ -612,12 +612,11 @@ func (d *SyncServerDatasource) getResponseWithPDUsForCompleteSync( var recentStreamEvents []types.StreamEvent recentStreamEvents, err = d.events.selectRecentEvents( ctx, txn, roomID, types.StreamPosition(0), toPos.PDUPosition, - numRecentEventsPerRoom, true, true, + numRecentEventsPerRoom, true, true, ignoredUsers, ) if err != nil { return } - recentStreamEvents = removeIgnoredUserEvents(recentStreamEvents, ignoredUsers) // Retrieve the backward topology position, i.e. the position of the // oldest event in the room's topology. @@ -651,26 +650,6 @@ func (d *SyncServerDatasource) getResponseWithPDUsForCompleteSync( return res, toPos, joinedRoomIDs, err } -func removeIgnoredUserEvents(events []types.StreamEvent, ignoredUsers []string) []types.StreamEvent { - if len(ignoredUsers) == 0 { - return events - } - eventsWithoutIgnoredUsers := make([]types.StreamEvent, 0, len(events)) - for _, event := range events { - isSenderIgnored := false - for _, ignoredUser := range ignoredUsers { - if ignoredUser == event.Sender() { - isSenderIgnored = true - break - } - } - if !isSenderIgnored { - eventsWithoutIgnoredUsers = append(eventsWithoutIgnoredUsers, event) - } - } - return eventsWithoutIgnoredUsers -} - // CompleteSync returns a complete /sync API response for the given user. func (d *SyncServerDatasource) CompleteSync( ctx context.Context, userID string, numRecentEventsPerRoom int, ignoredUsers []string, @@ -830,12 +809,11 @@ func (d *SyncServerDatasource) addRoomDeltaToResponse( } recentStreamEvents, err := d.events.selectRecentEvents( ctx, txn, delta.roomID, types.StreamPosition(fromPos), types.StreamPosition(endPos), - numRecentEventsPerRoom, true, true, + numRecentEventsPerRoom, true, true, ignoredUsers, ) if err != nil { return err } - recentStreamEvents = removeIgnoredUserEvents(recentStreamEvents, ignoredUsers) recentEvents := d.StreamEventsToEvents(device, recentStreamEvents) delta.stateEvents = removeDuplicates(delta.stateEvents, recentEvents) // roll back backwardTopologyPos := d.getBackwardTopologyPos(ctx, recentStreamEvents) diff --git a/syncapi/sync/requestpool.go b/syncapi/sync/requestpool.go index b5d537d97..94a8b009a 100644 --- a/syncapi/sync/requestpool.go +++ b/syncapi/sync/requestpool.go @@ -138,9 +138,13 @@ func (rp *RequestPool) currentSyncForUser(req syncRequest, latestPos types.Pagin return } var ignoredUserList []string - if data, e := rp.accountDB.GetAccountDataByType(req.ctx, localpart, "", "m.ignored_user_list"); e == nil && data != nil { + data, err := rp.accountDB.GetAccountDataByType(req.ctx, localpart, "", "m.ignored_user_list") + if err != nil { + return + } + if data != nil { var ignoredUserMap map[string]map[string]interface{} - if e = json.Unmarshal(data.Content, &ignoredUserMap); e == nil { + if err = json.Unmarshal(data.Content, &ignoredUserMap); err == nil { ignoredUserList = make([]string, 0, len(ignoredUserMap)) for ignoredUser := range ignoredUserMap["ignored_users"] { ignoredUserList = append(ignoredUserList, ignoredUser)