Skip to content

sql: retryable errors on auto-commit can result in duplicate results #19269

@benesch

Description

@benesch

@tschottdorf I cannot make heads nor tails of this:

F171016 04:11:18.984054 12 server/server.go:1129  [n1] failed to run migration "populate initial version cluster setting table entry": update version: number of results 2 != expected 1

Occurs during race logic tests, but only on an 8CPU DO droplet. I.e., I've been running this:

make testrace PKG=./pkg/sql/logictest

Applied this diff to get some clarity:

diff --git a/pkg/sqlmigrations/migrations.go b/pkg/sqlmigrations/migrations.go
index 939c54f..385fb47 100644
--- a/pkg/sqlmigrations/migrations.go
+++ b/pkg/sqlmigrations/migrations.go
@@ -459,7 +459,7 @@ func populateVersionSetting(ctx context.Context, r runner) error {
 	); err == nil {
 		res.Close(ctx)
 	} else if err != nil {
-		return err
+		return errors.Wrap(err, "insert row")
 	}
 
 	pl := parser.MakePlaceholderInfo()
@@ -468,7 +468,7 @@ func populateVersionSetting(ctx context.Context, r runner) error {
 		session, "SET CLUSTER SETTING version = $1", &pl, 1); err == nil {
 		res.Close(ctx)
 	} else if err != nil {
-		return err
+		return errors.Wrap(err, "update version")
 	}
 	return nil
 }

So... SET CLUSTER SETTING is returning two results instead of one?! o_O

/cc @dt @knz

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions