Add retry for cockroachdb init to avoid a concurrency issue in CockroachDB, specifically a TransactionRetryError.
This commit is contained in:
parent
49104d1969
commit
aaf705d770
1 changed files with 21 additions and 1 deletions
|
|
@ -169,7 +169,10 @@ func initPostgresDB(dbType string, connectionString string) error {
|
||||||
for _, schemaName := range schemaNames {
|
for _, schemaName := range schemaNames {
|
||||||
fmt.Println("\nInitializing", schemaName, "schema...")
|
fmt.Println("\nInitializing", schemaName, "schema...")
|
||||||
|
|
||||||
err = execFile(db, fmt.Sprintf("./testdata/init/%s/%s.sql", dbType, schemaName))
|
// retry add due to a concurrency issue in CockroachDB, specifically a TransactionRetryError
|
||||||
|
err = retry(3, func() error {
|
||||||
|
return execFile(db, fmt.Sprintf("./testdata/init/%s/%s.sql", dbType, schemaName))
|
||||||
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to execute sql file: %w", err)
|
return fmt.Errorf("failed to execute sql file: %w", err)
|
||||||
}
|
}
|
||||||
|
|
@ -183,6 +186,23 @@ func initPostgresDB(dbType string, connectionString string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func retry(count int, f func() error) error {
|
||||||
|
|
||||||
|
for i := 0; i < count; i++ {
|
||||||
|
err := f()
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
if i == count-1 {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func execFile(db *sql.DB, sqlFilePath string) error {
|
func execFile(db *sql.DB, sqlFilePath string) error {
|
||||||
testSampleSql, err := os.ReadFile(sqlFilePath) // #nosec G304
|
testSampleSql, err := os.ReadFile(sqlFilePath) // #nosec G304
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue