Skip to content

Commit

Permalink
playground: increase urlfetch timeout on GAE classic
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
andybons committed Aug 14, 2018
1 parent a434f64 commit 8f8fd1f
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 21 deletions.
18 changes: 13 additions & 5 deletions playground/appengine.go
Expand Up @@ -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)
}
11 changes: 0 additions & 11 deletions playground/appenginevm.go

This file was deleted.

10 changes: 7 additions & 3 deletions playground/common.go
Expand Up @@ -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"
Expand All @@ -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
}
Expand All @@ -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)
}
Expand All @@ -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 {
Expand Down
15 changes: 13 additions & 2 deletions playground/local.go
Expand Up @@ -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) {
Expand Down

0 comments on commit 8f8fd1f

Please sign in to comment.