Skip to content

Releases: Tradias/asio-grpc

v3.6.1

03 Mar 17:27

Choose a tag to compare

Fixes

  • Heap-use-after-free when submitting work to another GrpcContext while inside of a GrpcContext::run/poll and then destructing that context. Example:
    agrpc::GrpcContext grpc_context;
    {
        agrpc::GrpcContext grpc_context2;
        asio::post(grpc_context2,
                   [&]
                   {
                       asio::post(grpc_context, [] {});
                   });
        grpc_context2.run();
    }
    grpc_context.run();

v3.6.0

07 Jan 16:47

Choose a tag to compare

Features

  • Make gRPC callback API compatible with stdexec/unifex.

Fixes

  • Use of Alarm{}.wait() in an asio parallel_group led to a crash when the alarm completed normally and asio tried to cancel it afterwards.
  • Compilation error related to the new asio::inline_executor in Boost 1.90

Chore

  • Update vcpkg. includes Boost 1.90 update.

v3.5.2

25 Dec 17:37

Choose a tag to compare

Fixes

  • Cancellation of register_sender_rpc_handler will now correctly propagate to the senders produced by the rpc handler in more recent versions of stdexec

v3.5.1

09 Nov 12:52

Choose a tag to compare

Fixes

  • Cancellation of register_sender_rpc_handler will now correctly propagate to the senders produced by the rpc handler

Chore

  • Update vcpkg for Boost 1.89
  • Update sonar-scanner

v3.5.0

28 Jun 13:44

Choose a tag to compare

Features

  • New API that wraps gRPC reactors into Asio I/O objects. This should become the most performant API as soon as gRPC de-experimentalizes their EventEngine API and asio-grpc provides an Asio based implementation of it.
  • Add support for stdexec R10

Fixes

  • ManualResetEvent would sometimes not complete immediately when calling wait() even though the event is ready.
  • Address some Wshadow warning

Chore

  • Remove Ubuntu 20.04 actions thereby raising supported GCC version to 10 an Clang to 13

v3.4.3

19 Mar 16:01

Choose a tag to compare

Fixes

  • GrpcContext::run_while(condition) should not go into waiting on the grpc::CompletionQueue if processing local work satisfied the condition.

Documentation

  • Add a remark to GrpcContext::run_until and GrpcContext::run_while: The number of additional, completed operations that will be processed after the condition/deadline was met is unspecified.

Chore

  • Update vcpkg, includes gRPC 1.71.0 and Boost 1.87 update.

v3.4.2

04 Mar 12:22

Choose a tag to compare

Fixes

  • Compile cleanly with -Wundef

v3.4.1

26 Dec 17:40

Choose a tag to compare

Fixes

  • Add inline to the definition of HealthCheckService::get_serving_status

v3.4.0

15 Dec 11:17

Choose a tag to compare

Features

  • (experimental) RPC handlers passed to register_x functions may now have a member function called request_message_factory() whose return object will be used to create the initial request message in unary and server-streaming rpcs. This can be used to allocate the message in a protobuf arena (example) or reuse it between rpcs.
  • Make Asio based register_x functions compatible with GrpcContext::run_completion_queue/poll_completion_queue()
  • Cleanup asio-grpc.natvis and add support for Asio+libunifex/stdexec mixed builds.

Performance

  • Changed GrpcContext::shutdown_ from atomic to regular bool. This bool is checked at the start and end of every asynchronous operation.

Documentation

  • Add server example showing how to use an asio::io_context as the main execution context and a GrpcContext on a separate thread with GrpcContext::run_completion_queue().

v3.3.0

27 Nov 20:08

Choose a tag to compare

Features

  • (experimental) Add agrpc::register_coroutine_rpc_handler, a generic version of agrpc::register_awaitable_rpc_handler that can be used to handle RPCs with all kinds of awaitable types like asio::experimental::coro and boost::cobalt::task. This can, for example, be used to implement async generator style rpc handler:
asio::experimental::coro<const example::v1::Response*, grpc::Status> 
handle_server_streaming_request(agrpc::GrpcExecutor executor, example::v1::Request& request)
{
    example::v1::Response response;
    response.set_integer(request.integer());
    agrpc::Alarm alarm{executor};
    for (size_t i{}; i != 5; ++i)
    {
        response.set_integer(response.integer() + 1);
        co_yield &response;
        co_await alarm.wait(std::chrono::system_clock::now() + std::chrono::seconds(1));
    }
    co_return grpc::Status::OK;
}

Fixes

  • Fix compilation of health_check_service.hpp with recent gRPC versions by removing use of GPR_ASSERT macro.

Documentation

  • Code snippets now have a copy button in the top right corner.
  • Improve several links between classes/functions in the documentation.
  • Document agrpc::DefaultServerRPCTraits.
  • Fix empty documentation of agrpc::ClientRPC<GENERIC_STREAMING> and agrpc::ServerRPC<GENERIC>.

Chore

  • Replace Clang 12 build with Clang 18.
  • Update doxygen to 1.12.0 and doxygen-awesome to 2.3.4.
  • Update vcpkg, includes Boost 1.86 update.