fixed review changes

This commit is contained in:
Prateek Sachan 2020-02-06 05:27:35 +05:30
parent 32827f01c6
commit 4a4dac9fae
3 changed files with 13 additions and 31 deletions

View file

@ -80,12 +80,12 @@ const selectEventsSQL = "" +
const selectRecentEventsSQL = "" + const selectRecentEventsSQL = "" +
"SELECT id, event_json, session_id, exclude_from_sync, transaction_id FROM syncapi_output_room_events" + "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" " ORDER BY id DESC LIMIT $4"
const selectRecentEventsForSyncSQL = "" + const selectRecentEventsForSyncSQL = "" +
"SELECT id, event_json, session_id, exclude_from_sync, transaction_id FROM syncapi_output_room_events" + "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" " ORDER BY id DESC LIMIT $4"
const selectEarlyEventsSQL = "" + const selectEarlyEventsSQL = "" +
@ -290,7 +290,7 @@ func (s *outputRoomEventsStatements) insertEvent(
func (s *outputRoomEventsStatements) selectRecentEvents( func (s *outputRoomEventsStatements) selectRecentEvents(
ctx context.Context, txn *sql.Tx, ctx context.Context, txn *sql.Tx,
roomID string, fromPos, toPos types.StreamPosition, limit int, roomID string, fromPos, toPos types.StreamPosition, limit int,
chronologicalOrder bool, onlySyncEvents bool, chronologicalOrder bool, onlySyncEvents bool, ignoredUsers []string,
) ([]types.StreamEvent, error) { ) ([]types.StreamEvent, error) {
var stmt *sql.Stmt var stmt *sql.Stmt
if onlySyncEvents { if onlySyncEvents {
@ -299,7 +299,7 @@ func (s *outputRoomEventsStatements) selectRecentEvents(
stmt = common.TxStmt(txn, s.selectRecentEventsStmt) 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 { if err != nil {
return nil, err return nil, err
} }

View file

@ -292,7 +292,7 @@ func (d *SyncServerDatasource) GetEventsInRange(
if backwardOrdering { if backwardOrdering {
// When using backward ordering, we want the most recent events first. // When using backward ordering, we want the most recent events first.
if events, err = d.events.selectRecentEvents( 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 { ); err != nil {
return return
} }
@ -612,12 +612,11 @@ func (d *SyncServerDatasource) getResponseWithPDUsForCompleteSync(
var recentStreamEvents []types.StreamEvent var recentStreamEvents []types.StreamEvent
recentStreamEvents, err = d.events.selectRecentEvents( recentStreamEvents, err = d.events.selectRecentEvents(
ctx, txn, roomID, types.StreamPosition(0), toPos.PDUPosition, ctx, txn, roomID, types.StreamPosition(0), toPos.PDUPosition,
numRecentEventsPerRoom, true, true, numRecentEventsPerRoom, true, true, ignoredUsers,
) )
if err != nil { if err != nil {
return return
} }
recentStreamEvents = removeIgnoredUserEvents(recentStreamEvents, ignoredUsers)
// 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.
@ -651,26 +650,6 @@ func (d *SyncServerDatasource) getResponseWithPDUsForCompleteSync(
return res, toPos, joinedRoomIDs, err 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. // CompleteSync returns a complete /sync API response for the given user.
func (d *SyncServerDatasource) CompleteSync( func (d *SyncServerDatasource) CompleteSync(
ctx context.Context, userID string, numRecentEventsPerRoom int, ignoredUsers []string, ctx context.Context, userID string, numRecentEventsPerRoom int, ignoredUsers []string,
@ -830,12 +809,11 @@ func (d *SyncServerDatasource) addRoomDeltaToResponse(
} }
recentStreamEvents, err := d.events.selectRecentEvents( recentStreamEvents, err := d.events.selectRecentEvents(
ctx, txn, delta.roomID, types.StreamPosition(fromPos), types.StreamPosition(endPos), ctx, txn, delta.roomID, types.StreamPosition(fromPos), types.StreamPosition(endPos),
numRecentEventsPerRoom, true, true, numRecentEventsPerRoom, true, true, ignoredUsers,
) )
if err != nil { if err != nil {
return err return err
} }
recentStreamEvents = removeIgnoredUserEvents(recentStreamEvents, ignoredUsers)
recentEvents := d.StreamEventsToEvents(device, recentStreamEvents) recentEvents := d.StreamEventsToEvents(device, recentStreamEvents)
delta.stateEvents = removeDuplicates(delta.stateEvents, recentEvents) // roll back delta.stateEvents = removeDuplicates(delta.stateEvents, recentEvents) // roll back
backwardTopologyPos := d.getBackwardTopologyPos(ctx, recentStreamEvents) backwardTopologyPos := d.getBackwardTopologyPos(ctx, recentStreamEvents)

View file

@ -138,9 +138,13 @@ func (rp *RequestPool) currentSyncForUser(req syncRequest, latestPos types.Pagin
return return
} }
var ignoredUserList []string 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{} 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)) ignoredUserList = make([]string, 0, len(ignoredUserMap))
for ignoredUser := range ignoredUserMap["ignored_users"] { for ignoredUser := range ignoredUserMap["ignored_users"] {
ignoredUserList = append(ignoredUserList, ignoredUser) ignoredUserList = append(ignoredUserList, ignoredUser)