aboutsummaryrefslogtreecommitdiff
path: root/roomserver/storage/shared/storage.go
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2022-02-17 13:53:48 +0000
committerGitHub <noreply@github.com>2022-02-17 13:53:48 +0000
commit7dfc7c3d7067c0f247f79f299e80e100244f5121 (patch)
treee6db1e027ffecb06cbce4a3bea0d8fa86db5ecaf /roomserver/storage/shared/storage.go
parent353168a9e93803bc9c5608d2e0ec55ba7fc581d9 (diff)
Don't re-send sent events in `add_state_events` (#2195)
* Only add events to `add_state_events` that haven't already been sent to the roomserver output before * Filter on event NIDs instead, hopefully bring joy to SQLite * UnsentFilter, review comments
Diffstat (limited to 'roomserver/storage/shared/storage.go')
-rw-r--r--roomserver/storage/shared/storage.go26
1 files changed, 20 insertions, 6 deletions
diff --git a/roomserver/storage/shared/storage.go b/roomserver/storage/shared/storage.go
index e96c77af..9f3b8b1d 100644
--- a/roomserver/storage/shared/storage.go
+++ b/roomserver/storage/shared/storage.go
@@ -238,13 +238,27 @@ func (d *Database) addState(
func (d *Database) EventNIDs(
ctx context.Context, eventIDs []string,
) (map[string]types.EventNID, error) {
- return d.eventNIDs(ctx, nil, eventIDs)
+ return d.eventNIDs(ctx, nil, eventIDs, NoFilter)
}
+type UnsentFilter bool
+
+const (
+ NoFilter UnsentFilter = false
+ FilterUnsentOnly UnsentFilter = true
+)
+
func (d *Database) eventNIDs(
- ctx context.Context, txn *sql.Tx, eventIDs []string,
+ ctx context.Context, txn *sql.Tx, eventIDs []string, filter UnsentFilter,
) (map[string]types.EventNID, error) {
- return d.EventsTable.BulkSelectEventNID(ctx, txn, eventIDs)
+ switch filter {
+ case FilterUnsentOnly:
+ return d.EventsTable.BulkSelectUnsentEventNID(ctx, txn, eventIDs)
+ case NoFilter:
+ return d.EventsTable.BulkSelectEventNID(ctx, txn, eventIDs)
+ default:
+ panic("impossible case")
+ }
}
func (d *Database) SetState(
@@ -281,11 +295,11 @@ func (d *Database) EventIDs(
}
func (d *Database) EventsFromIDs(ctx context.Context, eventIDs []string) ([]types.Event, error) {
- return d.eventsFromIDs(ctx, nil, eventIDs)
+ return d.eventsFromIDs(ctx, nil, eventIDs, NoFilter)
}
-func (d *Database) eventsFromIDs(ctx context.Context, txn *sql.Tx, eventIDs []string) ([]types.Event, error) {
- nidMap, err := d.eventNIDs(ctx, txn, eventIDs)
+func (d *Database) eventsFromIDs(ctx context.Context, txn *sql.Tx, eventIDs []string, filter UnsentFilter) ([]types.Event, error) {
+ nidMap, err := d.eventNIDs(ctx, txn, eventIDs, filter)
if err != nil {
return nil, err
}