Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save lptr/e7b76245daa003d1f672bc87a7eba3b6 to your computer and use it in GitHub Desktop.
Save lptr/e7b76245daa003d1f672bc87a7eba3b6 to your computer and use it in GitHub Desktop.
diff --git a/platforms/core-execution/build-cache-http/src/main/java/org/gradle/caching/http/internal/DefaultHttpBuildCacheServiceFactory.java b/platforms/core-execution/build-cache-http/src/main/java/org/gradle/caching/http/internal/DefaultHttpBuildCacheServiceFactory.java
index 141e49c2014..1ad7e2e8a3a 100644
--- a/platforms/core-execution/build-cache-http/src/main/java/org/gradle/caching/http/internal/DefaultHttpBuildCacheServiceFactory.java
+++ b/platforms/core-execution/build-cache-http/src/main/java/org/gradle/caching/http/internal/DefaultHttpBuildCacheServiceFactory.java
@@ -25,6 +25,7 @@
import org.gradle.caching.http.HttpBuildCacheCredentials;
import org.gradle.internal.authentication.DefaultBasicAuthentication;
import org.gradle.internal.deprecation.Documentation;
+import org.gradle.internal.operations.BuildOperationRunner;
import org.gradle.internal.resource.transport.http.DefaultHttpSettings;
import org.gradle.internal.resource.transport.http.HttpClientHelper;
import org.gradle.internal.resource.transport.http.HttpSettings;
@@ -45,12 +46,19 @@ public class DefaultHttpBuildCacheServiceFactory implements BuildCacheServiceFac
private static final int MAX_REDIRECTS = Integer.getInteger("org.gradle.cache.http.max-redirects", 10);
+ private final BuildOperationRunner buildOperationRunner;
private final SslContextFactory sslContextFactory;
private final HttpBuildCacheRequestCustomizer requestCustomizer;
private final HttpClientHelper.Factory httpClientHelperFactory;
@Inject
- public DefaultHttpBuildCacheServiceFactory(SslContextFactory sslContextFactory, HttpBuildCacheRequestCustomizer requestCustomizer, HttpClientHelper.Factory httpClientHelperFactory) {
+ public DefaultHttpBuildCacheServiceFactory(
+ BuildOperationRunner buildOperationRunner,
+ SslContextFactory sslContextFactory,
+ HttpBuildCacheRequestCustomizer requestCustomizer,
+ HttpClientHelper.Factory httpClientHelperFactory
+ ) {
+ this.buildOperationRunner = buildOperationRunner;
this.sslContextFactory = sslContextFactory;
this.requestCustomizer = requestCustomizer;
this.httpClientHelperFactory = httpClientHelperFactory;
@@ -105,7 +113,7 @@ public BuildCacheService createBuildCacheService(HttpBuildCache configuration, D
.config("allowInsecureProtocol", Boolean.toString(allowInsecureProtocol))
.config("useExpectContinue", Boolean.toString(useExpectContinue));
- return new HttpBuildCacheService(httpClientHelper, noUserInfoUrl, requestCustomizer, useExpectContinue);
+ return new HttpBuildCacheService(buildOperationRunner, httpClientHelper, noUserInfoUrl, requestCustomizer, useExpectContinue);
}
private HttpRedirectVerifier createRedirectVerifier(URI url, boolean allowInsecureProtocol) {
diff --git a/platforms/core-execution/build-cache-http/src/main/java/org/gradle/caching/http/internal/HttpBuildCacheService.java b/platforms/core-execution/build-cache-http/src/main/java/org/gradle/caching/http/internal/HttpBuildCacheService.java
index 74dae2d3935..11c14a47b48 100644
--- a/platforms/core-execution/build-cache-http/src/main/java/org/gradle/caching/http/internal/HttpBuildCacheService.java
+++ b/platforms/core-execution/build-cache-http/src/main/java/org/gradle/caching/http/internal/HttpBuildCacheService.java
@@ -23,6 +23,7 @@
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPut;
+import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.AbstractHttpEntity;
import org.apache.http.protocol.HTTP;
@@ -33,6 +34,10 @@
import org.gradle.caching.BuildCacheKey;
import org.gradle.caching.BuildCacheService;
import org.gradle.internal.UncheckedException;
+import org.gradle.internal.operations.BuildOperationContext;
+import org.gradle.internal.operations.BuildOperationDescriptor;
+import org.gradle.internal.operations.BuildOperationRunner;
+import org.gradle.internal.operations.CallableBuildOperation;
import org.gradle.internal.resource.transport.http.HttpClientHelper;
import org.gradle.internal.resource.transport.http.HttpClientResponse;
import org.slf4j.Logger;
@@ -64,11 +69,19 @@ public class HttpBuildCacheService implements BuildCacheService {
);
private final URI root;
+ private final BuildOperationRunner buildOperationRunner;
private final HttpClientHelper httpClientHelper;
private final HttpBuildCacheRequestCustomizer requestCustomizer;
private final boolean useExpectContinue;
- public HttpBuildCacheService(HttpClientHelper httpClientHelper, URI url, HttpBuildCacheRequestCustomizer requestCustomizer, boolean useExpectContinue) {
+ public HttpBuildCacheService(
+ BuildOperationRunner buildOperationRunner,
+ HttpClientHelper httpClientHelper,
+ URI url,
+ HttpBuildCacheRequestCustomizer requestCustomizer,
+ boolean useExpectContinue
+ ) {
+ this.buildOperationRunner = buildOperationRunner;
this.requestCustomizer = requestCustomizer;
this.useExpectContinue = useExpectContinue;
this.root = withTrailingSlash(url);
@@ -82,7 +95,7 @@ public boolean load(BuildCacheKey key, BuildCacheEntryReader reader) throws Buil
httpGet.addHeader(HttpHeaders.ACCEPT, BUILD_CACHE_CONTENT_TYPE + ", */*");
requestCustomizer.customize(httpGet);
- try (HttpClientResponse response = httpClientHelper.performHttpRequest(httpGet)) {
+ try (HttpClientResponse response = performHttpRequest(key, httpGet)) {
StatusLine statusLine = response.getStatusLine();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Response for GET {}: {}", safeUri(uri), statusLine);
@@ -138,7 +151,7 @@ public boolean isStreaming() {
return false;
}
});
- try (HttpClientResponse response = httpClientHelper.performHttpRequest(httpPut)) {
+ try (HttpClientResponse response = performHttpRequest(key, httpPut)) {
StatusLine statusLine = response.getStatusLine();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Response for PUT {}: {}", safeUri(uri), statusLine);
@@ -155,6 +168,20 @@ public boolean isStreaming() {
}
}
+ private HttpClientResponse performHttpRequest(BuildCacheKey key, HttpRequestBase request) throws IOException {
+ return buildOperationRunner.call(new CallableBuildOperation<HttpClientResponse>() {
+ @Override
+ public HttpClientResponse call(BuildOperationContext context) throws Exception {
+ return httpClientHelper.performHttpRequest(request);
+ }
+
+ @Override
+ public BuildOperationDescriptor.Builder description() {
+ return BuildOperationDescriptor.displayName("HTTP " + request.getMethod() + " request for cache key " + key.getHashCode());
+ }
+ });
+ }
+
private static BuildCacheException wrap(Throwable e) {
if (e instanceof Error) {
throw (Error) e;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment