mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-17 02:53:11 -06:00
Make use of sqlutil.StatementList, dedupe NIDs, timeout test
This commit is contained in:
parent
455321dcbf
commit
2e5ef9c711
|
|
@ -334,7 +334,13 @@ func TestPurgeRoom(t *testing.T) {
|
|||
|
||||
// wait for all consumers to process the purge event
|
||||
var sum = 1
|
||||
timeout := time.Second * 5
|
||||
deadline, cancel := context.WithTimeout(context.Background(), timeout)
|
||||
defer cancel()
|
||||
for sum > 0 {
|
||||
if deadline.Err() != nil {
|
||||
t.Fatalf("test timed out after %s", timeout)
|
||||
}
|
||||
sum = 0
|
||||
consumerCh := jsCtx.Consumers(base.Cfg.Global.JetStream.Prefixed(jetstream.OutputRoomEvent))
|
||||
for x := range consumerCh {
|
||||
|
|
|
|||
|
|
@ -160,10 +160,15 @@ func (s *purgeStatements) PurgeStateBlocks(
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
params := make([]interface{}, len(stateBlockNIDs)+1)
|
||||
params := make([]interface{}, len(stateBlockNIDs))
|
||||
seenNIDs := make(map[types.StateBlockNID]struct{}, len(stateBlockNIDs))
|
||||
// dedupe NIDs
|
||||
for k, v := range stateBlockNIDs {
|
||||
if _, ok := seenNIDs[v]; ok {
|
||||
continue
|
||||
}
|
||||
params[k] = v
|
||||
seenNIDs[v] = struct{}{}
|
||||
}
|
||||
|
||||
query := "DELETE FROM roomserver_state_block WHERE state_block_nid IN($1)"
|
||||
|
|
|
|||
|
|
@ -63,19 +63,12 @@ func NewPostgresBackwardsExtremitiesTable(db *sql.DB) (tables.BackwardsExtremiti
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.insertBackwardExtremityStmt, err = db.Prepare(insertBackwardExtremitySQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectBackwardExtremitiesForRoomStmt, err = db.Prepare(selectBackwardExtremitiesForRoomSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.deleteBackwardExtremityStmt, err = db.Prepare(deleteBackwardExtremitySQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.purgeBackwardExtremitiesStmt, err = db.Prepare(purgeBackwardExtremitiesSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s, nil
|
||||
return s, sqlutil.StatementList{
|
||||
{&s.insertBackwardExtremityStmt, insertBackwardExtremitySQL},
|
||||
{&s.selectBackwardExtremitiesForRoomStmt, selectBackwardExtremitiesForRoomSQL},
|
||||
{&s.deleteBackwardExtremityStmt, deleteBackwardExtremitySQL},
|
||||
{&s.purgeBackwardExtremitiesStmt, purgeBackwardExtremitiesSQL},
|
||||
}.Prepare(db)
|
||||
}
|
||||
|
||||
func (s *backwardExtremitiesStatements) InsertsBackwardExtremity(
|
||||
|
|
|
|||
|
|
@ -79,22 +79,13 @@ func NewPostgresInvitesTable(db *sql.DB) (tables.Invites, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.insertInviteEventStmt, err = db.Prepare(insertInviteEventSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectInviteEventsInRangeStmt, err = db.Prepare(selectInviteEventsInRangeSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.deleteInviteEventStmt, err = db.Prepare(deleteInviteEventSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectMaxInviteIDStmt, err = db.Prepare(selectMaxInviteIDSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.purgeInvitesStmt, err = db.Prepare(purgeInvitesSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s, nil
|
||||
return s, sqlutil.StatementList{
|
||||
{&s.insertInviteEventStmt, insertInviteEventSQL},
|
||||
{&s.selectInviteEventsInRangeStmt, selectInviteEventsInRangeSQL},
|
||||
{&s.deleteInviteEventStmt, deleteInviteEventSQL},
|
||||
{&s.selectMaxInviteIDStmt, selectMaxInviteIDSQL},
|
||||
{&s.purgeInvitesStmt, purgeInvitesSQL},
|
||||
}.Prepare(db)
|
||||
}
|
||||
|
||||
func (s *inviteEventsStatements) InsertInviteEvent(
|
||||
|
|
|
|||
|
|
@ -65,8 +65,8 @@ const selectPositionInTopologySQL = "" +
|
|||
"SELECT topological_position, stream_position FROM syncapi_output_room_events_topology" +
|
||||
" WHERE event_id = $1"
|
||||
|
||||
// Select the max topological position for the room, then sort by stream position and take the highest,
|
||||
// returning both topological and stream positions.
|
||||
// Select the max topological position for the room, then sort by stream position and take the highest,
|
||||
// returning both topological and stream positions.
|
||||
const selectMaxPositionInTopologySQL = "" +
|
||||
"SELECT topological_position, stream_position FROM syncapi_output_room_events_topology" +
|
||||
" WHERE topological_position=(" +
|
||||
|
|
@ -99,31 +99,16 @@ func NewPostgresTopologyTable(db *sql.DB) (tables.Topology, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.insertEventInTopologyStmt, err = db.Prepare(insertEventInTopologySQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectEventIDsInRangeASCStmt, err = db.Prepare(selectEventIDsInRangeASCSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectEventIDsInRangeDESCStmt, err = db.Prepare(selectEventIDsInRangeDESCSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectPositionInTopologyStmt, err = db.Prepare(selectPositionInTopologySQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectMaxPositionInTopologyStmt, err = db.Prepare(selectMaxPositionInTopologySQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectStreamToTopologicalPositionAscStmt, err = db.Prepare(selectStreamToTopologicalPositionAscSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectStreamToTopologicalPositionDescStmt, err = db.Prepare(selectStreamToTopologicalPositionDescSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.purgeEventsTopologyStmt, err = db.Prepare(purgeEventsTopologySQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s, nil
|
||||
return s, sqlutil.StatementList{
|
||||
{&s.insertEventInTopologyStmt, insertEventInTopologySQL},
|
||||
{&s.selectEventIDsInRangeASCStmt, selectEventIDsInRangeASCSQL},
|
||||
{&s.selectEventIDsInRangeDESCStmt, selectEventIDsInRangeDESCSQL},
|
||||
{&s.selectPositionInTopologyStmt, selectPositionInTopologySQL},
|
||||
{&s.selectMaxPositionInTopologyStmt, selectMaxPositionInTopologySQL},
|
||||
{&s.selectStreamToTopologicalPositionAscStmt, selectStreamToTopologicalPositionAscSQL},
|
||||
{&s.selectStreamToTopologicalPositionDescStmt, selectStreamToTopologicalPositionDescSQL},
|
||||
{&s.purgeEventsTopologyStmt, purgeEventsTopologySQL},
|
||||
}.Prepare(db)
|
||||
}
|
||||
|
||||
// InsertEventInTopology inserts the given event in the room's topology, based
|
||||
|
|
|
|||
|
|
@ -87,28 +87,15 @@ func NewPostgresPeeksTable(db *sql.DB) (tables.Peeks, error) {
|
|||
s := &peekStatements{
|
||||
db: db,
|
||||
}
|
||||
if s.insertPeekStmt, err = db.Prepare(insertPeekSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.deletePeekStmt, err = db.Prepare(deletePeekSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.deletePeeksStmt, err = db.Prepare(deletePeeksSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectPeeksInRangeStmt, err = db.Prepare(selectPeeksInRangeSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectPeekingDevicesStmt, err = db.Prepare(selectPeekingDevicesSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectMaxPeekIDStmt, err = db.Prepare(selectMaxPeekIDSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.purgePeeksStmt, err = db.Prepare(purgePeeksSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s, nil
|
||||
return s, sqlutil.StatementList{
|
||||
{&s.insertPeekStmt, insertPeekSQL},
|
||||
{&s.deletePeekStmt, deletePeekSQL},
|
||||
{&s.deletePeeksStmt, deletePeeksSQL},
|
||||
{&s.selectPeeksInRangeStmt, selectPeeksInRangeSQL},
|
||||
{&s.selectPeekingDevicesStmt, selectPeekingDevicesSQL},
|
||||
{&s.selectMaxPeekIDStmt, selectMaxPeekIDSQL},
|
||||
{&s.purgePeeksStmt, purgePeeksSQL},
|
||||
}.Prepare(db)
|
||||
}
|
||||
|
||||
func (s *peekStatements) InsertPeek(
|
||||
|
|
|
|||
|
|
@ -90,19 +90,12 @@ func NewPostgresReceiptsTable(db *sql.DB) (tables.Receipts, error) {
|
|||
r := &receiptStatements{
|
||||
db: db,
|
||||
}
|
||||
if r.upsertReceipt, err = db.Prepare(upsertReceipt); err != nil {
|
||||
return nil, fmt.Errorf("unable to prepare upsertReceipt statement: %w", err)
|
||||
}
|
||||
if r.selectRoomReceipts, err = db.Prepare(selectRoomReceipts); err != nil {
|
||||
return nil, fmt.Errorf("unable to prepare selectRoomReceipts statement: %w", err)
|
||||
}
|
||||
if r.selectMaxReceiptID, err = db.Prepare(selectMaxReceiptIDSQL); err != nil {
|
||||
return nil, fmt.Errorf("unable to prepare selectRoomReceipts statement: %w", err)
|
||||
}
|
||||
if r.purgeReceiptsStmt, err = db.Prepare(purgeReceiptsSQL); err != nil {
|
||||
return nil, fmt.Errorf("unable to prepare purgeReceiptsStmt statement: %w", err)
|
||||
}
|
||||
return r, nil
|
||||
return r, sqlutil.StatementList{
|
||||
{&r.upsertReceipt, upsertReceipt},
|
||||
{&r.selectRoomReceipts, selectRoomReceipts},
|
||||
{&r.selectMaxReceiptID, selectMaxReceiptIDSQL},
|
||||
{&r.purgeReceiptsStmt, purgeReceiptsSQL},
|
||||
}.Prepare(db)
|
||||
}
|
||||
|
||||
func (r *receiptStatements) UpsertReceipt(ctx context.Context, txn *sql.Tx, roomId, receiptType, userId, eventId string, timestamp gomatrixserverlib.Timestamp) (pos types.StreamPosition, err error) {
|
||||
|
|
|
|||
|
|
@ -66,19 +66,12 @@ func NewSqliteBackwardsExtremitiesTable(db *sql.DB) (tables.BackwardsExtremities
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.insertBackwardExtremityStmt, err = db.Prepare(insertBackwardExtremitySQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectBackwardExtremitiesForRoomStmt, err = db.Prepare(selectBackwardExtremitiesForRoomSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.deleteBackwardExtremityStmt, err = db.Prepare(deleteBackwardExtremitySQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.purgeBackwardExtremitiesStmt, err = db.Prepare(purgeBackwardExtremitiesSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s, nil
|
||||
return s, sqlutil.StatementList{
|
||||
{&s.insertBackwardExtremityStmt, insertBackwardExtremitySQL},
|
||||
{&s.selectBackwardExtremitiesForRoomStmt, selectBackwardExtremitiesForRoomSQL},
|
||||
{&s.deleteBackwardExtremityStmt, deleteBackwardExtremitySQL},
|
||||
{&s.purgeBackwardExtremitiesStmt, purgeBackwardExtremitiesSQL},
|
||||
}.Prepare(db)
|
||||
}
|
||||
|
||||
func (s *backwardExtremitiesStatements) InsertsBackwardExtremity(
|
||||
|
|
|
|||
|
|
@ -79,22 +79,13 @@ func NewSqliteInvitesTable(db *sql.DB, streamID *StreamIDStatements) (tables.Inv
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.insertInviteEventStmt, err = db.Prepare(insertInviteEventSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectInviteEventsInRangeStmt, err = db.Prepare(selectInviteEventsInRangeSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.deleteInviteEventStmt, err = db.Prepare(deleteInviteEventSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectMaxInviteIDStmt, err = db.Prepare(selectMaxInviteIDSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.purgeInvitesStmt, err = db.Prepare(purgeInvitesSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s, nil
|
||||
return s, sqlutil.StatementList{
|
||||
{&s.insertInviteEventStmt, insertInviteEventSQL},
|
||||
{&s.selectInviteEventsInRangeStmt, selectInviteEventsInRangeSQL},
|
||||
{&s.deleteInviteEventStmt, deleteInviteEventSQL},
|
||||
{&s.selectMaxInviteIDStmt, selectMaxInviteIDSQL},
|
||||
{&s.purgeInvitesStmt, purgeInvitesSQL},
|
||||
}.Prepare(db)
|
||||
}
|
||||
|
||||
func (s *inviteEventsStatements) InsertInviteEvent(
|
||||
|
|
|
|||
|
|
@ -94,31 +94,16 @@ func NewSqliteTopologyTable(db *sql.DB) (tables.Topology, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.insertEventInTopologyStmt, err = db.Prepare(insertEventInTopologySQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectEventIDsInRangeASCStmt, err = db.Prepare(selectEventIDsInRangeASCSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectEventIDsInRangeDESCStmt, err = db.Prepare(selectEventIDsInRangeDESCSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectPositionInTopologyStmt, err = db.Prepare(selectPositionInTopologySQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectMaxPositionInTopologyStmt, err = db.Prepare(selectMaxPositionInTopologySQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectStreamToTopologicalPositionAscStmt, err = db.Prepare(selectStreamToTopologicalPositionAscSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectStreamToTopologicalPositionDescStmt, err = db.Prepare(selectStreamToTopologicalPositionDescSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.purgeEventsTopologyStmt, err = db.Prepare(purgeEventsTopologySQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s, nil
|
||||
return s, sqlutil.StatementList{
|
||||
{&s.insertEventInTopologyStmt, insertEventInTopologySQL},
|
||||
{&s.selectEventIDsInRangeASCStmt, selectEventIDsInRangeASCSQL},
|
||||
{&s.selectEventIDsInRangeDESCStmt, selectEventIDsInRangeDESCSQL},
|
||||
{&s.selectPositionInTopologyStmt, selectPositionInTopologySQL},
|
||||
{&s.selectMaxPositionInTopologyStmt, selectMaxPositionInTopologySQL},
|
||||
{&s.selectStreamToTopologicalPositionAscStmt, selectStreamToTopologicalPositionAscSQL},
|
||||
{&s.selectStreamToTopologicalPositionDescStmt, selectStreamToTopologicalPositionDescSQL},
|
||||
{&s.purgeEventsTopologyStmt, purgeEventsTopologySQL},
|
||||
}.Prepare(db)
|
||||
}
|
||||
|
||||
// insertEventInTopology inserts the given event in the room's topology, based
|
||||
|
|
|
|||
|
|
@ -88,28 +88,15 @@ func NewSqlitePeeksTable(db *sql.DB, streamID *StreamIDStatements) (tables.Peeks
|
|||
db: db,
|
||||
streamIDStatements: streamID,
|
||||
}
|
||||
if s.insertPeekStmt, err = db.Prepare(insertPeekSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.deletePeekStmt, err = db.Prepare(deletePeekSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.deletePeeksStmt, err = db.Prepare(deletePeeksSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectPeeksInRangeStmt, err = db.Prepare(selectPeeksInRangeSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectPeekingDevicesStmt, err = db.Prepare(selectPeekingDevicesSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.selectMaxPeekIDStmt, err = db.Prepare(selectMaxPeekIDSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.purgePeeksStmt, err = db.Prepare(purgePeeksSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s, nil
|
||||
return s, sqlutil.StatementList{
|
||||
{&s.insertPeekStmt, insertPeekSQL},
|
||||
{&s.deletePeekStmt, deletePeekSQL},
|
||||
{&s.deletePeeksStmt, deletePeeksSQL},
|
||||
{&s.selectPeeksInRangeStmt, selectPeeksInRangeSQL},
|
||||
{&s.selectPeekingDevicesStmt, selectPeekingDevicesSQL},
|
||||
{&s.selectMaxPeekIDStmt, selectMaxPeekIDSQL},
|
||||
{&s.purgePeeksStmt, purgePeeksSQL},
|
||||
}.Prepare(db)
|
||||
}
|
||||
|
||||
func (s *peekStatements) InsertPeek(
|
||||
|
|
|
|||
|
|
@ -88,19 +88,12 @@ func NewSqliteReceiptsTable(db *sql.DB, streamID *StreamIDStatements) (tables.Re
|
|||
db: db,
|
||||
streamIDStatements: streamID,
|
||||
}
|
||||
if r.upsertReceipt, err = db.Prepare(upsertReceipt); err != nil {
|
||||
return nil, fmt.Errorf("unable to prepare upsertReceipt statement: %w", err)
|
||||
}
|
||||
if r.selectRoomReceipts, err = db.Prepare(selectRoomReceipts); err != nil {
|
||||
return nil, fmt.Errorf("unable to prepare selectRoomReceipts statement: %w", err)
|
||||
}
|
||||
if r.selectMaxReceiptID, err = db.Prepare(selectMaxReceiptIDSQL); err != nil {
|
||||
return nil, fmt.Errorf("unable to prepare selectRoomReceipts statement: %w", err)
|
||||
}
|
||||
if r.purgeReceiptsStmt, err = db.Prepare(purgeReceiptsSQL); err != nil {
|
||||
return nil, fmt.Errorf("unable to prepare purgeReceiptsStmt statement: %w", err)
|
||||
}
|
||||
return r, nil
|
||||
return r, sqlutil.StatementList{
|
||||
{&r.upsertReceipt, upsertReceipt},
|
||||
{&r.selectRoomReceipts, selectRoomReceipts},
|
||||
{&r.selectMaxReceiptID, selectMaxReceiptIDSQL},
|
||||
{&r.purgeReceiptsStmt, purgeReceiptsSQL},
|
||||
}.Prepare(db)
|
||||
}
|
||||
|
||||
// UpsertReceipt creates new user receipts
|
||||
|
|
|
|||
Loading…
Reference in a new issue