Skip to content

Commit 415af6c

Browse files
committed
Revert "chore: back to original approach"
This reverts commit 0b3d0bc.
1 parent 1210a75 commit 415af6c

4 files changed

Lines changed: 30 additions & 124 deletions

File tree

google-http-client-apache-v5/src/main/java/com/google/api/client/http/apache/v5/Apache5HttpRequest.java

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -39,26 +39,8 @@ public final class Apache5HttpRequest extends LowLevelHttpRequest {
3939
Apache5HttpRequest(HttpClient httpClient, HttpUriRequestBase request) {
4040
this.httpClient = httpClient;
4141
this.request = request;
42-
this.requestConfig = prepareRequestConfig(null);
43-
}
44-
45-
Apache5HttpRequest(
46-
HttpClient httpClient, HttpUriRequestBase request, RequestConfig defaultRequestConfig) {
47-
this.httpClient = httpClient;
48-
this.request = request;
49-
this.requestConfig = prepareRequestConfig(defaultRequestConfig);
50-
}
51-
52-
private RequestConfig.Builder prepareRequestConfig(RequestConfig defaultRequestConfig) {
53-
RequestConfig.Builder config;
54-
if (defaultRequestConfig != null) {
55-
config = RequestConfig.copy(defaultRequestConfig);
56-
} else {
57-
config = RequestConfig.custom();
58-
}
5942
// disable redirects as google-http-client handles redirects
60-
config.setRedirectsEnabled(false);
61-
return config;
43+
this.requestConfig = RequestConfig.custom().setRedirectsEnabled(false);
6244
}
6345

6446
@Override
@@ -70,6 +52,7 @@ public void addHeader(String name, String value) {
7052
public void setTimeout(int connectTimeout, int readTimeout) throws IOException {
7153
requestConfig
7254
.setConnectTimeout(Timeout.of(connectTimeout, TimeUnit.MILLISECONDS))
55+
.setConnectionRequestTimeout(connectTimeout, TimeUnit.MILLISECONDS)
7356
// ResponseTimeout behaves the same as 4.x's SocketTimeout
7457
.setResponseTimeout(Timeout.of(readTimeout, TimeUnit.MILLISECONDS));
7558
}

google-http-client-apache-v5/src/main/java/com/google/api/client/http/apache/v5/Apache5HttpTransport.java

Lines changed: 3 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import org.apache.hc.client5.http.classic.methods.HttpTrace;
3434
import org.apache.hc.client5.http.classic.methods.HttpUriRequestBase;
3535
import org.apache.hc.client5.http.config.ConnectionConfig;
36-
import org.apache.hc.client5.http.config.RequestConfig;
3736
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
3837
import org.apache.hc.client5.http.impl.classic.HttpClients;
3938
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
@@ -61,9 +60,6 @@ public final class Apache5HttpTransport extends HttpTransport {
6160
/** Apache HTTP client. */
6261
private final HttpClient httpClient;
6362

64-
/** The default request config for the client. */
65-
private final RequestConfig defaultRequestConfig;
66-
6763
/** If the HTTP client uses mTLS channel. */
6864
private final boolean isMtls;
6965

@@ -85,29 +81,8 @@ public Apache5HttpTransport() {
8581
* @param httpClient Apache HTTP client to use
8682
*/
8783
public Apache5HttpTransport(HttpClient httpClient) {
88-
this(httpClient, false);
89-
}
90-
91-
/**
92-
* {@link Beta} <br>
93-
* Constructor that allows an alternative CLoseable Apache HTTP client to be used.
94-
*
95-
* <p>If you choose to provide your own Apache HttpClient implementation, be sure that
96-
*
97-
* <ul>
98-
* <li>HTTP version is set to 1.1.
99-
* <li>Retries are disabled (google-http-client handles retries).
100-
* <li>Redirects are disabled (google-http-client handles retries).
101-
* </ul>
102-
*
103-
* @param httpClient Apache HTTP client to use
104-
* @param isMtls If the HTTP client is mutual TLS
105-
*/
106-
@Beta
107-
public Apache5HttpTransport(HttpClient httpClient, boolean isMtls) {
10884
this.httpClient = httpClient;
109-
this.defaultRequestConfig = null;
110-
this.isMtls = isMtls;
85+
this.isMtls = false;
11186
}
11287

11388
/**
@@ -123,14 +98,11 @@ public Apache5HttpTransport(HttpClient httpClient, boolean isMtls) {
12398
* </ul>
12499
*
125100
* @param httpClient Apache HTTP client to use
126-
* @param defaultRequestConfig The default request config for the client
127101
* @param isMtls If the HTTP client is mutual TLS
128102
*/
129103
@Beta
130-
public Apache5HttpTransport(
131-
HttpClient httpClient, RequestConfig defaultRequestConfig, boolean isMtls) {
104+
public Apache5HttpTransport(HttpClient httpClient, boolean isMtls) {
132105
this.httpClient = httpClient;
133-
this.defaultRequestConfig = defaultRequestConfig;
134106
this.isMtls = isMtls;
135107
}
136108

@@ -174,10 +146,6 @@ public static HttpClient newDefaultHttpClient() {
174146
* properties</a>.
175147
* </ul>
176148
*
177-
* <p>NOTE: The {@code ConnectionRequestTimeout} in the {@code RequestConfig} is not honored when
178-
* set via the builder. Instead, the request config should be passed in the {@link
179-
* #Apache5HttpTransport(HttpClient, RequestConfig, boolean)} constructor.
180-
*
181149
* @return new instance of the Apache HTTP client builder
182150
*/
183151
public static HttpClientBuilder newDefaultHttpClientBuilder() {
@@ -225,7 +193,7 @@ protected Apache5HttpRequest buildRequest(String method, String url) {
225193
} else {
226194
requestBase = new HttpUriRequestBase(Preconditions.checkNotNull(method), URI.create(url));
227195
}
228-
return new Apache5HttpRequest(httpClient, requestBase, defaultRequestConfig);
196+
return new Apache5HttpRequest(httpClient, requestBase);
229197
}
230198

231199
/**

google-http-client-apache-v5/src/test/java/com/google/api/client/http/apache/v5/Apache5HttpRequestTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,19 @@
2626
import java.io.InputStream;
2727
import java.nio.charset.StandardCharsets;
2828
import java.util.Arrays;
29+
import java.util.concurrent.TimeUnit;
2930
import java.util.concurrent.atomic.AtomicInteger;
3031
import org.apache.hc.client5.http.classic.methods.HttpPost;
3132
import org.apache.hc.client5.http.classic.methods.HttpUriRequestBase;
33+
import org.apache.hc.client5.http.config.RequestConfig;
3234
import org.apache.hc.core5.http.ClassicHttpRequest;
3335
import org.apache.hc.core5.http.ClassicHttpResponse;
3436
import org.apache.hc.core5.http.ContentType;
3537
import org.apache.hc.core5.http.HttpEntity;
3638
import org.apache.hc.core5.http.HttpHost;
3739
import org.apache.hc.core5.http.io.entity.BasicHttpEntity;
3840
import org.apache.hc.core5.http.protocol.HttpContext;
41+
import org.apache.hc.core5.util.Timeout;
3942
import org.junit.Test;
4043

4144
public class Apache5HttpRequestTest {
@@ -128,4 +131,26 @@ public ClassicHttpResponse executeOpen(
128131
response.getContent().close();
129132
assertEquals(1, closedResponseCounter.get());
130133
}
134+
135+
@Test
136+
public void testSetTimeout() throws Exception {
137+
HttpUriRequestBase base = new HttpPost("http://www.google.com");
138+
Apache5HttpRequest request =
139+
new Apache5HttpRequest(
140+
new MockHttpClient() {
141+
@Override
142+
public ClassicHttpResponse executeOpen(
143+
HttpHost target, ClassicHttpRequest request, HttpContext context) {
144+
return new MockClassicHttpResponse();
145+
}
146+
},
147+
base);
148+
request.setTimeout(100, 200);
149+
request.execute();
150+
151+
RequestConfig config = base.getConfig();
152+
assertEquals(Timeout.of(100, TimeUnit.MILLISECONDS), config.getConnectTimeout());
153+
assertEquals(Timeout.of(200, TimeUnit.MILLISECONDS), config.getResponseTimeout());
154+
assertEquals(Timeout.of(100, TimeUnit.MILLISECONDS), config.getConnectionRequestTimeout());
155+
}
131156
}

google-http-client-apache-v5/src/test/java/com/google/api/client/http/apache/v5/Apache5HttpTransportTest.java

Lines changed: 0 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,14 @@
2828
import com.google.api.client.util.ByteArrayStreamingContent;
2929
import java.io.IOException;
3030
import java.nio.charset.StandardCharsets;
31-
import java.util.concurrent.CountDownLatch;
32-
import java.util.concurrent.ExecutorService;
33-
import java.util.concurrent.Executors;
34-
import java.util.concurrent.TimeUnit;
3531
import java.util.concurrent.atomic.AtomicBoolean;
3632
import java.util.concurrent.atomic.AtomicInteger;
3733
import org.apache.hc.client5.http.ConnectTimeoutException;
3834
import org.apache.hc.client5.http.HttpHostConnectException;
3935
import org.apache.hc.client5.http.classic.HttpClient;
40-
import org.apache.hc.client5.http.config.RequestConfig;
4136
import org.apache.hc.client5.http.impl.classic.HttpClients;
42-
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
4337
import org.apache.hc.core5.http.ClassicHttpRequest;
4438
import org.apache.hc.core5.http.ClassicHttpResponse;
45-
import org.apache.hc.core5.http.ConnectionRequestTimeoutException;
4639
import org.apache.hc.core5.http.ContentType;
4740
import org.apache.hc.core5.http.EntityDetails;
4841
import org.apache.hc.core5.http.Header;
@@ -215,69 +208,6 @@ public void testConnectTimeout() {
215208
}
216209
}
217210

218-
@Test(timeout = 5000)
219-
public void testConnectionRequestTimeoutFromDefaultRequestConfig() throws Exception {
220-
final CountDownLatch latch = new CountDownLatch(1);
221-
final HttpRequestHandler handler =
222-
new HttpRequestHandler() {
223-
@Override
224-
public void handle(
225-
ClassicHttpRequest request, ClassicHttpResponse response, HttpContext context)
226-
throws HttpException, IOException {
227-
try {
228-
latch.await(); // Wait for the signal to proceed
229-
} catch (InterruptedException e) {
230-
Thread.currentThread().interrupt();
231-
}
232-
response.setCode(HttpStatus.SC_OK);
233-
}
234-
};
235-
236-
try (FakeServer server = new FakeServer(handler)) {
237-
PoolingHttpClientConnectionManager connectionManager =
238-
new PoolingHttpClientConnectionManager();
239-
connectionManager.setMaxTotal(1); // Only one connection in the pool
240-
241-
RequestConfig requestConfig =
242-
RequestConfig.custom().setConnectionRequestTimeout(1, TimeUnit.SECONDS).build();
243-
244-
HttpClient httpClient =
245-
Apache5HttpTransport.newDefaultHttpClientBuilder()
246-
.setConnectionManager(connectionManager)
247-
.setDefaultRequestConfig(requestConfig)
248-
.build();
249-
250-
HttpTransport transport = new Apache5HttpTransport(httpClient, requestConfig, false);
251-
final GenericUrl url = new GenericUrl("http://localhost:" + server.getPort());
252-
253-
ExecutorService executor = Executors.newFixedThreadPool(2);
254-
255-
// First request takes the only connection
256-
executor.submit(
257-
() -> {
258-
try {
259-
transport.createRequestFactory().buildGetRequest(url).execute();
260-
} catch (IOException e) {
261-
// This request might fail if the test finishes before it completes, which is fine.
262-
}
263-
});
264-
265-
// Give the first request time to acquire the connection
266-
Thread.sleep(100);
267-
268-
// Second request should time out waiting for a connection
269-
try {
270-
transport.createRequestFactory().buildGetRequest(url).execute();
271-
fail("Should have thrown ConnectionRequestTimeoutException");
272-
} catch (ConnectionRequestTimeoutException e) {
273-
// Expected
274-
} finally {
275-
latch.countDown(); // Allow the first request to complete
276-
executor.shutdownNow();
277-
}
278-
}
279-
}
280-
281211
private static class FakeServer implements AutoCloseable {
282212
private final HttpServer server;
283213

0 commit comments

Comments
 (0)