aboutsummaryrefslogtreecommitdiff
path: root/playground
diff options
context:
space:
mode:
authorAndrew Bonventre <andybons@golang.org>2018-08-14 18:55:10 -0400
committerAndrew Bonventre <andybons@golang.org>2018-08-14 23:19:41 +0000
commit8f8fd1f23985f19c387c894e5597b22d8256a495 (patch)
tree8b607299cc72478d87e40b4899bb64fc905602e1 /playground
parenta434f64ace81347eff0fb4a32bc80a235e0ad762 (diff)
downloadgolang-x-tools-8f8fd1f23985f19c387c894e5597b22d8256a495.tar.gz
playground: increase urlfetch timeout on GAE classic
The default timeout for urlfetch requests on App Engine Classic is 5 seconds. Sometimes the requests can take longer, so increase it to the maximum value of 60 seconds. The playground has its own timeout for running code so there's no need to impose a second level of protection. Also cleans up the code to remove old appenginevm code and use the correct imports. Change-Id: I15da96e5ba70fb008bf821f4609f431847662223 Reviewed-on: https://go-review.googlesource.com/129395 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Andrew Bonventre <andybons@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'playground')
-rw-r--r--playground/appengine.go18
-rw-r--r--playground/appenginevm.go11
-rw-r--r--playground/common.go10
-rw-r--r--playground/local.go15
4 files changed, 33 insertions, 21 deletions
diff --git a/playground/appengine.go b/playground/appengine.go
index 94c5d5232..08c61f3d1 100644
--- a/playground/appengine.go
+++ b/playground/appengine.go
@@ -7,20 +7,28 @@
package playground
import (
+ "context"
+ "io"
"net/http"
- "appengine"
- "appengine/urlfetch"
+ "google.golang.org/appengine"
+ "google.golang.org/appengine/log"
+ "google.golang.org/appengine/urlfetch"
)
func init() {
onAppengine = !appengine.IsDevAppServer()
}
-func client(r *http.Request) *http.Client {
- return urlfetch.Client(appengine.NewContext(r))
+func contextFunc(r *http.Request) context.Context {
+ return appengine.NewContext(r)
+}
+
+func post(ctx context.Context, url, contentType string, body io.Reader) (*http.Response, error) {
+ return urlfetch.Client(ctx).Post(url, contentType, body)
}
func report(r *http.Request, err error) {
- appengine.NewContext(r).Errorf("%v", err)
+ ctx := appengine.NewContext(r)
+ log.Errorf(ctx, "%v", err)
}
diff --git a/playground/appenginevm.go b/playground/appenginevm.go
deleted file mode 100644
index aa3a21268..000000000
--- a/playground/appenginevm.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build appenginevm
-
-package playground
-
-func init() {
- onAppengine = true
-}
diff --git a/playground/common.go b/playground/common.go
index 81df9e002..f34a4b776 100644
--- a/playground/common.go
+++ b/playground/common.go
@@ -9,10 +9,12 @@ package playground // import "golang.org/x/tools/playground"
import (
"bytes"
+ "context"
"errors"
"fmt"
"io"
"net/http"
+ "time"
)
const baseURL = "https://golang.org"
@@ -25,7 +27,7 @@ func init() {
func bounce(w http.ResponseWriter, r *http.Request) {
b := new(bytes.Buffer)
if err := passThru(b, r); err != nil {
- http.Error(w, "Server error.", http.StatusInternalServerError)
+ http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
report(r, err)
return
}
@@ -38,7 +40,9 @@ func passThru(w io.Writer, req *http.Request) error {
}
defer req.Body.Close()
url := baseURL + req.URL.Path
- r, err := client(req).Post(url, req.Header.Get("Content-type"), req.Body)
+ ctx, cancel := context.WithTimeout(contextFunc(req), 60*time.Second)
+ defer cancel()
+ r, err := post(ctx, url, req.Header.Get("Content-type"), req.Body)
if err != nil {
return fmt.Errorf("making POST request: %v", err)
}
@@ -49,7 +53,7 @@ func passThru(w io.Writer, req *http.Request) error {
return nil
}
-var onAppengine = false // will be overridden by appengine.go and appenginevm.go
+var onAppengine = false // will be overridden by appengine.go
func allowShare(r *http.Request) bool {
if !onAppengine {
diff --git a/playground/local.go b/playground/local.go
index b114b8778..452054bd4 100644
--- a/playground/local.go
+++ b/playground/local.go
@@ -7,12 +7,23 @@
package playground
import (
+ "context"
+ "fmt"
+ "io"
"log"
"net/http"
)
-func client(r *http.Request) *http.Client {
- return http.DefaultClient
+func post(ctx context.Context, url, contentType string, body io.Reader) (*http.Response, error) {
+ req, err := http.NewRequest("POST", url, body)
+ if err != nil {
+ return nil, fmt.Errorf("http.NewRequest: %v", err)
+ }
+ return http.DefaultClient.Do(req.WithContext(ctx))
+}
+
+func contextFunc(_ *http.Request) context.Context {
+ return context.Background()
}
func report(r *http.Request, err error) {