Skip to content

Commit

Permalink
Add release notes for 1.22.0 (#4656)
Browse files Browse the repository at this point in the history
  • Loading branch information
jrhee17 committed Feb 9, 2023
1 parent a43cfa2 commit 904aee7
Showing 1 changed file with 135 additions and 0 deletions.
135 changes: 135 additions & 0 deletions site/src/pages/release-notes/1.22.0.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
---
date: 2023-02-09
---

## 🌟 New features

- <type://CircuitBreakerClient> integration with Resilience4j's circuit breaker is now available. #1469 #4139
- Note that `armeria-resilience4j2` requires Java 17 or higher.
```java
Resilience4jCircuitBreakerMapping mapping =
Resilience4jCircuitBreakerMapping.of();
BlockingWebClient client = WebClient
.builder()
.decorator(CircuitBreakerClient
.builder(CircuitBreakerRule.onException())
.handler(Resilience4JCircuitBreakerClientHandler.of(mapping)) // 👈👈👈
.newDecorator())
...
```
- You can now use <type://AsyncServerInterceptor> to asynchronously intercept gRPC service calls. #4647
```java
class AuthServerInterceptor implements AsyncServerInterceptor {
@Override
<I, O> CompletableFuture<Listener<I>> asyncInterceptCall(
ServerCall<I, O> call, Metadata headers, ServerCallHandler<I, O> next) {
return authorizer.authorize(headers).thenApply(result -> {
if (result) {
return next.startCall(call, headers);
} else {
throw new AuthenticationException("Invalid access");
}
});
}
}

GrpcService.builder()
.intercept(new AuthServerInterceptor()) // 👈👈👈
.addService(...)
...
```
- <type://@Blocking> annotation can now be used with gRPC services. #4389 #4585
```java
@Blocking // 👈👈👈 applies to all methods in the class
class MyGrpcServiceImpl extends MyGrpcServiceImplBase {
@Blocking // 👈👈👈 applies to a single method
public void blockingCall(...) {
...
}
}
```
- Armeria server with Spring integration can now be configured to bind to non-ip addresses. #4597 #4598
- The authenticated remote user set by <type://RequestLogBuilder#authenticatedUser(String)> is now logged in access
logs. #4634
- <type://DocService> now exposes [JSON Schema](https://json-schema.org/) via the `/schemas.json` endpoint. #4518

## 📈 Improvements

- <type://Server#reconfigure(ServerConfigurator)> now dynamically updates TLS configurations correctly. #4637
- Thrift [typedefs](http://diwakergupta.github.io/thrift-missing-guide/#_typedefs) are
now correctly displayed in <type://DocService>. #4628
- <type://DocService> front-end assets are now compressed using gzip instead of Brotli. #4616
- An exception is raised if TLS is set for a port-based virtual host. #4588

## 🛠️ Bug fixes

- A `NullPointerException` is not raised anymore when an aborted <type://StreamMessage> is collected. #4652
- A <type://ClosedSessionException> is not set to <type://RequestLog#responseCause()> anymore when
an HTTP/1 connection is closed after response data has been fully sent. #4632
- [gRPC HTTP/JSON transcoding](https://cloud.google.com/endpoints/docs/grpc/transcoding) now doesn't throw an exception when used with nested messages. #4631 #4641
- `431 Request Header Fields Too Large` is now returned instead of `400 Bad Request` if the header size exceeds <type://ServerConfig#http1MaxHeaderSize()>. #4609 #4655
- Warnings on duplicate parameters in <type://DocService> are no longer visible when annotations are added to Kotlin data classes. #4645
- [gRPC HTTP/JSON transcoding](https://cloud.google.com/endpoints/docs/grpc/transcoding) now correctly interprets `google.protobuf.FieldMask` type as a string. #4633 #4640
- gRPC metadata is now exposed via <type://StatusRuntimeException> in <type://RequestLog#responseCause()>. #4635 #4636
- Square brackets "`[]`" that are specified in path segments are correctly encoded. #4607 #4615
- <type://DecodingService> and <type://DecodingClient> now correctly limit the max length of decompressed streaming data. #4613
- Client-side gRPC callback `ClientCall.Listener.onHeaders()` is now invoked correctly. #4583 #4608
- <type://DocService> now correctly displays multiple example requests for a single endpoint. #4576 #4605

## 🏚️ Deprecations

- `ArmeriaSettings.ports.ip` is deprecated in favor of `ArmeriaSettings.ports.address`. #4597 #4598

## ☢️ Breaking changes

- Armeria's gRPC services now try to throw a `StatusRuntimeException` instead of a `StatusException`. #4658
- Note that users are still recommended to perform error handling for both `StatusRuntimeException` and `StatusException`
for gRPC services.
- We are planning on stopping support for integration with Spring Boot 1. Please join the discussion at our
[Github issue](https://github.com/line/armeria/issues/4651) if you have any opinions. #4651

## Dependencies

- Brave 5.14.1 5.15.0
- Dropwizard-metrics 4.2.13 4.2.15
- GraphQL Kotlin 6.3.2 6.3.5
- gRPC Java 1.49.1 1.52.1
- Hibernate Validator 6.2.3.Final 6.2.5.Final
- Jackson 2.14.1 2.14.2
- java-jwt 4.2.1 4.2.2
- Kafka client 3.3.1 3.4.0
- Kotlin 1.7.22 1.8.10
- Micrometer 4.10.0 4.11.0
- Netty 4.1.86.Final 4.1.87.Final
- io_uring 0.0.16.Final 0.0.17.Final
- Protobuf 3.21.1 3.21.7
- Resteasy 5.0.4.Final 5.0.5.Final
- RxJava3 3.1.5 3.1.6
- Sangria 3.4.1 3.5.0
- Scala3 3.2.0 3.2.2
- ScalaPB 0.11.12 0.11.13
- ScalaPB JSON 0.12.0 0.12.1
- Spring 5.3.23 5.3.25
- Spring Boot 2.7.4 2.7.8
- Tomcat8 8.5.84 8.5.85
- Tomcat9 9.0.70 9.0.71

## 🙇 Thank you

<ThankYou usernames={[
'cormoran',
'daniel-itunu',
'Dogacel',
'heesuk-ahn',
'hyperxpro',
'ikhoon',
'j-min5u',
'jrhee17',
'kezhenxu94',
'kojilin',
'minwoox',
'sullis',
'ta7uw',
'tomatophobia',
'trustin'
]} />

0 comments on commit 904aee7

Please sign in to comment.