Merge pull request #75853 from roycaihw/fix/use-standard-stacktrace
apimachinery & apiserver: use stacktrace in the stdlib Kubernetes-commit: f8d0b21b980f33e218b7e1f01a13bf3bd90713f9
This commit is contained in:
commit
6b396918ed
|
|
@ -448,11 +448,11 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery",
|
"ImportPath": "k8s.io/apimachinery",
|
||||||
"Rev": "ba051b3c4d9d"
|
"Rev": "8f13d758fb1a"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go",
|
"ImportPath": "k8s.io/client-go",
|
||||||
"Rev": "a18eda0c053a"
|
"Rev": "89226ff90625"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/component-base",
|
"ImportPath": "k8s.io/component-base",
|
||||||
|
|
|
||||||
8
go.mod
8
go.mod
|
|
@ -65,8 +65,8 @@ require (
|
||||||
gopkg.in/yaml.v2 v2.2.1
|
gopkg.in/yaml.v2 v2.2.1
|
||||||
gotest.tools v2.2.0+incompatible // indirect
|
gotest.tools v2.2.0+incompatible // indirect
|
||||||
k8s.io/api v0.0.0-20190405172450-8fc60343b75c
|
k8s.io/api v0.0.0-20190405172450-8fc60343b75c
|
||||||
k8s.io/apimachinery v0.0.0-20190405172352-ba051b3c4d9d
|
k8s.io/apimachinery v0.0.0-20190406052345-8f13d758fb1a
|
||||||
k8s.io/client-go v0.0.0-20190405172624-a18eda0c053a
|
k8s.io/client-go v0.0.0-20190405212609-89226ff90625
|
||||||
k8s.io/component-base v0.0.0-20190405172946-88b5861287aa
|
k8s.io/component-base v0.0.0-20190405172946-88b5861287aa
|
||||||
k8s.io/klog v0.0.0-20190306015804-8e90cee79f82
|
k8s.io/klog v0.0.0-20190306015804-8e90cee79f82
|
||||||
k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30
|
k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30
|
||||||
|
|
@ -329,8 +329,8 @@ replace (
|
||||||
gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.1
|
gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.1
|
||||||
gotest.tools => gotest.tools v2.2.0+incompatible
|
gotest.tools => gotest.tools v2.2.0+incompatible
|
||||||
k8s.io/api => k8s.io/api v0.0.0-20190405172450-8fc60343b75c
|
k8s.io/api => k8s.io/api v0.0.0-20190405172450-8fc60343b75c
|
||||||
k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20190405172352-ba051b3c4d9d
|
k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20190406052345-8f13d758fb1a
|
||||||
k8s.io/client-go => k8s.io/client-go v0.0.0-20190405172624-a18eda0c053a
|
k8s.io/client-go => k8s.io/client-go v0.0.0-20190405212609-89226ff90625
|
||||||
k8s.io/component-base => k8s.io/component-base v0.0.0-20190405172946-88b5861287aa
|
k8s.io/component-base => k8s.io/component-base v0.0.0-20190405172946-88b5861287aa
|
||||||
k8s.io/gengo => k8s.io/gengo v0.0.0-20190116091435-f8a0810f38af
|
k8s.io/gengo => k8s.io/gengo v0.0.0-20190116091435-f8a0810f38af
|
||||||
k8s.io/heapster => k8s.io/heapster v1.2.0-beta.1
|
k8s.io/heapster => k8s.io/heapster v1.2.0-beta.1
|
||||||
|
|
|
||||||
4
go.sum
4
go.sum
|
|
@ -196,8 +196,8 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
|
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
|
||||||
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
|
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
|
||||||
k8s.io/api v0.0.0-20190405172450-8fc60343b75c/go.mod h1:3Wzsx7slWzBw6GbPMeksreuwqpC7UoolhqORRc9g5XY=
|
k8s.io/api v0.0.0-20190405172450-8fc60343b75c/go.mod h1:3Wzsx7slWzBw6GbPMeksreuwqpC7UoolhqORRc9g5XY=
|
||||||
k8s.io/apimachinery v0.0.0-20190405172352-ba051b3c4d9d/go.mod h1:ELqXqns4PTTzr6t0VpyJODef88bmhBzTAkXf2Sa8Nhc=
|
k8s.io/apimachinery v0.0.0-20190406052345-8f13d758fb1a/go.mod h1:ELqXqns4PTTzr6t0VpyJODef88bmhBzTAkXf2Sa8Nhc=
|
||||||
k8s.io/client-go v0.0.0-20190405172624-a18eda0c053a/go.mod h1:CwRy++LDGrMlpoULu2KnnlvejZMB49ldqV9WYq8foOE=
|
k8s.io/client-go v0.0.0-20190405212609-89226ff90625/go.mod h1:CwRy++LDGrMlpoULu2KnnlvejZMB49ldqV9WYq8foOE=
|
||||||
k8s.io/component-base v0.0.0-20190405172946-88b5861287aa/go.mod h1:rzoUhBvaiBqNzOTwpthQvq6ggcSIovKb2QQhfmNxE5k=
|
k8s.io/component-base v0.0.0-20190405172946-88b5861287aa/go.mod h1:rzoUhBvaiBqNzOTwpthQvq6ggcSIovKb2QQhfmNxE5k=
|
||||||
k8s.io/klog v0.0.0-20190306015804-8e90cee79f82 h1:SHucoAy7lRb+w5oC/hbXyZg+zX+Wftn6hD4tGzHCVqA=
|
k8s.io/klog v0.0.0-20190306015804-8e90cee79f82 h1:SHucoAy7lRb+w5oC/hbXyZg+zX+Wftn6hD4tGzHCVqA=
|
||||||
k8s.io/klog v0.0.0-20190306015804-8e90cee79f82/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
|
k8s.io/klog v0.0.0-20190306015804-8e90cee79f82/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,6 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
goruntime "runtime"
|
goruntime "runtime"
|
||||||
"strings"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
|
|
@ -195,10 +194,12 @@ func finishRequest(timeout time.Duration, fn resultFunc) (result runtime.Object,
|
||||||
defer func() {
|
defer func() {
|
||||||
panicReason := recover()
|
panicReason := recover()
|
||||||
if panicReason != nil {
|
if panicReason != nil {
|
||||||
|
// Same as stdlib http server code. Manually allocate stack
|
||||||
|
// trace buffer size to prevent excessively large logs
|
||||||
const size = 64 << 10
|
const size = 64 << 10
|
||||||
buf := make([]byte, size)
|
buf := make([]byte, size)
|
||||||
buf = buf[:goruntime.Stack(buf, false)]
|
buf = buf[:goruntime.Stack(buf, false)]
|
||||||
panicReason = strings.TrimSuffix(fmt.Sprintf("%v\n%s", panicReason, string(buf)), "\n")
|
panicReason = fmt.Sprintf("%v\n%s", panicReason, buf)
|
||||||
// Propagate to parent goroutine
|
// Propagate to parent goroutine
|
||||||
panicCh <- panicReason
|
panicCh <- panicReason
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -92,23 +92,27 @@ func (t *timeoutHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
errCh := make(chan interface{})
|
// resultCh is used as both errCh and stopCh
|
||||||
|
resultCh := make(chan interface{})
|
||||||
tw := newTimeoutWriter(w)
|
tw := newTimeoutWriter(w)
|
||||||
go func() {
|
go func() {
|
||||||
defer func() {
|
defer func() {
|
||||||
err := recover()
|
err := recover()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
// Same as stdlib http server code. Manually allocate stack
|
||||||
|
// trace buffer size to prevent excessively large logs
|
||||||
const size = 64 << 10
|
const size = 64 << 10
|
||||||
buf := make([]byte, size)
|
buf := make([]byte, size)
|
||||||
buf = buf[:runtime.Stack(buf, false)]
|
buf = buf[:runtime.Stack(buf, false)]
|
||||||
err = fmt.Sprintf("%v\n%s", err, buf)
|
err = fmt.Sprintf("%v\n%s", err, buf)
|
||||||
}
|
}
|
||||||
errCh <- err
|
resultCh <- err
|
||||||
}()
|
}()
|
||||||
t.handler.ServeHTTP(tw, r)
|
t.handler.ServeHTTP(tw, r)
|
||||||
}()
|
}()
|
||||||
select {
|
select {
|
||||||
case err := <-errCh:
|
case err := <-resultCh:
|
||||||
|
// panic if error occurs; stop otherwise
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue