From 9f834726cdd8f53da49bfea0bd67fb3b58e24771 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Mon, 1 Jun 2020 17:02:48 +0100 Subject: [PATCH] Constructor for TransactionWriter --- internal/sql.go | 9 ++++++++- syncapi/storage/postgres/syncserver.go | 1 + syncapi/storage/shared/syncserver.go | 2 +- syncapi/storage/sqlite3/syncserver.go | 1 + 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/internal/sql.go b/internal/sql.go index 4abab4d35..546954bd5 100644 --- a/internal/sql.go +++ b/internal/sql.go @@ -18,6 +18,7 @@ package internal import ( "database/sql" + "errors" "fmt" "runtime" "time" @@ -120,6 +121,12 @@ type TransactionWriter struct { todo chan transactionWriterTask } +func NewTransactionWriter() *TransactionWriter { + return &TransactionWriter{ + todo: make(chan transactionWriterTask), + } +} + // transactionWriterTask represents a specific task. type transactionWriterTask struct { db *sql.DB @@ -132,7 +139,7 @@ type transactionWriterTask struct { // database parameter. This will block until the task is finished. func (w *TransactionWriter) Do(db *sql.DB, f func(txn *sql.Tx) error) error { if w.todo == nil { - w.todo = make(chan transactionWriterTask) + return errors.New("not initialised") } if !w.running.Load() { go w.run() diff --git a/syncapi/storage/postgres/syncserver.go b/syncapi/storage/postgres/syncserver.go index 3684b7ed1..8a8f964a5 100644 --- a/syncapi/storage/postgres/syncserver.go +++ b/syncapi/storage/postgres/syncserver.go @@ -82,6 +82,7 @@ func NewDatabase(dbDataSourceName string, dbProperties internal.DbProperties) (* CurrentRoomState: currState, BackwardExtremities: backwardExtremities, SendToDevice: sendToDevice, + SendToDeviceWriter: internal.NewTransactionWriter(), EDUCache: cache.New(), } return &d, nil diff --git a/syncapi/storage/shared/syncserver.go b/syncapi/storage/shared/syncserver.go index d160f7f6c..497c043a6 100644 --- a/syncapi/storage/shared/syncserver.go +++ b/syncapi/storage/shared/syncserver.go @@ -42,7 +42,7 @@ type Database struct { CurrentRoomState tables.CurrentRoomState BackwardExtremities tables.BackwardsExtremities SendToDevice tables.SendToDevice - SendToDeviceWriter internal.TransactionWriter + SendToDeviceWriter *internal.TransactionWriter EDUCache *cache.EDUCache } diff --git a/syncapi/storage/sqlite3/syncserver.go b/syncapi/storage/sqlite3/syncserver.go index de8730a16..5ba07617e 100644 --- a/syncapi/storage/sqlite3/syncserver.go +++ b/syncapi/storage/sqlite3/syncserver.go @@ -108,6 +108,7 @@ func (d *SyncServerDatasource) prepare() (err error) { CurrentRoomState: roomState, Topology: topology, SendToDevice: sendToDevice, + SendToDeviceWriter: internal.NewTransactionWriter(), EDUCache: cache.New(), } return nil