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)
- CloseSend immediately after Send
- Minor 'invalid code' error output suggestion
- advancedtls package does not set VerifiedChains in TLSInfo.State HOT 5
- question: Bidirectional Streaming get error: rpc error: code = `Canceled` desc = `context canceled` HOT 6
- Delayed dns resolve after upgrade to v1.60.0 HOT 5
- channelz: SubChannel do not report their Target properly since 1.63 HOT 1
- xds: support LRS for all cluster types HOT 4
- Updating credentials of a running server HOT 7
- clusterimpl: update picker synchronously upon receipt of configuration update HOT 1
- cds: update picker synchronously upon receipt of configuration update
- rls: update picker synchronously upon receipt of configuration update
- Improve grpc-go/Documentation to clearly specify usage of `grpc.SetTrailer` function for adding metadata to send to client
- New ServerOption to set cancel insensitive "values" context. HOT 1
- Return the actual error from unary RPCs when `SendMsg()` returns `io.EOF` HOT 14
- protoc-gen-go-grpc: copy service comment to interfaces HOT 2
- Deprecate Dial and DialContext through a mechanism that doesn't trigger linters HOT 1
- Flaky test: 6/100K: Test/LRSClient HOT 2
- Docs: Document how to migrate from `Dial, DialContext, WithBlock, WithReturnConnectionError, FailOnNonTempDialError` to `NewClient` HOT 3
- Stop supporting 3 releases of Go HOT 2
- <invalid gRPC request method "PRI">, when happend grpc and http use sample port HOT 2
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.