Features
- Add
agrpc::RPC<>::service/method_name()
:
package example.v1;
service Example { rpc Unary(Request) returns (Response) {} }
using RPC = agrpc::RPC<&example::v1::Example::Stub::PrepareAsyncUnary>;
static_assert(RPC::service_name() == "example.v1.Example");
static_assert(RPC::method_name() == "Unary");
- Add
agrpc::Alarm
, an I/O object that wraps grpc::Alarm
. A safer alternative to the agrpc::wait
free function. Additionally supports ad-hoc waits which automatically extend the lifetime of the underlying gRPC alarm, for example with a callback:
agrpc::Alarm(grpc_context).wait(deadline, [](bool ok, agrpc::Alarm&& alarm) {});
Fixes
- Leak of uncompleted sender operation states and asynchronous operations started by the high-level client API upon destruction of the GrpcContext.
- For each request in the sender overload of
agrpc::repeatedly_request
, make a copy of the request handler to avoid lifetime surprises when the handler returns unifex::task<>
.
Performance
- Improve compile times by no longer instantiating entire operation states with two different allocators, but instead only their completion function. This affects all free functions, like
agrpc::read
and agrpc::wait
, as well as the high-level client API.
Chore
- Use a more meticulous gRPC shutdown sequence in tests to make them less flaky.
- Update tests and examples to Boost 1.80.