From 8be4762ff3adf2566ca567173a60b7c36728cf9d Mon Sep 17 00:00:00 2001 From: Till Faelligen Date: Thu, 28 Apr 2022 11:23:13 +0200 Subject: [PATCH] Also limit presence by last_active_ts --- syncapi/storage/postgres/presence_table.go | 8 +++++--- syncapi/storage/sqlite3/presence_table.go | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/syncapi/storage/postgres/presence_table.go b/syncapi/storage/postgres/presence_table.go index 112270628..eb932741c 100644 --- a/syncapi/storage/postgres/presence_table.go +++ b/syncapi/storage/postgres/presence_table.go @@ -17,6 +17,7 @@ package postgres import ( "context" "database/sql" + "time" "github.com/matrix-org/dendrite/internal" "github.com/matrix-org/dendrite/internal/sqlutil" @@ -72,7 +73,8 @@ const selectMaxPresenceSQL = "" + const selectPresenceAfter = "" + " SELECT id, user_id, presence, status_msg, last_active_ts" + " FROM syncapi_presence" + - " WHERE id > $1 ORDER BY id DESC, last_active_ts DESC LIMIT $2" + " WHERE id > $1 AND last_active_ts > $2" + + " ORDER BY id DESC, last_active_ts DESC LIMIT $3" type presenceStatements struct { upsertPresenceStmt *sql.Stmt @@ -148,8 +150,8 @@ func (p *presenceStatements) GetPresenceAfter( ) (presences map[string]*types.PresenceInternal, err error) { presences = make(map[string]*types.PresenceInternal) stmt := sqlutil.TxStmt(txn, p.selectPresenceAfterStmt) - - rows, err := stmt.QueryContext(ctx, after, filter.Limit) + afterTS := gomatrixserverlib.AsTimestamp(time.Now().Add(-time.Minute * 5)) + rows, err := stmt.QueryContext(ctx, after, afterTS, filter.Limit) if err != nil { return nil, err } diff --git a/syncapi/storage/sqlite3/presence_table.go b/syncapi/storage/sqlite3/presence_table.go index 63d2820ac..ea1151fec 100644 --- a/syncapi/storage/sqlite3/presence_table.go +++ b/syncapi/storage/sqlite3/presence_table.go @@ -17,6 +17,7 @@ package sqlite3 import ( "context" "database/sql" + "time" "github.com/matrix-org/dendrite/internal" "github.com/matrix-org/dendrite/internal/sqlutil" @@ -71,7 +72,8 @@ const selectMaxPresenceSQL = "" + const selectPresenceAfter = "" + " SELECT id, user_id, presence, status_msg, last_active_ts" + " FROM syncapi_presence" + - " WHERE id > $1 ORDER BY id DESC, last_active_ts DESC LIMIT $2" + " WHERE id > $1 AND last_active_ts > $2" + + " ORDER BY id DESC, last_active_ts DESC LIMIT $3" type presenceStatements struct { db *sql.DB @@ -162,8 +164,8 @@ func (p *presenceStatements) GetPresenceAfter( ) (presences map[string]*types.PresenceInternal, err error) { presences = make(map[string]*types.PresenceInternal) stmt := sqlutil.TxStmt(txn, p.selectPresenceAfterStmt) - - rows, err := stmt.QueryContext(ctx, after, filter.Limit) + afterTS := gomatrixserverlib.AsTimestamp(time.Now().Add(-time.Minute * 5)) + rows, err := stmt.QueryContext(ctx, after, afterTS, filter.Limit) if err != nil { return nil, err }