Browse Source

Remove default blockTimeout on interface clients

See gh-30403
pull/30456/head
Olga MaciaszekSharma 3 years ago committed by rstoyanchev
parent
commit
033548a760
  1. 5
      framework-docs/modules/ROOT/pages/integration/rest-clients.adoc
  2. 5
      framework-docs/modules/ROOT/pages/rsocket.adoc
  3. 10
      spring-messaging/src/main/java/org/springframework/messaging/rsocket/service/RSocketServiceMethod.java
  4. 10
      spring-messaging/src/main/java/org/springframework/messaging/rsocket/service/RSocketServiceProxyFactory.java
  5. 10
      spring-web/src/main/java/org/springframework/web/service/invoker/HttpServiceMethod.java
  6. 8
      spring-web/src/main/java/org/springframework/web/service/invoker/HttpServiceProxyFactory.java

5
framework-docs/modules/ROOT/pages/integration/rest-clients.adoc

@ -497,6 +497,11 @@ Annotated, HTTP exchange methods support the following return values: @@ -497,6 +497,11 @@ Annotated, HTTP exchange methods support the following return values:
TIP: You can also use any other async or reactive types registered in the
`ReactiveAdapterRegistry`.
TIP: For non-reactive types, blocking from a reactive publisher is performed
under the hood by the framework. By default, it is done without a timeout.
You can set a timeout for blocking by calling `blockTimeout(Duration blockTimeout)`
on `HttpServiceProxyFactory.Builder`.
[[rest-http-interface-exceptions]]
=== Exception Handling

5
framework-docs/modules/ROOT/pages/rsocket.adoc

@ -1063,3 +1063,8 @@ method parameters: @@ -1063,3 +1063,8 @@ method parameters:
Annotated, RSocket exchange methods support return values that are concrete value(s), or
any producer of value(s) that can be adapted to a Reactive Streams `Publisher` via
`ReactiveAdapterRegistry`.
TIP: For non-reactive types, blocking from a reactive publisher is performed
under the hood by the framework. By default, it is done without a timeout.
You can set a timeout for blocking by calling `blockTimeout(Duration blockTimeout)`
on `RSocketServiceProxyFactory.Builder`.

10
spring-messaging/src/main/java/org/springframework/messaging/rsocket/service/RSocketServiceMethod.java

