Skip to content

Commit

Permalink
[http] add bundlebee.kube.http.timeout configuration to more easily c…
Browse files Browse the repository at this point in the history
…ontrol timeout
  • Loading branch information
rmannibucau committed Jul 24, 2023
1 parent 2775cc4 commit b2095cc
Showing 1 changed file with 20 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.RSAPrivateCrtKeySpec;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
Expand Down Expand Up @@ -106,6 +107,11 @@ public class HttpKubeClient implements ConfigHolder {
@ConfigProperty(name = "kubeconfig" /* to match KUBECONFIG env var */, defaultValue = "auto")
private String kubeConfig;

@Inject
@Description("HTTP timeout in ms, ignored if <= 0.")
@ConfigProperty(name = "bundlebee.kube.http.timeout", defaultValue = "60000")
private long timeout;

@Inject
@Getter
@Description("When kubeconfig is not set the base API endpoint.")
Expand Down Expand Up @@ -167,11 +173,15 @@ public class HttpKubeClient implements ConfigHolder {

private Map<String, String> resourceMapping;
private List<String> kindsToSkipUpdateIfPossible;
private Duration timeoutDuration;

@PostConstruct
private void init() {
timeoutDuration = timeout <= 0 ? null : Duration.ofMillis(timeout);
final var builder = HttpClient.newBuilder();
dontUseAtRuntime.connectTimeout().ifPresent(builder::connectTimeout);
dontUseAtRuntime.connectTimeout()
.or(() -> ofNullable(timeoutDuration))
.ifPresent(builder::connectTimeout);
builder.followRedirects(dontUseAtRuntime.followRedirects());
builder.version(dontUseAtRuntime.version());
builder.executor(dontUseAtRuntime.executor().orElseGet(ForkJoinPool::commonPool));
Expand Down Expand Up @@ -224,12 +234,15 @@ public CompletionStage<HttpResponse<String>> execute(final HttpRequest.Builder b
}

public HttpRequest prepareRequest(final HttpRequest.Builder builder, final String urlOrPath) {
return setAuth.apply(builder)
.uri(URI.create(
urlOrPath.startsWith("http:") || urlOrPath.startsWith("https:") ?
urlOrPath :
(baseApi + urlOrPath)))
.build();
final var uri = URI.create(
urlOrPath.startsWith("http:") || urlOrPath.startsWith("https:") ?
urlOrPath :
(baseApi + urlOrPath));
final var base = setAuth.apply(builder).uri(uri);
if (timeoutDuration != null) {
base.timeout(timeoutDuration);
}
return base.build();
}

private HttpClient.Builder doConfigure(final HttpClient.Builder builder) {
Expand Down

0 comments on commit b2095cc

Please sign in to comment.