Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

grpc transport closing issues #1462

Closed
mikesun opened this issue Jun 17, 2019 · 8 comments
Closed

grpc transport closing issues #1462

mikesun opened this issue Jun 17, 2019 · 8 comments
Assignees
Labels
type: question Request for information or clarification. Not an issue.

Comments

@mikesun
Copy link

mikesun commented Jun 17, 2019

Client

Spanner
Cloud Tasks

Describe Your Environment

Google App Engine Flexible.

Pinned dependencies:
cloud.google.com/go v0.40.0
google.golang.org/grpc v1.21.1

Expected Behavior

No connection errors and GRPC disconnect errors.

Actual Behavior

Seeing both Spanner connection and Cloud Tasks connection errors that seem grpc related:

- [ ] all SubConns are in TransientFailure, latest connection error:
rpc error: code = Canceled desc = context canceled
spanner: code = “Canceled”, desc = “context canceled, lastErr is <<nil>>”

I enabled grpc logging and am observing several connections dying every few minutes:

A  INFO: 2019/06/17 16:10:15 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:10:15 pickfirstBalancer: HandleSubConnStateChange: 0xc000239900, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:10:15 pickfirstBalancer: HandleSubConnStateChange: 0xc000239900, CONNECTING
A  INFO: 2019/06/17 16:10:15 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:10:15 pickfirstBalancer: HandleSubConnStateChange: 0xc000239870, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:10:15 pickfirstBalancer: HandleSubConnStateChange: 0xc000239870, CONNECTING
A  INFO: 2019/06/17 16:10:15 pickfirstBalancer: HandleSubConnStateChange: 0xc000239900, READY
A  INFO: 2019/06/17 16:10:15 pickfirstBalancer: HandleSubConnStateChange: 0xc000239870, READY
A  INFO: 2019/06/17 16:10:37 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:10:37 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:10:37 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, CONNECTING
A  INFO: 2019/06/17 16:10:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, READY
A  INFO: 2019/06/17 16:10:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:10:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:10:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, CONNECTING
A  INFO: 2019/06/17 16:10:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, READY
A  INFO: 2019/06/17 16:10:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:10:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:10:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, CONNECTING
A  INFO: 2019/06/17 16:10:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, READY
A  INFO: 2019/06/17 16:14:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, CONNECTING
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, READY
A  INFO: 2019/06/17 16:14:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, CONNECTING
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, READY
A  INFO: 2019/06/17 16:14:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, CONNECTING
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, READY
A  INFO: 2019/06/17 16:18:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, CONNECTING
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, READY
A  INFO: 2019/06/17 16:18:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, CONNECTING
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, READY
A  INFO: 2019/06/17 16:18:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, CONNECTING
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, READY
A  INFO: 2019/06/17 16:22:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, CONNECTING
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, READY
A  INFO: 2019/06/17 16:22:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, CONNECTING
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, READY
A  INFO: 2019/06/17 16:22:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, CONNECTING
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, READY

At first it seems related to grpc/grpc-go#2663, but the that retry backoff issue is fixed in the grpc version we are using.

@jeanbza jeanbza added the type: question Request for information or clarification. Not an issue. label Jun 17, 2019
@jeanbza
Copy link
Member

jeanbza commented Jun 17, 2019

There a wiiiiiide range of reasons explaining why the transport is closing:

  • A proxy is closing your connection.
  • You're using an intermittently-failing network connection.
  • There's a bug in gRPC, or our libraries.
  • etc.

Do you have any reason to suspect that this is a problem in our libraries, specifically?

@jeanbza jeanbza self-assigned this Jun 17, 2019
@mikesun
Copy link
Author

mikesun commented Jun 17, 2019

There a wiiiiiide range of reasons explaining why the transport is closing:

  • A proxy is closing your connection.
  • You're using an intermittently-failing network connection.
  • There's a bug in gRPC, or our libraries.
  • etc.

Do you have any reason to suspect that this is a problem in our libraries, specifically?

We're using this Google Cloud Library in Google App Engine Flexible app with no special configuration or anything. Everything is standard in this deployment. The application is running on the default GAE network and I don't believe there is a proxy involved in network connections to the Cloud services... I can't think of anything we're doing that's special that would cause it.

