You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2023/06/29 17:05:08 UTC
[httpcomponents-core] 01/01: HTTPCORE-754: StrictConnPool fails to correctly handle infinite request timeout
This is an automated email from the ASF dual-hosted git repository.
olegk pushed a commit to branch HTTPCORE-754
in repository https://gitbox.apache.org/repos/asf/httpcomponents-core.git
commit b7bcbe55e622fd76829c31b42f457a3e73c8bf78
Author: Oleg Kalnichevski <ol...@apache.org>
AuthorDate: Thu Jun 29 19:01:10 2023 +0200
HTTPCORE-754: StrictConnPool fails to correctly handle infinite request timeout
---
.../main/java/org/apache/hc/core5/pool/StrictConnPool.java | 6 +++++-
.../src/main/java/org/apache/hc/core5/util/Deadline.java | 12 ++++++++++--
.../apache/hc/core5/util/TestDeadlineTimeoutException.java | 7 +++++++
3 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/pool/StrictConnPool.java b/httpcore5/src/main/java/org/apache/hc/core5/pool/StrictConnPool.java
index 9801cf82e..9fcccd761 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/pool/StrictConnPool.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/pool/StrictConnPool.java
@@ -192,7 +192,11 @@ public class StrictConnPool<T, C extends ModalCloseable> implements ManagedConnP
final boolean acquiredLock;
try {
- acquiredLock = this.lock.tryLock(requestTimeout.getDuration(), requestTimeout.getTimeUnit());
+ if (Timeout.isPositive(requestTimeout)) {
+ acquiredLock = this.lock.tryLock(requestTimeout.getDuration(), requestTimeout.getTimeUnit());
+ } else {
+ acquiredLock = this.lock.tryLock();
+ }
} catch (final InterruptedException interruptedException) {
Thread.currentThread().interrupt();
future.cancel();
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/util/Deadline.java b/httpcore5/src/main/java/org/apache/hc/core5/util/Deadline.java
index 851a9a8a1..fb9861420 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/util/Deadline.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/util/Deadline.java
@@ -181,7 +181,11 @@ public class Deadline {
* @return a formatted string.
*/
public String format(final TimeUnit overdueTimeUnit) {
- return String.format("Deadline: %s, %s overdue", formatTarget(), TimeValue.of(remaining(), overdueTimeUnit));
+ if (value == MAX_VALUE.value) {
+ return "No deadline (infinite)";
+ } else {
+ return String.format("Deadline: %s, %s overdue", formatTarget(), TimeValue.of(remaining(), overdueTimeUnit));
+ }
}
/**
@@ -190,7 +194,11 @@ public class Deadline {
* @return a formatted string in the format {@value #DATE_FORMAT}.
*/
public String formatTarget() {
- return DATE_TIME_FORMATTER.format(Instant.ofEpochMilli(value).atOffset(ZoneOffset.UTC));
+ if (value == MAX_VALUE.value) {
+ return "(infinite)";
+ } else {
+ return DATE_TIME_FORMATTER.format(Instant.ofEpochMilli(value).atOffset(ZoneOffset.UTC));
+ }
}
public Deadline freeze() {
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/util/TestDeadlineTimeoutException.java b/httpcore5/src/test/java/org/apache/hc/core5/util/TestDeadlineTimeoutException.java
index 83f949ea2..401098b6a 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/util/TestDeadlineTimeoutException.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/util/TestDeadlineTimeoutException.java
@@ -42,4 +42,11 @@ public class TestDeadlineTimeoutException {
DeadlineTimeoutException.from(deadline).getMessage());
}
+ @Test
+ public void testInfiniteDeadlineMessage() {
+ final Deadline deadline = Deadline.calculate(Timeout.ZERO_MILLISECONDS);
+ Assertions.assertEquals("No deadline (infinite)",
+ DeadlineTimeoutException.from(deadline).getMessage());
+ }
+
}