Try to protect GetNextTransactionPDUs
MODIFY
federationsender/storage/shared/storage_pdus.go
federationsender/storage/shared/storage_pdus.go
@@ -21,7 +21,6 @@ import (
"errors"
"fmt"
- "github.com/matrix-org/dendrite/internal/sqlutil"
"github.com/matrix-org/gomatrixserverlib"
)
@@ -62,7 +61,12 @@ func (d *Database) GetNextTransactionPDUs(
receipt *Receipt,
err error,
) {
- err = sqlutil.WithTransaction(d.DB, func(txn *sql.Tx) error {
+ // Strictly speaking this doesn't need to be using the writer
+ // since we are only performing selects, but since we don't have
+ // a guarantee of transactional isolation, it's actually useful
+ // to know in SQLite mode that nothing else is trying to modify
+ // the database.
+ err = d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error {
transactionID, err = d.FederationSenderQueuePDUs.SelectQueuePDUNextTransactionID(ctx, txn, serverName)
if err != nil {
return fmt.Errorf("SelectQueuePDUNextTransactionID: %w", err)

Try to protect GetNextTransactionPDUs (#1350)