fix concurrent read/write
diff --git a/data/data.go b/data/data.go index 2b6420d..6a3c16c 100644 --- a/data/data.go +++ b/data/data.go
@@ -104,6 +104,10 @@ }, nil } +func (d *ApidDb) BeginReadOnly() (*sql.Tx, error) { + return d.db.Begin() +} + func (d *ApidDb) Stats() sql.DBStats { return d.db.Stats() }
diff --git a/data/data_test.go b/data/data_test.go index c6e76d8..9faf07a 100644 --- a/data/data_test.go +++ b/data/data_test.go
@@ -261,9 +261,13 @@ func read(db apid.DB) { defer GinkgoRecover() var counter string - rows, err := db.Query(`SELECT counter FROM test_1 LIMIT 5`) + tx, err := db.BeginReadOnly() Expect(err).Should(Succeed()) - defer rows.Close() + defer tx.Rollback() + rows, err := tx.Query(`SELECT counter FROM test_1 LIMIT 5`) + Expect(err).Should(Succeed()) + Expect(rows.Close()).Should(Succeed()) + Expect(tx.Commit()).Should(Succeed()) for rows.Next() { rows.Scan(&counter) }
diff --git a/data_service.go b/data_service.go index 355566d..4013913 100644 --- a/data_service.go +++ b/data_service.go
@@ -44,6 +44,7 @@ SetConnMaxLifetime(d time.Duration) SetMaxIdleConns(n int) SetMaxOpenConns(n int) + BeginReadOnly() (*sql.Tx, error) //Close() error //Stats() sql.DBStats //Driver() driver.Driver