aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2022-12-06 18:16:17 +0000
committerGitHub <noreply@github.com>2022-12-06 18:16:17 +0000
commitba2ffb7da9b86b64dc8091d90645ab80cf2831db (patch)
tree7d02881b6d4604fd23db3a13bacd692f9f185ba1
parentded43e0f2d07adc399da5962454d9873021b59ac (diff)
Repeatable reads for `/sync` (#2783)
This puts repeatable reads into all sync streams. Co-authored-by: kegsay <kegan@matrix.org>
-rw-r--r--syncapi/storage/shared/storage_consumer.go42
1 files changed, 17 insertions, 25 deletions
diff --git a/syncapi/storage/shared/storage_consumer.go b/syncapi/storage/shared/storage_consumer.go
index 23f53d11..f2064fb8 100644
--- a/syncapi/storage/shared/storage_consumer.go
+++ b/syncapi/storage/shared/storage_consumer.go
@@ -57,31 +57,23 @@ type Database struct {
}
func (d *Database) NewDatabaseSnapshot(ctx context.Context) (*DatabaseTransaction, error) {
- return d.NewDatabaseTransaction(ctx)
-
- /*
- TODO: Repeatable read is probably the right thing to do here,
- but it seems to cause some problems with the invite tests, so
- need to investigate that further.
-
- txn, err := d.DB.BeginTx(ctx, &sql.TxOptions{
- // Set the isolation level so that we see a snapshot of the database.
- // In PostgreSQL repeatable read transactions will see a snapshot taken
- // at the first query, and since the transaction is read-only it can't
- // run into any serialisation errors.
- // https://www.postgresql.org/docs/9.5/static/transaction-iso.html#XACT-REPEATABLE-READ
- Isolation: sql.LevelRepeatableRead,
- ReadOnly: true,
- })
- if err != nil {
- return nil, err
- }
- return &DatabaseTransaction{
- Database: d,
- ctx: ctx,
- txn: txn,
- }, nil
- */
+ txn, err := d.DB.BeginTx(ctx, &sql.TxOptions{
+ // Set the isolation level so that we see a snapshot of the database.
+ // In PostgreSQL repeatable read transactions will see a snapshot taken
+ // at the first query, and since the transaction is read-only it can't
+ // run into any serialisation errors.
+ // https://www.postgresql.org/docs/9.5/static/transaction-iso.html#XACT-REPEATABLE-READ
+ Isolation: sql.LevelRepeatableRead,
+ ReadOnly: true,
+ })
+ if err != nil {
+ return nil, err
+ }
+ return &DatabaseTransaction{
+ Database: d,
+ ctx: ctx,
+ txn: txn,
+ }, nil
}
func (d *Database) NewDatabaseTransaction(ctx context.Context) (*DatabaseTransaction, error) {