gRPC v1.46 released, Google high-performance RPC framework

gRPC is a modern, open-source, high-performance remote procedure call (RPC) framework that can run anywhere. It enables client and server applications to communicate transparently and makes it easier to build connected systems. Remote Procedure Calls (RPCs) provide a useful abstraction for building distributed applications and services. The libraries in this repository provide a concrete implementation of the gRPC protocol, layered over HTTP/2. These libraries enable communication between clients and servers using any combination of the supported languages.

By default, it uses Protocol Buffers as the Interface Definition Language (IDL) for describing both the service interface and the structure of the payload messages. It is possible to use other alternatives if desired.

gRPC

Surface API

Starting from an interface definition in a .proto file, gRPC provides Protocol Compiler plugins that generate Client- and Server-side APIs. gRPC users typically fall into these APIs on the client-side and implement the corresponding API on the server-side.

Synchronous vs. asynchronous

Synchronous RPC calls, that block until a response arrives from the server, are the closest approximation to the abstraction of a procedure call that RPC aspires to.

On the other hand, networks are inherently asynchronous and in many scenarios, it is desirable to have the ability to start RPCs without blocking the current thread.

The gRPC programming surface in most languages comes in both synchronous and asynchronous flavors.

grpc v1.46 has been released.

Changelog

gRPC C++ 1.46 will be the last release supporting C++11, future releases will require C++ >= 14. We plan to backport critical (P0) bugs and security fixes to this release for a year, that is, until 2023-06-01. This change won’t bump the major version of gRPC since this doesn’t introduce API changes. Hence, the next version requiring C++14 will be 1.47 (context).

Core

  • Ignore Connection Aborted errors on accept. (#29318)
  • Filter content-length metadata from the application. (#29295)
  • RetryFilter: Cleanup pending byte stream. (#29245)
  • HTTP Proxy: Ignore empty entry in no_proxy list. (#29217)
  • Adding http/1.1 support in httpcli. (#29238)
  • HTTP2: Initiate write for acknowledging SETTINGS frame. (#29218)
  • Change the unsupported polling strategy log for forking to GPR_INFO. (#29232)
  • Handle SSL_ERROR_WANT_WRITE error. (#29176)
  • TCP Async Connect: Fix Heap use-after-free. (#29209)
  • HTTP2: Add graceful goaway. (#29050)
  • Remove epollex poller. (#29160)
  • TlsCredentials: Comparator implementation. (#28940)
  • Decrease verbosity of alts handshaker logs which can happen during cancellation. (#29058)
  • HTTP2: Should not run cancelling logic on servers when receiving GOAWAY. (#29067)
  • HTTP2: Don’t throttle pings from the server. (#29053)
  • Include ADS stream error in XDS error updates. (#29014)
  • Remove idempotent/cacheable requests. (#28922)

C++

  • Add bazel cpp distribtest for grpc_cc_library. (#29175)

C#

  • Add support for grpc-dotnet in GKE benchmarks. (#28975)
  • Sync unary call after shutdown: Add a repro and fix for #19090 . (#23003)
  • Remove C# Legacy (a.k.a. “Classic”) csproj example. (#29102)

Python

  • Add Python GCF Distribtest. (#29303)
  • Add Python Reflection Client. (#29085)
  • Revert “Fix prefork handler register’s default behavior”. (#29229)
  • Fix prefork handler register’s default behavior. (#29103)
  • Fix fetching CXX variable in setup.py. (#28873)

Ruby

  • Support pre-built binaries for Ruby 3.1. (#29000)
  • Make sure to always receive initial metadata in ruby. (#29155)

Download