Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(280)

Side by Side Diff: go/buildbot/db.go

Issue 813443002: Overhaul database package (Closed) Base URL: https://skia.googlesource.com/buildbot@master
Patch Set: Comments/readme cleanup Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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 {
borenet 2014/12/18 19:12:43 This increases stability. We occasionally get dead
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698