Skip to content

Commit

Permalink
zalando#1040 introduce call timeout
Browse files Browse the repository at this point in the history
  • Loading branch information
jbspeakr committed Jan 18, 2021
1 parent 2bcc90c commit 5e30299
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 8 deletions.
Expand Up @@ -248,6 +248,7 @@ private String findObjectMapper(final String id) {
private List<BeanReference> registerPlugins(final String id, final Client client) {
final Stream<Optional<String>> plugins = Stream.of(
registerChaosPlugin(id, client),
registerCallTimeoutFailsafePlugin(id, client),
registerMicrometerPlugin(id, client),
registerRequestCompressionPlugin(id, client),
registerLogbookPlugin(id, client),
Expand All @@ -256,7 +257,7 @@ private List<BeanReference> registerPlugins(final String id, final Client client
registerRetryPolicyFailsafePlugin(id, client),
registerAuthorizationPlugin(id, client),
registerBackupRequestFailsafePlugin(id, client),
registerTimeoutFailsafePlugin(id, client),
registerGlobalTimeoutFailsafePlugin(id, client),
registerOriginalStackTracePlugin(id, client),
registerCustomPlugin(id));

Expand Down Expand Up @@ -453,12 +454,26 @@ private Optional<String> registerBackupRequestFailsafePlugin(final String id, fi
return Optional.empty();
}

private Optional<String> registerTimeoutFailsafePlugin(final String id, final Client client) {
if (client.getTimeouts().getEnabled()) {
private Optional<String> registerCallTimeoutFailsafePlugin(final String id, final Client client) {
if (client.getTimeouts().getEnabled() && client.getTimeouts().getCall() != null) {
final String pluginId = registry.registerIfAbsent(name(id, Timeout.class, FailsafePlugin.class), () -> {
log.debug("Client [{}]: Registering [TimeoutFailsafePlugin]", id);
log.debug("Client [{}]: Registering [CallTimeoutFailsafePlugin]", id);
return genericBeanDefinition(FailsafePluginFactory.class)
.setFactoryMethod("createTimeoutPlugin")
.setFactoryMethod("createCallTimeoutPlugin")
.addConstructorArgValue(client)
.addConstructorArgValue(createTaskDecorator(id, client));
});
return Optional.of(pluginId);
}
return Optional.empty();
}

private Optional<String> registerGlobalTimeoutFailsafePlugin(final String id, final Client client) {
if (client.getTimeouts().getEnabled() && client.getTimeouts().getGlobal() != null) {
final String pluginId = registry.registerIfAbsent(name(id, Timeout.class, FailsafePlugin.class), () -> {
log.debug("Client [{}]: Registering [GlobalTimeoutFailsafePlugin]", id);
return genericBeanDefinition(FailsafePluginFactory.class)
.setFactoryMethod("createGlobalTimeoutPlugin")
.addConstructorArgValue(client)
.addConstructorArgValue(createTaskDecorator(id, client));
});
Expand Down
Expand Up @@ -230,7 +230,8 @@ private static BackupRequest merge(final BackupRequest base, final BackupRequest
private static Timeouts merge(final Timeouts base, final Timeouts defaults) {
return new Timeouts(
either(base.getEnabled(), defaults.getEnabled()),
either(base.getGlobal(), defaults.getGlobal())
either(base.getGlobal(), defaults.getGlobal()),
either(base.getCall(), defaults.getCall())
);
}

Expand Down
Expand Up @@ -145,7 +145,7 @@ public static Plugin createBackupRequestPlugin(
.withDecorator(decorator);
}

public static Plugin createTimeoutPlugin(
public static Plugin createGlobalTimeoutPlugin(
final Client client, final TaskDecorator decorator) {

final Duration timeout = client.getTimeouts().getGlobal().toDuration();
Expand All @@ -157,6 +157,18 @@ public static Plugin createTimeoutPlugin(
.withDecorator(decorator);
}

public static Plugin createCallTimeoutPlugin(
final Client client, final TaskDecorator decorator) {

final Duration timeout = client.getTimeouts().getCall().toDuration();

return new FailsafePlugin()
.withPolicy(
Timeout.<ClientHttpResponse>of(timeout)
.withCancel(true))
.withDecorator(decorator);
}

private static DelayFunction<ClientHttpResponse, Throwable> delayFunction() {
return new CompositeDelayFunction<>(Arrays.asList(
new RetryAfterDelayFunction(systemUTC()),
Expand Down
Expand Up @@ -99,7 +99,7 @@ public static final class Defaults {
private BackupRequest backupRequest = new BackupRequest(false, null);

@NestedConfigurationProperty
private Timeouts timeouts = new Timeouts(false, null);
private Timeouts timeouts = new Timeouts(false, null, null);

@NestedConfigurationProperty
private RequestCompression requestCompression = new RequestCompression(false);
Expand Down Expand Up @@ -327,6 +327,7 @@ public static final class BackupRequest {
public static final class Timeouts {
private Boolean enabled;
private TimeSpan global;
private TimeSpan call;
}

@Getter
Expand Down

0 comments on commit 5e30299

Please sign in to comment.