1
0
mirror of https://github.com/golang/go synced 2024-11-18 15:04:44 -07:00

dashboard: create notion of a builder version

Don't accept results from old builders once we cut over to the git
dashboard.

Change-Id: I1087b9fa174542ecfc7251c13f4319f51eca17b6
Reviewed-on: https://go-review.googlesource.com/1358
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Andrew Gerrand 2014-12-12 10:54:42 +11:00
parent 6f3c548bba
commit 6735829fe0
3 changed files with 29 additions and 12 deletions

View File

@ -26,8 +26,11 @@ import (
"key"
)
const commitsPerPage = 30
const watcherVersion = 3 // must match dashboard/watcher/watcher.go's watcherVersion
const (
commitsPerPage = 30
watcherVersion = 3 // must match dashboard/watcher/watcher.go
builderVersion = 1 // must match dashboard/builder/http.go
)
// commitHandler retrieves commit data or records a new commit.
//
@ -85,10 +88,9 @@ func commitHandler(r *http.Request) (interface{}, error) {
return nil, errors.New("can only POST commits with master key")
}
// For now, the commit watcher doesn't support gccgo,
// so only do this check for Go commits.
// TODO(adg,cmang): remove this check when gccgo is supported.
if dashboardForRequest(r) == goDash {
// For now, the commit watcher doesn't support gccgo.
// TODO(adg,cmang): remove this exception when gccgo is supported.
if dashboardForRequest(r) != gccgoDash {
v, _ := strconv.Atoi(r.FormValue("version"))
if v != watcherVersion {
return nil, fmt.Errorf("rejecting POST from commit watcher; need version %v", watcherVersion)
@ -524,6 +526,15 @@ func resultHandler(r *http.Request) (interface{}, error) {
return nil, errBadMethod(r.Method)
}
// For now, the gccgo builders are using the old stuff.
// TODO(adg,cmang): remove this exception when gccgo is updated.
if dashboardForRequest(r) != gccgoDash {
v, _ := strconv.Atoi(r.FormValue("version"))
if v != builderVersion {
return nil, fmt.Errorf("rejecting POST from builder; need version %v", builderVersion)
}
}
c := contextForRequest(r)
res := new(Result)
defer r.Body.Close()

View File

@ -16,6 +16,8 @@ import (
"time"
)
const builderVersion = 1 // keep in sync with dashboard/app/build/handler.go
type obj map[string]interface{}
// dash runs the given method and command on the dashboard.
@ -24,15 +26,19 @@ type obj map[string]interface{}
// If resp is non-nil the server's response is decoded into the value pointed
// to by resp (resp must be a pointer).
func dash(meth, cmd string, args url.Values, req, resp interface{}) error {
argsCopy := url.Values{"version": {fmt.Sprint(builderVersion)}}
for k, v := range args {
if k == "version" {
panic(`dash: reserved args key: "version"`)
}
argsCopy[k] = v
}
var r *http.Response
var err error
if *verbose {
log.Println("dash <-", meth, cmd, args, req)
}
cmd = *dashboard + "/" + cmd
if len(args) > 0 {
cmd += "?" + args.Encode()
log.Println("dash <-", meth, cmd, argsCopy, req)
}
cmd = *dashboard + "/" + cmd + "?" + argsCopy.Encode()
switch meth {
case "GET":
if req != nil {

View File

@ -53,7 +53,7 @@ var (
buildRevision = flag.String("rev", "", "Build specified revision and exit")
buildCmd = flag.String("cmd", filepath.Join(".", allCmd), "Build command (specify relative to go/src/)")
buildTool = flag.String("tool", "go", "Tool to build.")
gcPath = flag.String("gcpath", "code.google.com/p/go", "Path to download gc from")
gcPath = flag.String("gcpath", "go.googlesource.com/go", "Path to download gc from")
gccPath = flag.String("gccpath", "https://github.com/mirrors/gcc.git", "Path to download gcc from")
gccOpts = flag.String("gccopts", "", "Command-line options to pass to `make` when building gccgo")
benchPath = flag.String("benchpath", "golang.org/x/benchmarks/bench", "Path to download benchmarks from")