Releases: grpc/grpc-java
v0.13.2 Release
- Updates to Netty 4.1.0.CR3, which allows using netty-tcnative-boringssl-static 1.1.33.Fork14 which does not give a warning about executable stacks. All users of netty-tcnative must update to Fork14 due to a method signature change in tcnative
- Fixes a bug in the Netty transport when handling GOAWAY that would cause all new RPCs on a Channel to fail until all preexisting RPCs completed. The new RPCs would fail with a message similar to "Cannot create stream 5 since this endpoint has received a GOAWAY frame with last stream id 3"
- Fixes a deadlock when using the InProcess transport
v0.13.1 Release
This release contains a single fix (103d3d1) to avoid an out-of-order headers bug impacting Netty-4.1.0.CR1. The bug manifests when starting multiple RPCs simultaneously as an opaque error before receiving any responses or the RPC never receiving any response or status. If an RPC was successful then it was not impacted
v0.13.0 Release
New and Notable:
- Support netty-tcnative-boringssl-static, which does not require OpenSSL to be installed. See SECURITY.md. The current build works but omits a warning; a fixed build is expected in a few days
- Reduce number of generated classes for services. We now generate a fixed number of classes per service
- Blocking stub now avoids the default executor of the channel. Processing is done on the blocked thread instead. This avoids a thread hop and reduces number of threads
- Reworked compression API
Context.Key
now uses instance equality, so if you reduce visibility to yourKey
you are guaranteed others can't access the value- Updated README to point to renamed Maven protoc plugin that is available on Maven Central
Other changes:
- Now depending against protobuf-3.0.0-beta-2, protobuf-nano-3.0.0-alpha-5, and netty-4.1.0.CR1
- Can now override the
Executor
for callbacks per-RPC LoadBalancer
now uses generics to no longer depend on any internal classes- Add
Metadata.keys()
for iterating over all metadata - Fix hanging RPCs caused by deadline expiring before RPC started (#1343)
- Better status for some failed RPCs
- Fixed a
ConcurrentModificationException
caused when new RPCs are being made when we transition to a freshly-connected transport - Context no longer has an internal
ScheduledExecutorService
; you must provide one when setting a deadline - Context cancellation on server-side is now more reliable
- Fix a Netty transport
ByteBuffer
leak when queued RPCs fail (#1401) - In-process transport now calls
onReady()
correctly (#875) - Mostly resolve leak due to retaining RPCs, even after they are cancelled, when connecting persistently fails (#1342)
- Fix interruption handling of blocking stubs to throw
StatusRuntimeException
instead of aRuntimeException
v0.12.0 Release
General:
- Commas are now permitted in metadata values
- Header names are now verified to contain only permitted characters (A-Z, a-z, underscore, dash, and period)
- Addition of
{ManagedChannel,Server}Builder.directExecutor()
for low-latency use cases, with specialized handling internally to remove unnecessary locking - Further Compression support
{Client,Server}Call.request()
is now defined as thread-safe- Increased unit test code coverage
- Bug fixes
Android:
- Hostname verification on Android, when not providing your own
SSLCertificateSocketFactory
OkHttpChannelBuilder.overrideHostForAuthority()
is deprecated; useoverrideAuthority()
which is available on allManagedChannelBuilder
s- The codegen now places codegen intended for use with JavaNano protobuf in a 'nano' subpackage by default, like JavaNano does, and also observes
javanano_use_deprecated_package
- Codegen object allocation optimization for JavaNano protobuf
- No longer referencing internal OkHttp classes; grpc now has its own copy of such classes. This reduces grpc's dependence on a particular version of OkHttp
Servers/Datacenter:
- A strong beginning to client-side load balancing support. No server-side portion is provided, so not widely usable at this time. Providing custom load balancers is supported via
ManagedChannelBuilder.loadBalancerFactory
. Expect more in this area in the future - A strong beginning to name resolution support, via
ManagedChannel.forTarget()
. Providing custom name resolvers is supported viaManagedChannelBuilder.nameResolverFactory
. Currently only DNS is implemented. Expect more in this area in the future - Fixed potential for flow-control deadlocking when activity on one stream is based on another in Netty (#1175)
- Fix Netty transport failing to close all calls when notified that the TCP connection dropped (#1251)
Context:
Context
helpers forExecutor
s:Context.wrap(Executor)
andContext.propagate(Executor)
. The former uses the current context whereas the latter uses the currentContext
whenExecutor.execute()
is calledContext
no longer maintains a stack of attachments and now just maintains the "current". Now,attach()
returns the previously-attachedContext
which is then required to be passed toContext.detach()
. This allows naturally restoring a consistent state when applications have bugs when attached/detachingContext
s- During cancellation
Context
now notifies all its direct listeners before notifying child contexts - Initial support for
Context
on both client and server. For client, the currentContext
during new call creation will be the current context during callbacks. For server, a newContext
is created for each incoming call and cancelled when server responds
v0.9.1 Release
- Hostname verification on Android, when not providing your own
SSLCertificateSocketFactory
- Fix Netty transport failing to close all calls when notified that the TCP connection dropped (#1251)
v0.9.0 Release
This release of gRPC-Java is considered beta quality.
As of this release, we expect no breaking API changes unless marked otherwise. This applies to API in packages io.grpc
, io.grpc.auth
, io.grpc.stub
, and io.grpc.protobuf
, as well as normal protobuf generated code. This does not apply to undocumented behavior; we are very likely to align gRPC-Java with the other gRPC implementations by trying harder before failing RPCs.
The codegen is not yet guaranteed forward-compatible as it uses unstable APIs. This will be resolved by 1.0. For now, you must still use the same version of the gRPC-Java protoc plugin as runtime version.
Major changes
- APIs marked with
@Internal
should not be used and those marked with@ExperimentalApi
may change in the future - Daemon threads are now used for all default thread pools
StreamObserver.onValue
has been renamed toonNext
to align with RxJava- Uses of
ChannelImpl
should now becomeManagedChannel
ManagedChannelBuilder.forAddress(String, int)
is now the preferred way of obtaining a channel builder; all transport-specific APIs do not have guaranteed API stability. Similarly, there isServerBuilder.forPort(int)
for server-side- Support for using OpenSSL via tcnative. It is preferred over using jetty-alpn. It requires OpenSSL 1.0.1 or later to be installed. gRPC will automatically fallback to NPN for OpenSSL pre-1.0.2. Please see SECURITY.md for more information
- Metadata keys and ASCII values prohibit many characters, including comma. Comma may be permitted in the future
Minor changes
- Netty and OkHttp builders support
maxMessageSize(int)
configuration - Fixes to incorrect usages of various Status codes
- Updated to protobuf 3.0.0-beta-1. Codegen supports
javanano_use_deprecated_package
, but is not using it for determining which package to generate gRPC code. That will change in the next release - Zero-handshake JWT authentication support. To use, pass in
ServiceAccountJwtAccessCredentials
. In the future will likely support auto-conversion fromServiceAccountCredentials
for use withGoogleCredentials.getApplicationDefault()
- When server completes a call with an error,
ServerCall.onComplete()
is called instead ofServerCall.onCancel()
. This was already the behavior, but the documentation now agrees - General bug fixes
v0.8.0 Release
Major changes
- Deadlines are now enforced both on client / server
- Automatic connection reties with backoff
- Experimental Context API
- In-process transport added
- Implementation details moved to internal package
Minor changes
- Numerous documentation improvements
- Interceptors now fire in reverse order
- OkHTTP now has TLS on by default
- Multiple small method
- OkHttp transports now start asynchronously
- NPN Fallback for Android
- Other small code cleanups
- Lots of bug fixes
As we rapidly approach our beta release, we are cleaning up our API and organizing our code to increase maintainability. All breaking changes should have clear and available alternatives (method and class renames).
v0.7.2 Release
v0.7.1 Release
This is a patch release of v0.7.0 that fixes #504 (via cdd81d2). The patch addresses a race condition where multiple Netty transports can be created by the same builder, resulting in an unsharable handler being added to multiple Netty pipelines. In addition, better error handling has been added to the bootstrap of TLS pipelines in order to detect errors that occur early on in protocol negotiation that may have previously been missed.
v0.7.0 Release
First tagged release of gRPC-Java with artifacts and dependencies on Maven Central, complete with binary protoc plugin.
gRPC-Java is considered alpha quality and does not yet guarantee API-stability.