@ -67,7 +67,7 @@ final class RSocketServiceMethod { @@ -67,7 +67,7 @@ final class RSocketServiceMethod {
RSocketServiceMethod(
Method method, Class<?> containingClass, List<RSocketServiceArgumentResolver> argumentResolvers,
RSocketRequester rsocketRequester, @Nullable StringValueResolver embeddedValueResolver,
ReactiveAdapterRegistry reactiveRegistry, Duration blockTimeout) {
ReactiveAdapterRegistry reactiveRegistry, @Nullable Duration blockTimeout) {
this.method = method;
this.parameters = initMethodParameters(method);
@ -125,7 +125,7 @@ final class RSocketServiceMethod { @@ -125,7 +125,7 @@ final class RSocketServiceMethod {
private static Function<RSocketRequestValues, Object> initResponseFunction(
RSocketRequester requester, Method method,
ReactiveAdapterRegistry reactiveRegistry, Duration blockTimeout) {
ReactiveAdapterRegistry reactiveRegistry, @Nullable Duration blockTimeout) {
MethodParameter returnParam = new MethodParameter(method, -1);
Class<?> returnType = returnParam.getParameterType();
@ -164,8 +164,10 @@ final class RSocketServiceMethod { @@ -164,8 +164,10 @@ final class RSocketServiceMethod {
return reactiveAdapter.fromPublisher(responsePublisher);
}
return (blockForOptional ?
((Mono<?>) responsePublisher).blockOptional(blockTimeout) :
((Mono<?>) responsePublisher).block(blockTimeout));
(blockTimeout != null ? ((Mono<?>) responsePublisher).blockOptional(blockTimeout) :
((Mono<?>) responsePublisher).blockOptional()) :
(blockTimeout != null ? ((Mono<?>) responsePublisher).block(blockTimeout) :
((Mono<?>) responsePublisher).block()));
});
}

10
spring-messaging/src/main/java/org/springframework/messaging/rsocket/service/RSocketServiceProxyFactory.java

@ -59,13 +59,14 @@ public final class RSocketServiceProxyFactory { @@ -59,13 +59,14 @@ public final class RSocketServiceProxyFactory {
private final ReactiveAdapterRegistry reactiveAdapterRegistry;
@Nullable
private final Duration blockTimeout;
private RSocketServiceProxyFactory(
RSocketRequester rsocketRequester, List<RSocketServiceArgumentResolver> argumentResolvers,
@Nullable StringValueResolver embeddedValueResolver,
ReactiveAdapterRegistry reactiveAdapterRegistry, Duration blockTimeout) {
ReactiveAdapterRegistry reactiveAdapterRegistry, @Nullable Duration blockTimeout) {
this.rsocketRequester = rsocketRequester;
this.argumentResolvers = argumentResolvers;
@ -139,7 +140,7 @@ public final class RSocketServiceProxyFactory { @@ -139,7 +140,7 @@ public final class RSocketServiceProxyFactory {
private ReactiveAdapterRegistry reactiveAdapterRegistry = ReactiveAdapterRegistry.getSharedInstance();
@Nullable
private Duration blockTimeout = Duration.ofSeconds(5);
private Duration blockTimeout;
private Builder() {
}
@ -189,7 +190,8 @@ public final class RSocketServiceProxyFactory { @@ -189,7 +190,8 @@ public final class RSocketServiceProxyFactory {
/**
* Configure how long to wait for a response for an HTTP service method
* with a synchronous (blocking) method signature.
* <p>By default this is 5 seconds.
* <p>By default this is {@code null},
* in which case means blocking on publishers is done without a timeout.
* @param blockTimeout the timeout value
* @return this same builder instance
*/
@ -207,7 +209,7 @@ public final class RSocketServiceProxyFactory { @@ -207,7 +209,7 @@ public final class RSocketServiceProxyFactory {
return new RSocketServiceProxyFactory(
this.rsocketRequester, initArgumentResolvers(),
this.embeddedValueResolver, this.reactiveAdapterRegistry,
(this.blockTimeout != null ? this.blockTimeout : Duration.ofSeconds(5)));
this.blockTimeout);
}
private List<RSocketServiceArgumentResolver> initArgumentResolvers() {

10
spring-web/src/main/java/org/springframework/web/service/invoker/HttpServiceMethod.java

@ -71,7 +71,7 @@ final class HttpServiceMethod { @@ -71,7 +71,7 @@ final class HttpServiceMethod {
HttpServiceMethod(
Method method, Class<?> containingClass, List<HttpServiceArgumentResolver> argumentResolvers,
HttpClientAdapter client, @Nullable StringValueResolver embeddedValueResolver,
ReactiveAdapterRegistry reactiveRegistry, Duration blockTimeout) {
ReactiveAdapterRegistry reactiveRegistry, @Nullable Duration blockTimeout) {
this.method = method;
this.parameters = initMethodParameters(method);
@ -275,7 +275,7 @@ final class HttpServiceMethod { @@ -275,7 +275,7 @@ final class HttpServiceMethod {
private record ResponseFunction(
Function<HttpRequestValues, Publisher<?>> responseFunction,
@Nullable ReactiveAdapter returnTypeAdapter,
boolean blockForOptional, Duration blockTimeout) {
boolean blockForOptional, @Nullable Duration blockTimeout) {
private ResponseFunction(
Function<HttpRequestValues, Publisher<?>> responseFunction,
@ -298,8 +298,10 @@ final class HttpServiceMethod { @@ -298,8 +298,10 @@ final class HttpServiceMethod {
}
return (this.blockForOptional ?
((Mono<?>) responsePublisher).blockOptional(this.blockTimeout) :
((Mono<?>) responsePublisher).block(this.blockTimeout));
(this.blockTimeout != null ? ((Mono<?>) responsePublisher).blockOptional(this.blockTimeout) :
((Mono<?>) responsePublisher).blockOptional()) :
(this.blockTimeout != null ? ((Mono<?>) responsePublisher).block(this.blockTimeout) :
((Mono<?>) responsePublisher).block()));
}

8
spring-web/src/main/java/org/springframework/web/service/invoker/HttpServiceProxyFactory.java

@ -66,13 +66,14 @@ public final class HttpServiceProxyFactory { @@ -66,13 +66,14 @@ public final class HttpServiceProxyFactory {
private final ReactiveAdapterRegistry reactiveAdapterRegistry;
@Nullable
private final Duration blockTimeout;
private HttpServiceProxyFactory(
HttpClientAdapter clientAdapter, List<HttpServiceArgumentResolver> argumentResolvers,
@Nullable StringValueResolver embeddedValueResolver,
ReactiveAdapterRegistry reactiveAdapterRegistry, Duration blockTimeout) {
ReactiveAdapterRegistry reactiveAdapterRegistry, @Nullable Duration blockTimeout) {
this.clientAdapter = clientAdapter;
this.argumentResolvers = argumentResolvers;
@ -208,7 +209,8 @@ public final class HttpServiceProxyFactory { @@ -208,7 +209,8 @@ public final class HttpServiceProxyFactory {
/**
* Configure how long to wait for a response for an HTTP service method
* with a synchronous (blocking) method signature.
* <p>By default this is 5 seconds.
* <p>By default this is {@code null},
* in which case means blocking on publishers is done without a timeout.
* @param blockTimeout the timeout value
* @return this same builder instance
*/
@ -226,7 +228,7 @@ public final class HttpServiceProxyFactory { @@ -226,7 +228,7 @@ public final class HttpServiceProxyFactory {
return new HttpServiceProxyFactory(
this.clientAdapter, initArgumentResolvers(),
this.embeddedValueResolver, this.reactiveAdapterRegistry,
(this.blockTimeout != null ? this.blockTimeout : Duration.ofSeconds(5)));
this.blockTimeout);
}
private List<HttpServiceArgumentResolver> initArgumentResolvers() {

Loading…
Cancel
Save