Use in-memory sequence number generator when running integration tests against Spanner emulator. (#102522)
This commit is contained in:
@@ -9,7 +9,10 @@ import (
|
||||
"strings"
|
||||
|
||||
_ "github.com/googleapis/go-sql-spanner"
|
||||
spannerdriver "github.com/googleapis/go-sql-spanner"
|
||||
"xorm.io/core"
|
||||
|
||||
spannerext "github.com/grafana/grafana/pkg/extensions/spanner"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@@ -370,3 +373,23 @@ func (s *spanner) GetIndexes(tableName string) (map[string]*core.Index, error) {
|
||||
}
|
||||
return indexes, res.Err()
|
||||
}
|
||||
|
||||
func (s *spanner) CreateSequenceGenerator(db *sql.DB) (SequenceGenerator, error) {
|
||||
dsn := s.DataSourceName()
|
||||
connectorConfig, err := spannerdriver.ExtractConnectorConfig(dsn)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if spannerext.UsePlainText(connectorConfig) {
|
||||
// Plain-text means we're either using spannertest or Spanner emulator.
|
||||
// Switch to fake in-memory sequence number generator in that case.
|
||||
//
|
||||
// Using database-based sequence generator doesn't work with emulator, as emulator
|
||||
// only supports single transaction. If there is already another transaction started
|
||||
// generating new ID via database-based sequence generator would always fail.
|
||||
return newInMemSequenceGenerator(), nil
|
||||
}
|
||||
|
||||
return newSequenceGenerator(db), nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user