Use in-memory sequence number generator when running integration tests against Spanner emulator. (#102522)

This commit is contained in:
Peter Štibraný
2025-03-20 16:50:50 +01:00
committed by GitHub
parent 9ad7fef4f4
commit 8db050af6b
5 changed files with 85 additions and 34 deletions
+23
View File
@@ -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
}