Comments (4)
gRPC provides two ways of handling cancellation of RPCs:
-
Set a deadline for the entire RPC. In that case, if the deadline is reached during the call to
agrpc::finish
thegrpc::Status
will be set toDEADLINE_EXCEEDED
. The returned bool will still be true because the call actually made it to the server successfully, see also here. -
grpc::ClientContext::TryCancel(). If the cancellation was successful then
apgrc::finish
'sgrpc::Status
will be set toCANCELLED
. You could e.g. have a shorter deadline for an individual RPC step like so:
grpc::Alarm alarm;
agrpc::wait(alarm, std::chrono::system_clock::now() + std::chrono::seconds(1),
boost::asio::bind_executor(grpc_context,
[&](bool alarm_expired)
{
if (alarm_expired)
{
client_context.TryCancel();
}
}));
co_await agrpc::finish(*reader, response, status);
alarm.Cancel();
and I might be able to get this to work with the new awaitable operators at some point as well. Note that for those to work the grpc::ClientContext
would need to be passed to agrpc::finish
so that it can be cancelled which is not yet possible.
from asio-grpc.
Thanks @Tradias for your answer.
from asio-grpc.
@Tradias : Since you are going to update some of the examples based on issue #7 , perhaps you could give an example of setting a deadline timer for one of the rpc calls.
from asio-grpc.
I have added an example on how to cancel a RPC step. The example is based on a unary RPC which should rather be deadlined with grpc::ClientContext::set_deadline
, but it can be applied to streaming RPC steps as well. I leave it as an exercise to you to do that :).
grpc::ClientContext client_context;
client_context.set_deadline(std::chrono::system_clock::now() + std::chrono::seconds(5));
from asio-grpc.
Related Issues (20)
- Provide operator bool to check the validity of ServerPRCPtr HOT 1
- Question: add sender after run HOT 1
- simple program stuck HOT 2
- Consult some questions HOT 9
- Asio-gRPC seems to have TSAN warnings HOT 8
- How to detect client closed connection HOT 6
- Can I call ServerBuilder::BuildAndStart() after GrpcContext::run() HOT 2
- Questions on how to switch from an GrpcContext to io_context and back HOT 6
- How to shutdown grpc clients HOT 1
- Clarification Needed on Thread Context Switch in writer() Function (example streaming-server.cpp) HOT 8
- assertion failed: !started_ HOT 2
- Can I use asio-grpc inside an existing boost::asio application? HOT 7
- The agrpc::GrpcContext hangs forever HOT 13
- an upgrade from 2.5.1 to 2.9.1 leads to build errors HOT 6
- build fails with latest boost 1.84 HOT 4
- [Question]: Slowly receiveing client in long-lived streaming HOT 6
- InvokeHandler conflicts with Objective-C/C++ defines HOT 1
- Need some basic help! HOT 9
- How to make grPC Client to Establish connection based on IP address? HOT 2
- Update conan package to 3.0.0 HOT 1
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 asio-grpc.