Skip to content

grpc.Dial will block when using kuberesolver against a non-existing service #1

@tomwilkie

Description

@tomwilkie

The correct thing to do (implied by grpc/grpc-go#976) is to return an empty []Address from watcher.Next:


goroutine 1 [select]:
github.com/weaveworks/service/vendor/google.golang.org/grpc.DialContext(0x10ed6e0, 0xc420019b78, 0xc42022a8c0, 0x19, 0xc420233ff0, 0x3, 0x3, 0x0, 0x0, 0x0)
	/go/src/github.com/weaveworks/service/vendor/google.golang.org/grpc/clientconn.go:373 +0x60a
github.com/weaveworks/service/vendor/google.golang.org/grpc.Dial(0xc42022a8c0, 0x19, 0xc420233ff0, 0x3, 0x3, 0xc42022a920, 0x19, 0x2)
	/go/src/github.com/weaveworks/service/vendor/google.golang.org/grpc/clientconn.go:268 +0x72
github.com/weaveworks/service/vendor/github.com/weaveworks/common/httpgrpc.NewClient(0x7ffd9ed00245, 0x13, 0xc4201dd3e0, 0x10e7960, 0xc4201dd3e0)
	/go/src/github.com/weaveworks/service/vendor/github.com/weaveworks/common/httpgrpc/httpgrpc.go:81 +0x395
main.routes(0x10ed5a0, 0xc4200555c0, 0xc420187780, 0xbb0c8d, 0xd, 0x1, 0x7ffd9ecffe90, 0x16, 0x0, 0x0, ...)
	....

goroutine 92 [select]:
github.com/weaveworks/service/vendor/github.com/sercand/kuberesolver.(*kubeResolver).watch(0xc42022a8e0, 0xc42022a8cd, 0x7, 0xc4201df260, 0xc4201df200, 0x0, 0x0)
	/go/src/github.com/weaveworks/service/vendor/github.com/sercand/kuberesolver/resolver.go:73 +0x499
github.com/weaveworks/service/vendor/github.com/sercand/kuberesolver.(*kubeResolver).Resolve.func1()
	/go/src/github.com/weaveworks/service/vendor/github.com/sercand/kuberesolver/resolver.go:38 +0x52
github.com/weaveworks/service/vendor/github.com/sercand/kuberesolver.until.func1(0xc4201e92f0)
	/go/src/github.com/weaveworks/service/vendor/github.com/sercand/kuberesolver/util.go:20 +0x43
github.com/weaveworks/service/vendor/github.com/sercand/kuberesolver.until(0xc4201e92f0, 0x3b9aca00, 0xc4201df260)
	/go/src/github.com/weaveworks/service/vendor/github.com/sercand/kuberesolver/util.go:21 +0x73
created by github.com/weaveworks/service/vendor/github.com/sercand/kuberesolver.(*kubeResolver).Resolve
	/go/src/github.com/weaveworks/service/vendor/github.com/sercand/kuberesolver/resolver.go:42 +0x1aa

...

goroutine 91 [chan receive]:
github.com/weaveworks/service/vendor/google.golang.org/grpc.DialContext.func2(0xc420236000, 0xc42022a8c0, 0x19, 0x0, 0x0, 0xc4201df1a0, 0xc4201dd99c)
	/go/src/github.com/weaveworks/service/vendor/google.golang.org/grpc/clientconn.go:358 +0x12f
created by github.com/weaveworks/service/vendor/google.golang.org/grpc.DialContext
	/go/src/github.com/weaveworks/service/vendor/google.golang.org/grpc/clientconn.go:372 +0x3d3

...

goroutine 93 [select]:
github.com/weaveworks/service/vendor/github.com/sercand/kuberesolver.(*watcher).Next(0xc4201df2c0, 0xc4200b9a00, 0xc420025660, 0x41365e, 0xc4201de540, 0xc420011ea0)
	/go/src/github.com/weaveworks/service/vendor/github.com/sercand/kuberesolver/watcher.go:39 +0xe2f
github.com/weaveworks/service/vendor/google.golang.org/grpc.(*roundRobin).watchAddrUpdates(0xc4201df0e0, 0x0, 0x0)
	/go/src/github.com/weaveworks/service/vendor/google.golang.org/grpc/balancer.go:168 +0x64
github.com/weaveworks/service/vendor/google.golang.org/grpc.(*roundRobin).Start.func1(0xc4201df0e0)
	/go/src/github.com/weaveworks/service/vendor/google.golang.org/grpc/balancer.go:239 +0x2b
created by github.com/weaveworks/service/vendor/google.golang.org/grpc.(*roundRobin).Start
	/go/src/github.com/weaveworks/service/vendor/google.golang.org/grpc/balancer.go:243 +0x148

Note I don't agree with this gRPC behaviour, but it doesn't seem like they're going to change that - at least, I'll take that up separately with them.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions