Comments (6)
I can add a getter for the state of ClientConn. But be aware of that this kind of getter is always racy -- you could get stale state (the underlying could change the state at any time.) when you call that getter. That's the reason I did not add that in the first place. Actually, you can feel free to send requests when the connection is doing retries unless you inject too many pending requests leading to memory issues.
from grpc-go.
I don't think we should be adding APIs that are fundamentally racy. And a network connection can fail at any time, so it's not just a startup problem.
If an RPC service needs a way to probe the liveness of a connection, it can easily add a Ping method or similar.
from grpc-go.
Actually I did realize that I would need this also after the connection has
been established. The problem of just sending requests when the connection
is down is that I do have a ton of those and some of those are long
running. I have no problem returning an error or losing requests (this is
for a sharded pubsub) but I can't keep clients pending if one of the nodes
is not responding.
I am going to do some experiments with timeouts and see where I get.
On Tue, Mar 17, 2015 at 6:45 PM, David Symonds [email protected]
wrote:
I don't think we should be adding APIs that are fundamentally racy. And a
network connection can fail at any time, so it's not just a startup problem.If an RPC service needs a way to probe the liveness of a connection, it
can easily add a Ping method or similar.—
Reply to this email directly or view it on GitHub
#121 (comment).
from grpc-go.
So, what about having the option to define a callback triggered when the connection status changes ?
from grpc-go.
That's just as racy, and a lot of the time there's no way to tell that the connection is broken until you try to use it.
from grpc-go.
regarding callback approach,
i) As dsymonds mentioned, it is still racy unless the calls holds a lock (so that others cannot change the state) when it runs, which is clearly not a sound solution;
ii) I always try hard to avoid all these callback based stuffs in grpc-go lib and favor the simple synchronous model which has been used in it.
from grpc-go.
Related Issues (20)
- Wait for ready with "readiness timeout" HOT 16
- How to catch the panic of sendResponse? HOT 5
- Response is not compressed when grpc-accept-encoding header contains spaces between values
- On AWS ALB a gRPC stream CloseSend() without a prior Send() is not received by server HOT 1
- Add new function to grpc ClientConn HOT 2
- Reuse compression buffer
- gRPC client reports the wrong status code if server response contains an unsupported encoding HOT 1
- Unable to Perform Server-Side Stream Initialization Checks in gRPC Client-Side Streaming RPC to return error on stream creation HOT 3
- Client waits with DNS query when no channel's available HOT 6
- Profile Guided Optimization results in high memory usage HOT 5
- Make server workers channel buffered? HOT 11
- xdsresolver uses ldsResourceName instead of using data plane authority HOT 2
- Question: PING frame HOT 7
- Call grpc.Invoke with nil "opts ...CallOption" throw a "invalid memory address or nil pointer dereference" and panics HOT 3
- Does gRPC-go URL encode `/`'s from xDS dial target HOT 1
- Stabilize `UseCompressor` and `SetSendCompressor` HOT 1
- subChannel triggerDelete lead to dead loop HOT 3
- xds: ADS stream failure triggers wildcard subscriptions on new stream HOT 11
- Context cancellation when request finishes HOT 1
- New `Compressor`: Support metadata other than `Name` for trained compression HOT 7
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from grpc-go.