Chromium Code Reviews| Index: go/buildbot/db.go |
| diff --git a/go/buildbot/db.go b/go/buildbot/db.go |
| index 21d4eeff0f97d38563787ae65c817415cc7b9658..1ae2e64721c33bcbaf5426d32b5b82373e167971 100644 |
| --- a/go/buildbot/db.go |
| +++ b/go/buildbot/db.go |
| @@ -4,6 +4,7 @@ import ( |
| "database/sql" |
| "encoding/json" |
| "fmt" |
| + "time" |
| ) |
| // build from the database. |
| @@ -91,7 +92,19 @@ func GetBuildFromDB(master, builder string, buildNumber int) (*Build, error) { |
| } |
| // ReplaceIntoDB inserts or updates the Build in the database. |
| -func (b Build) ReplaceIntoDB() (rv error) { |
| +func (b Build) ReplaceIntoDB() error { |
|
borenet
2014/12/18 19:12:43
This increases stability. We occasionally get dead
|
| + var err error |
| + for attempt := 0; attempt < 5; attempt++ { |
| + if err = b.replaceIntoDB(); err == nil { |
| + return nil |
| + } |
| + time.Sleep(500 * time.Millisecond) |
| + } |
| + return err |
| +} |
| + |
| +// replaceIntoDB inserts or updates the Build in the database. |
| +func (b Build) replaceIntoDB() (rv error) { |
| // Insert the build itself. |
| tx, err := DB.Beginx() |
| if err != nil { |
| @@ -141,9 +154,9 @@ func (b Build) ReplaceIntoDB() (rv error) { |
| } |
| defer insertStepStmt.Close() |
| for _, s := range b.Steps { |
| - _, err = insertStepStmt.Exec(s.BuilderName, s.MasterName, s.BuildNumber, s.Name, s.Results, s.Number, s.Started, s.Finished) |
| + _, err = insertStepStmt.Exec(b.BuilderName, b.MasterName, b.Number, s.Name, s.Results, s.Number, s.Started, s.Finished) |
| if err != nil { |
| - return fmt.Errorf("Failed to push build into database: %v", err) |
| + return fmt.Errorf("Failed to push build step into database: %v", err) |
| } |
| } |