I don't know if it's specific to the GCloud libraries or gRPC, but I've also been discussing on this gRPC issue: grpc/grpc-go#2663.

I don't know how to diagnose this.

@jeanbza
Copy link
Member

jeanbza commented Jun 17, 2019

Oh right, good points. Hmmm... I'm also not sure how to diagnose this. Let me check with some folks and see if I can find how to proceed, or who can help you out.

@broady
Copy link
Contributor

broady commented Jun 17, 2019

Hi @mikesun,

Do you have some code to help reproduce or help us figure out what's happening? It looks like your context is being canceled - where is that happening? This would be somewhere in your code (the spanner/tasks library doesn't/shouldn't cancel any contexts, but just pass yours right through).

The "transport is closing" messages are normal operation. From the logs you pasted, it doesn't look like they correlate to actual failed RPCs.

@mikesun
Copy link
Author

mikesun commented Jun 18, 2019

Hi @broady,

I should provide a more detailed explanation on the issues we're encountering.

On 5/26/19, from 1:20AM to 1:44AM EST we saw a large number of errors relating to requests to Spanner and Cloud Tasks. They were all context cancellation related, e.g.:

Spanner errors:

spanner: code = “DeadlineExceeded”, desc = “context deadline exceeded”
spanner: code = "Canceled", desc = "context canceled, lastErr is <<nil>>"
spanner: code = "Canceled", desc = "context canceled, lastErr is <rpc error: code = Canceled desc = context canceled>"

Cloud Task errors:

rpc error: code = Canceled desc = context canceled

We are not doing any explicit context cancellations in our HTTP server app. We are using the the Go http.Server to serve requests (which make RPC calls to Spanner+Cloud Tasks) with default configuration for timeouts:

http.Server{
		Addr: adder,
		Handler: handler,
}

We do configure a max idle connections on the http transport:

http.DefaultTransport.(*http.Transport).MaxIdleConnsPerHost = 500

My thought was that the context cancellations are coming from HTTP request timeouts due to blocking/hanging RPC calls.

Also, this interval on 5/26/19 is the only extended period of time in which we had a burst of these errors. Perhaps there was a network issue during that time? I checked the Google Cloud service status dashboard and did not see any reported incidents during that time though.

Other than that period on 5/26/19, we see infrequent Cloud Task errors (one every couple of days) that are seemingly gRPC related:

2019-05-26 15:24:41.983 EDT rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: <nil>

2019-06-11 00:53:22.595 EDT rpc error: code = Unavailable desc = transport is closing

Digging into those errors is how I arrived at the gRPC issue grpc/grpc-go#2663. I enabled gRPC logging and saw the GRPC transport disconnect messages I posted earlier:

A  INFO: 2019/06/17 16:10:15 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:10:15 pickfirstBalancer: HandleSubConnStateChange: 0xc000239900, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:10:15 pickfirstBalancer: HandleSubConnStateChange: 0xc000239900, CONNECTING
A  INFO: 2019/06/17 16:10:15 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:10:15 pickfirstBalancer: HandleSubConnStateChange: 0xc000239870, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:10:15 pickfirstBalancer: HandleSubConnStateChange: 0xc000239870, CONNECTING
A  INFO: 2019/06/17 16:10:15 pickfirstBalancer: HandleSubConnStateChange: 0xc000239900, READY
A  INFO: 2019/06/17 16:10:15 pickfirstBalancer: HandleSubConnStateChange: 0xc000239870, READY
A  INFO: 2019/06/17 16:10:37 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:10:37 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:10:37 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, CONNECTING
A  INFO: 2019/06/17 16:10:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, READY
A  INFO: 2019/06/17 16:10:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:10:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:10:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, CONNECTING
A  INFO: 2019/06/17 16:10:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, READY
A  INFO: 2019/06/17 16:10:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:10:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:10:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, CONNECTING
A  INFO: 2019/06/17 16:10:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, READY
A  INFO: 2019/06/17 16:14:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, CONNECTING
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, READY
A  INFO: 2019/06/17 16:14:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, CONNECTING
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, READY
A  INFO: 2019/06/17 16:14:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, CONNECTING
A  INFO: 2019/06/17 16:14:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, READY
A  INFO: 2019/06/17 16:18:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, CONNECTING
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, READY
A  INFO: 2019/06/17 16:18:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, CONNECTING
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, READY
A  INFO: 2019/06/17 16:18:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, CONNECTING
A  INFO: 2019/06/17 16:18:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, READY
A  INFO: 2019/06/17 16:22:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, CONNECTING
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc000238ec0, READY
A  INFO: 2019/06/17 16:22:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, CONNECTING
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00030c150, READY
A  INFO: 2019/06/17 16:22:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, TRANSIENT_FAILURE
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, CONNECTING
A  INFO: 2019/06/17 16:22:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00081c350, READY

