Also limit presence by last_active_ts

This commit is contained in:
Till Faelligen 2022-04-28 11:23:13 +02:00
parent 5793df8825
commit 8be4762ff3
2 changed files with 10 additions and 6 deletions

View file

@ -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
}

View file

@ -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
}