commit | 136c41e8f22c59b5bc1d94d6ee41abac31b5b5cc | [log] [tgz] |
---|---|---|
author | Alexander Rakoczy <alex@golang.org> | Wed Apr 08 18:10:00 2020 -0400 |
committer | Alexander Rakoczy <alex@golang.org> | Wed Apr 15 16:10:20 2020 +0000 |
tree | 7f25616f7c8488f95f3d409f1aa51b3a67db32be | |
parent | 0a10c623befa45d2926d68ea4b036a3840794fe7 [diff] |
sandbox: timeout runsc commands The current mechanism for forcing a process to die ater a timeout is not sufficient. This change fixes issues that were causing processes to run forever on the sandbox. - Gracefully terminate processes before we kill them inside of our gVisor process. This helps capture valuable debug output for the user. - Return a friendlier error when our run context times out on the playground. - Add a test that timeouts are handled gracefully. - Reduce concurrent goroutines in our sandbox run handler by replacing goroutine copy functions with a custom writer (limitedWriter) that returns an error if too much output is returned, halting the program. - Custom writers (limitedWriter, switchWriter) also fix timing errors when calling Wait() too soon on a Command, before we have read all of the data. It also fixes a different error from trying to read data after a program has terminated. - Remove goroutine from startContainer, and use a ticker + context timeout for synchronization. Updates golang/go#25224 Updates golang/go#38343 Change-Id: Ie9d65220e5c4f39272ea70b45c4b472bcd7069bb Reviewed-on: https://go-review.googlesource.com/c/playground/+/227652 Run-TryBot: Alexander Rakoczy <alex@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
This subrepository holds the source for the Go playground: https://play.golang.org/
# build the image docker build -t playground .
docker run --name=play --rm -p 8080:8080 golang/playground & # run some Go code cat /path/to/code.go | go run client.go | curl -s --upload-file - localhost:8080/compile
Playground releases automatically triggered when new Go repository tags are pushed to GitHub, or when master is pushed on the playground repository.
For details, see deploy/go_trigger.json, deploy/playground_trigger.json, and deploy/deploy.json.
After making changes to trigger configuration, update configuration by running the following Make target:
make update-cloudbuild-trigger
The Cloud Build configuration will always build and deploy with the latest supported release of Go.
gcloud builds submit --config deploy/deploy.json .
Building the playground Docker container takes more than the default 10 minute time limit of cloud build, so increase its timeout first (note, app/cloud_build_timeout
is a global configuration value):
gcloud config set app/cloud_build_timeout 1200 # 20 mins
Alternatively, to avoid Cloud Build and build locally:
make docker docker tag golang/playground:latest gcr.io/golang-org/playground:latest docker push gcr.io/golang-org/playground:latest gcloud --project=golang-org --account=you@google.com app deploy app.yaml --image-url=gcr.io/golang-org/playground:latest
Then:
gcloud --project=golang-org --account=you@google.com app deploy app.yaml
To submit changes to this repository, see https://golang.org/doc/contribute.html.