I'm not sure if those transport disconnect/reconnection messages indicate any issue or they can be safely ignored, but this comment by a gRPC developer gave me pause: grpc/grpc-go#2663 (comment)

Maybe there isn't a gRPC transport issue but we just had an isolated network issue on 5/26/19? I'm still surprised at the frequency of gRPC transport connection resets on our GAE Flexible app as I don't see those occur as frequently when running from my local machine.

The codebase is large, but I could provide a sample app based on it if it would help.

Any help would be greatly appreciated.

@jeanbza
Copy link
Member

jeanbza commented Jun 27, 2019

cc @olavloite

@olavloite
Copy link
Contributor

I can reproduce this in a situation with very low load (in this case: 1 query per 5 minutes). And my log shows exactly the same as @mikesun's, i.e. a TRANSIENT_FAILURE and then CONNECT, READY. The timing is also similar. The problem occurs at intervals of whole minutes, i.e. ending on :38 seconds every time. My hunch is that the log entries are cause by the session pool maintainer that runs exactly once per minute.

My log:

INFO: 2019/06/30 10:52:38 parsed scheme: ""
INFO: 2019/06/30 10:52:38 scheme "" not registered, fallback to default scheme
INFO: 2019/06/30 10:52:38 ccResolverWrapper: sending update to cc: {[{staging-wrenchworks.sandbox.googleapis.com:443 0  <nil>}] }
INFO: 2019/06/30 10:52:38 ClientConn switching balancer to "pick_first"
INFO: 2019/06/30 10:52:38 parsed scheme: ""
INFO: 2019/06/30 10:52:38 scheme "" not registered, fallback to default scheme
INFO: 2019/06/30 10:52:38 ccResolverWrapper: sending update to cc: {[{staging-wrenchworks.sandbox.googleapis.com:443 0  <nil>}] }
INFO: 2019/06/30 10:52:38 ClientConn switching balancer to "pick_first"
INFO: 2019/06/30 10:52:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0002de010, CONNECTING
INFO: 2019/06/30 10:52:38 parsed scheme: ""
INFO: 2019/06/30 10:52:38 scheme "" not registered, fallback to default scheme
INFO: 2019/06/30 10:52:38 ccResolverWrapper: sending update to cc: {[{staging-wrenchworks.sandbox.googleapis.com:443 0  <nil>}] }
INFO: 2019/06/30 10:52:38 ClientConn switching balancer to "pick_first"
INFO: 2019/06/30 10:52:38 parsed scheme: ""
INFO: 2019/06/30 10:52:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00001e030, CONNECTING
INFO: 2019/06/30 10:52:38 scheme "" not registered, fallback to default scheme
INFO: 2019/06/30 10:52:38 ccResolverWrapper: sending update to cc: {[{staging-wrenchworks.sandbox.googleapis.com:443 0  <nil>}] }
INFO: 2019/06/30 10:52:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1770, CONNECTING
INFO: 2019/06/30 10:52:38 ClientConn switching balancer to "pick_first"
INFO: 2019/06/30 10:52:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1890, CONNECTING
INFO: 2019/06/30 10:52:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1770, READY
INFO: 2019/06/30 10:52:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00001e030, READY
INFO: 2019/06/30 10:52:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1890, READY
INFO: 2019/06/30 10:52:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0002de010, READY
COL1	
code:INT64  string_value:"1" 
code:INT64  string_value:"2" 
Connect succeeded
INFO: 2019/06/30 10:56:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
INFO: 2019/06/30 10:56:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
INFO: 2019/06/30 10:56:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0002de010, TRANSIENT_FAILURE
INFO: 2019/06/30 10:56:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0002de010, CONNECTING
INFO: 2019/06/30 10:56:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
INFO: 2019/06/30 10:56:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1890, TRANSIENT_FAILURE
INFO: 2019/06/30 10:56:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1890, CONNECTING
INFO: 2019/06/30 10:56:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1770, TRANSIENT_FAILURE
INFO: 2019/06/30 10:56:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1770, CONNECTING
INFO: 2019/06/30 10:56:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1890, READY
INFO: 2019/06/30 10:56:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1770, READY
INFO: 2019/06/30 10:56:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0002de010, READY
INFO: 2019/06/30 10:57:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
INFO: 2019/06/30 10:57:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00001e030, TRANSIENT_FAILURE
INFO: 2019/06/30 10:57:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00001e030, CONNECTING
INFO: 2019/06/30 10:57:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00001e030, READY
COL1	
code:INT64  string_value:"1" 
code:INT64  string_value:"2" 
INFO: 2019/06/30 11:00:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
INFO: 2019/06/30 11:00:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0002de010, TRANSIENT_FAILURE
INFO: 2019/06/30 11:00:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0002de010, CONNECTING
INFO: 2019/06/30 11:00:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
INFO: 2019/06/30 11:00:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1890, TRANSIENT_FAILURE
INFO: 2019/06/30 11:00:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1890, CONNECTING
INFO: 2019/06/30 11:00:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0002de010, READY
INFO: 2019/06/30 11:00:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1890, READY
INFO: 2019/06/30 11:01:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
INFO: 2019/06/30 11:01:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00001e030, TRANSIENT_FAILURE
INFO: 2019/06/30 11:01:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00001e030, CONNECTING
INFO: 2019/06/30 11:01:38 pickfirstBalancer: HandleSubConnStateChange: 0xc00001e030, READY
INFO: 2019/06/30 11:02:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
INFO: 2019/06/30 11:02:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1770, TRANSIENT_FAILURE
INFO: 2019/06/30 11:02:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1770, CONNECTING
INFO: 2019/06/30 11:02:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1770, READY
COL1	
code:INT64  string_value:"1" 
code:INT64  string_value:"2" 
INFO: 2019/06/30 11:04:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
INFO: 2019/06/30 11:04:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0002de010, TRANSIENT_FAILURE
INFO: 2019/06/30 11:04:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0002de010, CONNECTING
INFO: 2019/06/30 11:04:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0002de010, READY
INFO: 2019/06/30 11:05:39 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
INFO: 2019/06/30 11:05:39 pickfirstBalancer: HandleSubConnStateChange: 0xc00001e030, TRANSIENT_FAILURE
INFO: 2019/06/30 11:05:39 pickfirstBalancer: HandleSubConnStateChange: 0xc00001e030, CONNECTING
INFO: 2019/06/30 11:05:39 pickfirstBalancer: HandleSubConnStateChange: 0xc00001e030, READY
INFO: 2019/06/30 11:06:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
INFO: 2019/06/30 11:06:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1770, TRANSIENT_FAILURE
INFO: 2019/06/30 11:06:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1770, CONNECTING
INFO: 2019/06/30 11:06:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1770, READY
INFO: 2019/06/30 11:07:38 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
INFO: 2019/06/30 11:07:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1890, TRANSIENT_FAILURE
INFO: 2019/06/30 11:07:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1890, CONNECTING
INFO: 2019/06/30 11:07:38 pickfirstBalancer: HandleSubConnStateChange: 0xc0001f1890, READY
COL1	
code:INT64  string_value:"1" 
code:INT64  string_value:"2" 

(The COL1, code:INT64 string_value:"1" etc. is from my test query).

@olavloite
Copy link
Contributor

olavloite commented Jun 30, 2019

It seems that this is cause by Cloud Spanner closing the network connection serverside if there has been no activity for a certain amount of time. If I run the same test application against a local test server, I do not get the same messages. According to the code where the message is logged, it should also not be considered an error, hence also the fact that it is logged at INFO level.

See https://github.com/grpc/grpc-go/blob/73b304d882a0822aaeb3c982c747563777e79586/internal/transport/controlbuf.go#L430 for the place where the error is logged.

Closing this issue as this is not something that is actionable in the client library.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: question Request for information or clarification. Not an issue.
Projects
None yet
Development

No branches or pull requests

4 participants