Skip to content

Commit

Permalink
Improve caching of HttpClient
Browse files Browse the repository at this point in the history
Signed-off-by: Paolo Di Tommaso <[email protected]>
  • Loading branch information
pditommaso committed Sep 29, 2023
1 parent c03b734 commit 679bd32
Showing 1 changed file with 20 additions and 9 deletions.
29 changes: 20 additions & 9 deletions src/main/groovy/io/seqera/wave/http/HttpClientFactory.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@ import java.net.http.HttpClient
import java.time.Duration
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit

import com.google.common.cache.Cache
import com.google.common.cache.CacheBuilder
import groovy.transform.CompileStatic
import groovy.util.logging.Slf4j
/**
Expand All @@ -38,28 +41,36 @@ class HttpClientFactory {

static private Duration timeout = Duration.ofSeconds(20)

static private Cache<String, HttpClient> cache = CacheBuilder.newBuilder()
.expireAfterAccess(10, TimeUnit.MINUTES)
.build();

static HttpClient followRedirectsHttpClient() {
return HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.followRedirects(HttpClient.Redirect.NORMAL)
.connectTimeout(timeout)
.executor(virtualThreadsExecutor)
.build()
cache.get('followRedirectsHttpClient', ()-> followRedirectsHttpClient0())
}

static HttpClient neverRedirectsHttpClient() {
cache.get('neverRedirectsHttpClient', ()-> neverRedirectsHttpClient0())
}

static HttpClient newHttpClient() {
return followRedirectsHttpClient()
}

static private HttpClient followRedirectsHttpClient0() {
return HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.followRedirects(HttpClient.Redirect.NEVER)
.followRedirects(HttpClient.Redirect.NORMAL)
.connectTimeout(timeout)
.executor(virtualThreadsExecutor)
.build()
}

static HttpClient newHttpClient() {
static private HttpClient neverRedirectsHttpClient0() {
return HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.followRedirects(HttpClient.Redirect.NORMAL)
.followRedirects(HttpClient.Redirect.NEVER)
.connectTimeout(timeout)
.executor(virtualThreadsExecutor)
.build()
}
Expand Down

0 comments on commit 679bd32

Please sign in to comment.