OLD | NEW |
1 package buildbot | 1 package buildbot |
2 | 2 |
3 import ( | 3 import ( |
4 "database/sql" | 4 "database/sql" |
5 "encoding/json" | 5 "encoding/json" |
6 "fmt" | 6 "fmt" |
| 7 "time" |
7 ) | 8 ) |
8 | 9 |
9 // build from the database. | 10 // build from the database. |
10 func GetCommitsForBuild(master, builder string, buildNumber int) ([]string, erro
r) { | 11 func GetCommitsForBuild(master, builder string, buildNumber int) ([]string, erro
r) { |
11 stmt, err := DB.Preparex(fmt.Sprintf("SELECT revision FROM %s WHERE mast
er = ? AND builder = ? AND number = ?", TABLE_BUILD_REVISIONS)) | 12 stmt, err := DB.Preparex(fmt.Sprintf("SELECT revision FROM %s WHERE mast
er = ? AND builder = ? AND number = ?", TABLE_BUILD_REVISIONS)) |
12 if err != nil { | 13 if err != nil { |
13 return nil, fmt.Errorf("Unable to retrieve build revisions from
database - failed to prepare query: %v", err) | 14 return nil, fmt.Errorf("Unable to retrieve build revisions from
database - failed to prepare query: %v", err) |
14 } | 15 } |
15 defer stmt.Close() | 16 defer stmt.Close() |
16 commits := []string{} | 17 commits := []string{} |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 // Get the commits associated with this build. | 85 // Get the commits associated with this build. |
85 build.Commits, err = GetCommitsForBuild(master, builder, buildNumber) | 86 build.Commits, err = GetCommitsForBuild(master, builder, buildNumber) |
86 if err != nil { | 87 if err != nil { |
87 return nil, fmt.Errorf("Could not retrieve commits for build: %v
", err) | 88 return nil, fmt.Errorf("Could not retrieve commits for build: %v
", err) |
88 } | 89 } |
89 | 90 |
90 return &build, nil | 91 return &build, nil |
91 } | 92 } |
92 | 93 |
93 // ReplaceIntoDB inserts or updates the Build in the database. | 94 // ReplaceIntoDB inserts or updates the Build in the database. |
94 func (b Build) ReplaceIntoDB() (rv error) { | 95 func (b Build) ReplaceIntoDB() error { |
| 96 » var err error |
| 97 » for attempt := 0; attempt < 5; attempt++ { |
| 98 » » if err = b.replaceIntoDB(); err == nil { |
| 99 » » » return nil |
| 100 » » } |
| 101 » » time.Sleep(500 * time.Millisecond) |
| 102 » } |
| 103 » return err |
| 104 } |
| 105 |
| 106 // replaceIntoDB inserts or updates the Build in the database. |
| 107 func (b Build) replaceIntoDB() (rv error) { |
95 // Insert the build itself. | 108 // Insert the build itself. |
96 tx, err := DB.Beginx() | 109 tx, err := DB.Beginx() |
97 if err != nil { | 110 if err != nil { |
98 return fmt.Errorf("Unable to push build into database - Could no
t begin transaction: %v", err) | 111 return fmt.Errorf("Unable to push build into database - Could no
t begin transaction: %v", err) |
99 } | 112 } |
100 defer func() { | 113 defer func() { |
101 if rv != nil { | 114 if rv != nil { |
102 if err := tx.Rollback(); err != nil { | 115 if err := tx.Rollback(); err != nil { |
103 err = fmt.Errorf("Failed to rollback the transac
tion! %v... Previous error: %v", err, rv) | 116 err = fmt.Errorf("Failed to rollback the transac
tion! %v... Previous error: %v", err, rv) |
104 } | 117 } |
(...skipping 29 matching lines...) Expand all Loading... |
134 if err != nil { | 147 if err != nil { |
135 return fmt.Errorf("Failed to delete build steps from database: %
v", err) | 148 return fmt.Errorf("Failed to delete build steps from database: %
v", err) |
136 } | 149 } |
137 // Actually insert the steps. | 150 // Actually insert the steps. |
138 insertStepStmt, err := tx.Preparex(fmt.Sprintf("REPLACE INTO %s (builder
,master,buildNumber,name,results,number,started,finished) VALUES (?,?,?,?,?,?,?,
?);", TABLE_BUILD_STEPS)) | 151 insertStepStmt, err := tx.Preparex(fmt.Sprintf("REPLACE INTO %s (builder
,master,buildNumber,name,results,number,started,finished) VALUES (?,?,?,?,?,?,?,
?);", TABLE_BUILD_STEPS)) |
139 if err != nil { | 152 if err != nil { |
140 return fmt.Errorf("Unable to push buildsteps into database - Cou
ld not prepare statement: %v", err) | 153 return fmt.Errorf("Unable to push buildsteps into database - Cou
ld not prepare statement: %v", err) |
141 } | 154 } |
142 defer insertStepStmt.Close() | 155 defer insertStepStmt.Close() |
143 for _, s := range b.Steps { | 156 for _, s := range b.Steps { |
144 » » _, err = insertStepStmt.Exec(s.BuilderName, s.MasterName, s.Buil
dNumber, s.Name, s.Results, s.Number, s.Started, s.Finished) | 157 » » _, err = insertStepStmt.Exec(b.BuilderName, b.MasterName, b.Numb
er, s.Name, s.Results, s.Number, s.Started, s.Finished) |
145 if err != nil { | 158 if err != nil { |
146 » » » return fmt.Errorf("Failed to push build into database: %
v", err) | 159 » » » return fmt.Errorf("Failed to push build step into databa
se: %v", err) |
147 } | 160 } |
148 | 161 |
149 } | 162 } |
150 | 163 |
151 // Commits. | 164 // Commits. |
152 | 165 |
153 // First, delete existing revisions so that we don't have leftovers | 166 // First, delete existing revisions so that we don't have leftovers |
154 // hanging around from before. | 167 // hanging around from before. |
155 delCmtsStmt, err := tx.Preparex(fmt.Sprintf("DELETE FROM %s WHERE master
= ? AND builder = ? AND number = ?;", TABLE_BUILD_REVISIONS)) | 168 delCmtsStmt, err := tx.Preparex(fmt.Sprintf("DELETE FROM %s WHERE master
= ? AND builder = ? AND number = ?;", TABLE_BUILD_REVISIONS)) |
156 if err != nil { | 169 if err != nil { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 if err != nil { | 217 if err != nil { |
205 return nil, fmt.Errorf("Unable to retrieve unfinished builds - C
ould not prepare statement: %v", err) | 218 return nil, fmt.Errorf("Unable to retrieve unfinished builds - C
ould not prepare statement: %v", err) |
206 } | 219 } |
207 defer stmt.Close() | 220 defer stmt.Close() |
208 b := []*Build{} | 221 b := []*Build{} |
209 if err = stmt.Select(&b); err != nil { | 222 if err = stmt.Select(&b); err != nil { |
210 return nil, fmt.Errorf("Unable to retrieve unfinished builds: %v
", err) | 223 return nil, fmt.Errorf("Unable to retrieve unfinished builds: %v
", err) |
211 } | 224 } |
212 return b, nil | 225 return b, nil |
213 } | 226 } |
OLD | NEW |