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 2017/04/03 18:23:05 UTC

svn commit: r1790031 [2/2] - in /httpcomponents/httpcore/trunk: httpcore5-h2/src/examples/org/apache/hc/core5/http/examples/ httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/ httpcore5-testing/src/main/java/org/apache/hc/core5/te...

Modified: httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/AsyncRequestExecutionExample.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/AsyncRequestExecutionExample.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/AsyncRequestExecutionExample.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/AsyncRequestExecutionExample.java Mon Apr  3 18:23:04 2017
@@ -47,6 +47,7 @@ import org.apache.hc.core5.http.nio.Basi
 import org.apache.hc.core5.http.nio.entity.StringAsyncEntityConsumer;
 import org.apache.hc.core5.io.ShutdownType;
 import org.apache.hc.core5.reactor.IOReactorConfig;
+import org.apache.hc.core5.util.TimeValue;
 
 /**
  * Example of asynchronous HTTP/1.1 request execution.
@@ -102,7 +103,7 @@ public class AsyncRequestExecutionExampl
 
         final CountDownLatch latch = new CountDownLatch(requestUris.length);
         for (final String requestUri: requestUris) {
-            final Future<AsyncClientEndpoint> future = requester.connect(target, 5, TimeUnit.SECONDS);
+            final Future<AsyncClientEndpoint> future = requester.connect(target, TimeValue.ofSeconds(5));
             final AsyncClientEndpoint clientEndpoint = future.get();
             clientEndpoint.executeAndRelease(
                     new BasicRequestProducer("GET", target, requestUri),

Modified: httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/AsyncReverseProxyExample.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/AsyncReverseProxyExample.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/AsyncReverseProxyExample.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/AsyncReverseProxyExample.java Mon Apr  3 18:23:04 2017
@@ -79,6 +79,7 @@ import org.apache.hc.core5.pool.ConnPool
 import org.apache.hc.core5.pool.ConnPoolStats;
 import org.apache.hc.core5.pool.PoolStats;
 import org.apache.hc.core5.reactor.IOReactorConfig;
+import org.apache.hc.core5.util.TimeValue;
 
 /**
  * Example of asynchronous embedded  HTTP/1.1 reverse proxy with full content streaming.
@@ -222,7 +223,7 @@ public class AsyncReverseProxyExample {
         server.listen(new InetSocketAddress(port));
         System.out.println("Listening on port " + port);
 
-        server.awaitShutdown(Integer.MAX_VALUE, TimeUnit.DAYS);
+        server.awaitShutdown(TimeValue.MAX_VALUE);
     }
 
     private static class ProxyBuffer extends ExpandableBuffer {
@@ -313,7 +314,7 @@ public class AsyncReverseProxyExample {
 
             System.out.println("[proxy->origin] " + exchangeState.id + " request connection to " + targetHost);
 
-            requester.connect(targetHost, 30, TimeUnit.SECONDS, new FutureCallback<AsyncClientEndpoint>() {
+            requester.connect(targetHost, TimeValue.ofSeconds(30), new FutureCallback<AsyncClientEndpoint>() {
 
                 @Override
                 public void completed(final AsyncClientEndpoint clientEndpoint) {

Modified: httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/ClassicFileServerExample.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/ClassicFileServerExample.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/ClassicFileServerExample.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/ClassicFileServerExample.java Mon Apr  3 18:23:04 2017
@@ -59,6 +59,7 @@ import org.apache.hc.core5.http.protocol
 import org.apache.hc.core5.http.protocol.HttpCoreContext;
 import org.apache.hc.core5.io.ShutdownType;
 import org.apache.hc.core5.ssl.SSLContexts;
+import org.apache.hc.core5.util.TimeValue;
 
 /**
  * Example of embedded HTTP/1.1 file server using classic I/O.
@@ -125,7 +126,7 @@ public class ClassicFileServerExample {
         });
         System.out.println("Listening on port " + port);
 
-        server.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
+        server.awaitTermination(TimeValue.MAX_VALUE);
 
     }
 

Modified: httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/ClassicReverseProxyExample.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/ClassicReverseProxyExample.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/ClassicReverseProxyExample.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/ClassicReverseProxyExample.java Mon Apr  3 18:23:04 2017
@@ -35,7 +35,6 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Locale;
 import java.util.Set;
-import java.util.concurrent.TimeUnit;
 
 import org.apache.hc.core5.http.ClassicHttpRequest;
 import org.apache.hc.core5.http.ClassicHttpResponse;
@@ -64,6 +63,7 @@ import org.apache.hc.core5.io.ShutdownTy
 import org.apache.hc.core5.pool.ConnPoolListener;
 import org.apache.hc.core5.pool.ConnPoolStats;
 import org.apache.hc.core5.pool.PoolStats;
+import org.apache.hc.core5.util.TimeValue;
 
 /**
  * Example of embedded HTTP/1.1 reverse proxy using classic I/O.
@@ -179,7 +179,7 @@ public class ClassicReverseProxyExample
         });
 
         System.out.println("Listening on port " + port);
-        server.awaitTermination(Integer.MAX_VALUE, TimeUnit.DAYS);
+        server.awaitTermination(TimeValue.MAX_VALUE);
     }
 
     private final static Set<String> HOP_BY_HOP = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/config/SocketConfig.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/config/SocketConfig.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/config/SocketConfig.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/config/SocketConfig.java Mon Apr  3 18:23:04 2017
@@ -272,12 +272,12 @@ public class SocketConfig {
          * @since 5.0
          */
         public Builder setConnectTimeout(final int connectTimeout, final TimeUnit timeUnit) {
-            this.connectTimeout = new TimeValue(connectTimeout, timeUnit);
+            this.connectTimeout = TimeValue.of(connectTimeout, timeUnit);
             return this;
         }
 
         public Builder setSoTimeout(final int soTimeout, final TimeUnit timeUnit) {
-            this.soTimeout = new TimeValue(soTimeout, timeUnit);
+            this.soTimeout = TimeValue.of(soTimeout, timeUnit);
             return this;
         }
 
@@ -292,7 +292,7 @@ public class SocketConfig {
         }
 
         public Builder setSoLinger(final int soLinger, final TimeUnit timeUnit) {
-            this.soLinger = new TimeValue(soLinger, timeUnit);
+            this.soLinger = TimeValue.of(soLinger, timeUnit);
             return this;
         }
 

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncRequester.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncRequester.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncRequester.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncRequester.java Mon Apr  3 18:23:04 2017
@@ -29,7 +29,6 @@ package org.apache.hc.core5.http.impl.bo
 
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
-import java.util.concurrent.TimeUnit;
 
 import org.apache.hc.core5.function.Callback;
 import org.apache.hc.core5.http.ExceptionListener;
@@ -44,6 +43,7 @@ import org.apache.hc.core5.reactor.IOSes
 import org.apache.hc.core5.reactor.SessionRequest;
 import org.apache.hc.core5.reactor.SessionRequestCallback;
 import org.apache.hc.core5.util.Args;
+import org.apache.hc.core5.util.TimeValue;
 
 public class AsyncRequester extends IOReactorExecutor<DefaultConnectingIOReactor> implements ConnectionInitiator {
 
@@ -74,13 +74,12 @@ public class AsyncRequester extends IORe
 
     protected SessionRequest requestSession(
             final HttpHost host,
-            final long timeout,
-            final TimeUnit timeUnit,
+            final TimeValue timeout,
             final SessionRequestCallback callback) {
         Args.notNull(host, "Host");
-        Args.notNull(timeUnit, "Time unit");
+        Args.notNull(timeout, "Timeout");
         final SessionRequest  sessionRequest = reactor().connect(host, toSocketAddress(host), null, null, callback);
-        sessionRequest.setConnectTimeout((int) timeUnit.toMillis(timeout));
+        sessionRequest.setConnectTimeout(timeout.toMillisIntBound());
         return sessionRequest;
     }
 

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncRequesterBootstrap.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncRequesterBootstrap.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncRequesterBootstrap.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncRequesterBootstrap.java Mon Apr  3 18:23:04 2017
@@ -26,8 +26,6 @@
  */
 package org.apache.hc.core5.http.impl.bootstrap;
 
-import java.util.concurrent.TimeUnit;
-
 import org.apache.hc.core5.http.ConnectionReuseStrategy;
 import org.apache.hc.core5.http.ExceptionListener;
 import org.apache.hc.core5.http.HttpHost;
@@ -49,6 +47,7 @@ import org.apache.hc.core5.pool.StrictCo
 import org.apache.hc.core5.reactor.IOReactorConfig;
 import org.apache.hc.core5.reactor.IOReactorException;
 import org.apache.hc.core5.reactor.IOSession;
+import org.apache.hc.core5.util.TimeValue;
 
 /**
  * @since 5.0
@@ -61,8 +60,7 @@ public class AsyncRequesterBootstrap {
     private ConnectionReuseStrategy connStrategy;
     private int defaultMaxPerRoute;
     private int maxTotal;
-    private long timeToLive;
-    private TimeUnit timeUnit;
+    private TimeValue timeToLive;
     private ConnPoolPolicy connPoolPolicy;
     private TlsStrategy tlsStrategy;
     private ExceptionListener exceptionListener;
@@ -119,9 +117,8 @@ public class AsyncRequesterBootstrap {
         return this;
     }
 
-    public final AsyncRequesterBootstrap setTimeToLive(final long timeToLive, final TimeUnit timeUnit) {
+    public final AsyncRequesterBootstrap setTimeToLive(final TimeValue timeToLive) {
         this.timeToLive = timeToLive;
-        this.timeUnit = timeUnit;
         return this;
     }
 
@@ -177,7 +174,7 @@ public class AsyncRequesterBootstrap {
         final StrictConnPool<HttpHost, IOSession> connPool = new StrictConnPool<>(
                 defaultMaxPerRoute > 0 ? defaultMaxPerRoute : 20,
                 maxTotal > 0 ? maxTotal : 50,
-                timeToLive, timeUnit != null ? timeUnit : TimeUnit.MILLISECONDS,
+                timeToLive,
                 connPoolPolicy,
                 connPoolListener);
         final ClientHttp1IOEventHandlerFactory ioEventHandlerFactory = new ClientHttp1IOEventHandlerFactory(

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncRequester.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncRequester.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncRequester.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncRequester.java Mon Apr  3 18:23:04 2017
@@ -30,7 +30,6 @@ package org.apache.hc.core5.http.impl.bo
 import java.io.IOException;
 import java.net.SocketTimeoutException;
 import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
 
 import org.apache.hc.core5.concurrent.ComplexFuture;
 import org.apache.hc.core5.concurrent.FutureCallback;
@@ -53,6 +52,7 @@ import org.apache.hc.core5.reactor.Sessi
 import org.apache.hc.core5.reactor.SessionRequestCallback;
 import org.apache.hc.core5.reactor.ssl.TransportSecurityLayer;
 import org.apache.hc.core5.util.Args;
+import org.apache.hc.core5.util.TimeValue;
 
 /**
  * @since 5.0
@@ -86,11 +86,10 @@ public class HttpAsyncRequester extends
 
     public Future<AsyncClientEndpoint> connect(
             final HttpHost host,
-            final long timeout,
-            final TimeUnit timeUnit,
+            final TimeValue timeout,
             final FutureCallback<AsyncClientEndpoint> callback) {
         Args.notNull(host, "Host");
-        Args.notNull(timeUnit, "Time unit");
+        Args.notNull(timeout, "Timeout");
         final ComplexFuture<AsyncClientEndpoint> resultFuture = new ComplexFuture<>(callback);
         final Future<PoolEntry<HttpHost, IOSession>> leaseFuture = connPool.lease(
                 host, null, new FutureCallback<PoolEntry<HttpHost, IOSession>>() {
@@ -105,9 +104,7 @@ public class HttpAsyncRequester extends
                 if (poolEntry.hasConnection()) {
                     resultFuture.completed(new InternalAsyncClientEndpoint(poolEntryHolder));
                 } else {
-                    final SessionRequest sessionRequest = requestSession(
-                            host, timeout, timeUnit,
-                            new SessionRequestCallback() {
+                    final SessionRequest sessionRequest = requestSession(host, timeout, new SessionRequestCallback() {
 
                         @Override
                         public void completed(final SessionRequest request) {
@@ -170,11 +167,8 @@ public class HttpAsyncRequester extends
         return resultFuture;
     }
 
-    public Future<AsyncClientEndpoint> connect(
-            final HttpHost host,
-            final long timeout,
-            final TimeUnit timeUnit) throws InterruptedException {
-        return connect(host, timeout, timeUnit, null);
+    public Future<AsyncClientEndpoint> connect(final HttpHost host, final TimeValue timeout) throws InterruptedException {
+        return connect(host, timeout, null);
     }
 
     private static class InternalAsyncClientEndpoint extends AsyncClientEndpoint {

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpServer.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpServer.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpServer.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpServer.java Mon Apr  3 18:23:04 2017
@@ -46,6 +46,8 @@ import org.apache.hc.core5.http.io.HttpC
 import org.apache.hc.core5.http.io.HttpServerConnection;
 import org.apache.hc.core5.io.GracefullyCloseable;
 import org.apache.hc.core5.io.ShutdownType;
+import org.apache.hc.core5.util.Args;
+import org.apache.hc.core5.util.TimeValue;
 
 /**
  * @since 4.4
@@ -157,8 +159,9 @@ public class HttpServer implements Grace
         stop();
     }
 
-    public void awaitTermination(final long timeout, final TimeUnit timeUnit) throws InterruptedException {
-        this.workerExecutorService.awaitTermination(timeout, timeUnit);
+    public void awaitTermination(final TimeValue waitTime) throws InterruptedException {
+        Args.notNull(waitTime, "Wait time");
+        this.workerExecutorService.awaitTermination(waitTime.getDuration(), waitTime.getTimeUnit());
     }
 
     @Override
@@ -166,7 +169,7 @@ public class HttpServer implements Grace
         initiateShutdown();
         if (shutdownType == ShutdownType.GRACEFUL) {
             try {
-                awaitTermination(2, TimeUnit.SECONDS);
+                awaitTermination(TimeValue.ofSeconds(5));
             } catch (final InterruptedException ex) {
                 Thread.currentThread().interrupt();
             }

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/IOReactorExecutor.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/IOReactorExecutor.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/IOReactorExecutor.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/IOReactorExecutor.java Mon Apr  3 18:23:04 2017
@@ -31,7 +31,6 @@ import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.hc.core5.http.ExceptionListener;
@@ -40,6 +39,7 @@ import org.apache.hc.core5.io.ShutdownTy
 import org.apache.hc.core5.reactor.AbstractMultiworkerIOReactor;
 import org.apache.hc.core5.reactor.ExceptionEvent;
 import org.apache.hc.core5.reactor.IOReactorStatus;
+import org.apache.hc.core5.util.TimeValue;
 
 abstract class IOReactorExecutor<T extends AbstractMultiworkerIOReactor> implements GracefullyCloseable {
 
@@ -91,8 +91,8 @@ abstract class IOReactorExecutor<T exten
         return ioReactor.getAuditLog();
     }
 
-    public void awaitShutdown(final long deadline, final TimeUnit timeUnit) throws InterruptedException {
-        ioReactor.awaitShutdown(deadline, timeUnit);
+    public void awaitShutdown(final TimeValue waitTime) throws InterruptedException {
+        ioReactor.awaitShutdown(waitTime);
     }
 
     public void initiateShutdown() {

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/RequesterBootstrap.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/RequesterBootstrap.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/RequesterBootstrap.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/RequesterBootstrap.java Mon Apr  3 18:23:04 2017
@@ -26,8 +26,6 @@
  */
 package org.apache.hc.core5.http.impl.bootstrap;
 
-import java.util.concurrent.TimeUnit;
-
 import javax.net.ssl.SSLSocketFactory;
 
 import org.apache.hc.core5.http.ConnectionReuseStrategy;
@@ -43,6 +41,7 @@ import org.apache.hc.core5.http.protocol
 import org.apache.hc.core5.pool.ConnPoolListener;
 import org.apache.hc.core5.pool.ConnPoolPolicy;
 import org.apache.hc.core5.pool.StrictConnPool;
+import org.apache.hc.core5.util.TimeValue;
 
 /**
  * @since 5.0
@@ -55,8 +54,7 @@ public class RequesterBootstrap {
     private SSLSocketFactory sslSocketFactory;
     private int defaultMaxPerRoute;
     private int maxTotal;
-    private long timeToLive;
-    private TimeUnit timeUnit;
+    private TimeValue timeToLive;
     private ConnPoolPolicy connPoolPolicy;
     private Http1StreamListener streamListener;
     private ConnPoolListener<HttpHost> connPoolListener;
@@ -104,9 +102,8 @@ public class RequesterBootstrap {
         return this;
     }
 
-    public final RequesterBootstrap setTimeToLive(final long timeToLive, final TimeUnit timeUnit) {
+    public final RequesterBootstrap setTimeToLive(final TimeValue timeToLive) {
         this.timeToLive = timeToLive;
-        this.timeUnit = timeUnit;
         return this;
     }
 
@@ -133,7 +130,7 @@ public class RequesterBootstrap {
         final StrictConnPool<HttpHost, HttpClientConnection> connPool = new StrictConnPool<>(
                 defaultMaxPerRoute > 0 ? defaultMaxPerRoute : 20,
                 maxTotal > 0 ? maxTotal : 50,
-                timeToLive, timeUnit != null ? timeUnit : TimeUnit.MILLISECONDS,
+                timeToLive,
                 connPoolPolicy,
                 connPoolListener);
         return new HttpRequester(

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/ConnPoolControl.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/ConnPoolControl.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/ConnPoolControl.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/ConnPoolControl.java Mon Apr  3 18:23:04 2017
@@ -26,7 +26,7 @@
  */
 package org.apache.hc.core5.pool;
 
-import java.util.concurrent.TimeUnit;
+import org.apache.hc.core5.util.TimeValue;
 
 /**
  * Interface to control runtime properties of a {@link ConnPool} such as
@@ -51,7 +51,7 @@ public interface ConnPoolControl<T> exte
 
     int getMaxPerRoute(final T route);
 
-    void closeIdle(long idletime, TimeUnit tunit);
+    void closeIdle(TimeValue idleTime);
 
     void closeExpired();
 

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/LeaseRequest.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/LeaseRequest.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/LeaseRequest.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/LeaseRequest.java Mon Apr  3 18:23:04 2017
@@ -32,6 +32,7 @@ import org.apache.hc.core5.annotation.Co
 import org.apache.hc.core5.annotation.ThreadingBehavior;
 import org.apache.hc.core5.concurrent.BasicFuture;
 import org.apache.hc.core5.io.GracefullyCloseable;
+import org.apache.hc.core5.util.TimeValue;
 
 @Contract(threading = ThreadingBehavior.SAFE_CONDITIONAL)
 class LeaseRequest<T, C extends GracefullyCloseable> {
@@ -44,24 +45,32 @@ class LeaseRequest<T, C extends Graceful
     private volatile PoolEntry<T, C> result;
     private volatile Exception ex;
 
+    static long calculateDeadline(final long currentTimeMillis, final TimeValue timeValue) {
+        final long time = timeValue.getDuration() > 0 ? currentTimeMillis + timeValue.toMillis() : Long.MAX_VALUE;
+        if (time < 0 && timeValue.getDuration() > 0) {
+            return Long.MAX_VALUE;
+        } else {
+            return time;
+        }
+    }
+
     /**
      * Constructor
      *
      * @param route route
      * @param state state
-     * @param leaseTimeout timeout to wait in a request queue until kicked off
+     * @param requestTimeout timeout to wait in a request queue until kicked off
      * @param future future callback
      */
     public LeaseRequest(
             final T route,
             final Object state,
-            final long leaseTimeout,
+            final TimeValue requestTimeout,
             final BasicFuture<PoolEntry<T, C>> future) {
         super();
         this.route = route;
         this.state = state;
-        this.deadline = leaseTimeout > 0 ? System.currentTimeMillis() + leaseTimeout :
-                Long.MAX_VALUE;
+        this.deadline = calculateDeadline(System.currentTimeMillis(), requestTimeout);
         this.future = future;
         this.completed = new AtomicBoolean(false);
     }

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/PoolEntry.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/PoolEntry.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/PoolEntry.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/PoolEntry.java Mon Apr  3 18:23:04 2017
@@ -28,12 +28,12 @@ package org.apache.hc.core5.pool;
 
 import static java.lang.System.currentTimeMillis;
 
-import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.hc.core5.io.GracefullyCloseable;
 import org.apache.hc.core5.io.ShutdownType;
 import org.apache.hc.core5.util.Args;
+import org.apache.hc.core5.util.TimeValue;
 
 /**
  * Pool entry containing a pool connection object along with its route.
@@ -50,7 +50,7 @@ import org.apache.hc.core5.util.Args;
 public final class PoolEntry<T, C extends GracefullyCloseable> {
 
     private final T route;
-    private final long timeToLive;
+    private final TimeValue timeToLive;
     private final AtomicReference<C> connRef;
 
     private volatile Object state;
@@ -65,17 +65,16 @@ public final class PoolEntry<T, C extend
      * @param route route to the opposite endpoint.
      * @param timeToLive maximum time to live. May be zero if the connection
      *   does not have an expiry deadline.
-     * @param timeUnit time unit.
      */
-    public PoolEntry(final T route, final long timeToLive, final TimeUnit timeUnit) {
+    public PoolEntry(final T route, final TimeValue timeToLive) {
         super();
         this.route = Args.notNull(route, "Route");
+        this.timeToLive = timeToLive != null ? timeToLive : TimeValue.NEG_ONE_MILLIS;
         this.connRef = new AtomicReference<>(null);
-        this.timeToLive = timeToLive > 0 ? (timeUnit != null ? timeUnit : TimeUnit.MILLISECONDS).toMillis(timeToLive) : 0;
     }
 
     public PoolEntry(final T route) {
-        this(route, 0, TimeUnit.MILLISECONDS);
+        this(route, null);
     }
 
     public T getRoute() {
@@ -120,13 +119,7 @@ public final class PoolEntry<T, C extend
         if (this.connRef.compareAndSet(null, conn)) {
             this.created = currentTimeMillis();
             this.updated = this.created;
-            if (this.timeToLive > 0) {
-                final long deadline = System.currentTimeMillis() + this.timeToLive;
-                // If the above overflows then default to Long.MAX_VALUE
-                this.validityDeadline = deadline > 0 ? deadline : Long.MAX_VALUE;
-            } else {
-                this.validityDeadline = Long.MAX_VALUE;
-            }
+            this.validityDeadline = LeaseRequest.calculateDeadline(this.created, this.timeToLive);
             this.expiry = this.validityDeadline;
             this.state = null;
         } else {
@@ -152,10 +145,10 @@ public final class PoolEntry<T, C extend
     /**
      * @since 5.0
      */
-    public void updateExpiry(final long keepAlive, final TimeUnit timeUnit) {
-        Args.notNull(timeUnit, "Time unit");
+    public void updateExpiry(final TimeValue expiryTime) {
+        Args.notNull(expiryTime, "Expiry time");
         final long currentTime = System.currentTimeMillis();
-        final long newExpiry = keepAlive > 0 ? currentTime + timeUnit.toMillis(keepAlive) : Long.MAX_VALUE;
+        final long newExpiry = LeaseRequest.calculateDeadline(currentTime, expiryTime);
         this.expiry = Math.min(newExpiry, getValidityDeadline());
         this.updated = currentTime;
     }

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/RoutePool.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/RoutePool.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/RoutePool.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/RoutePool.java Mon Apr  3 18:23:04 2017
@@ -30,12 +30,12 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.Set;
-import java.util.concurrent.TimeUnit;
 
 import org.apache.hc.core5.io.GracefullyCloseable;
 import org.apache.hc.core5.io.ShutdownType;
 import org.apache.hc.core5.util.Args;
 import org.apache.hc.core5.util.Asserts;
+import org.apache.hc.core5.util.TimeValue;
 
 final class RoutePool<T, C extends GracefullyCloseable> {
 
@@ -116,8 +116,8 @@ final class RoutePool<T, C extends Grace
         }
     }
 
-    public PoolEntry<T, C> createEntry(final long timeToLive, final TimeUnit timeUnit) {
-        final PoolEntry<T, C> entry = new PoolEntry<>(this.route, timeToLive, timeUnit);
+    public PoolEntry<T, C> createEntry(final TimeValue timeToLive) {
+        final PoolEntry<T, C> entry = new PoolEntry<>(this.route, timeToLive);
         this.leased.add(entry);
         return entry;
     }

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/StrictConnPool.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/StrictConnPool.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/StrictConnPool.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/StrictConnPool.java Mon Apr  3 18:23:04 2017
@@ -35,7 +35,6 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.locks.Lock;
@@ -51,6 +50,7 @@ import org.apache.hc.core5.io.ShutdownTy
 import org.apache.hc.core5.util.Args;
 import org.apache.hc.core5.util.Asserts;
 import org.apache.hc.core5.util.LangUtils;
+import org.apache.hc.core5.util.TimeValue;
 
 /**
  * Connection pool with strict max connection limit guarantees.
@@ -63,8 +63,7 @@ import org.apache.hc.core5.util.LangUtil
 @Contract(threading = ThreadingBehavior.SAFE_CONDITIONAL)
 public class StrictConnPool<T, C extends GracefullyCloseable> implements ControlledConnPool<T, C> {
 
-    private final long timeToLive;
-    private final TimeUnit timeUnit;
+    private final TimeValue timeToLive;
     private final ConnPoolListener<T> connPoolListener;
     private final ConnPoolPolicy policy;
     private final Map<T, RoutePool<T, C>> routeToPool;
@@ -85,15 +84,13 @@ public class StrictConnPool<T, C extends
     public StrictConnPool(
             final int defaultMaxPerRoute,
             final int maxTotal,
-            final long timeToLive,
-            final TimeUnit timeUnit,
+            final TimeValue timeToLive,
             final ConnPoolPolicy policy,
             final ConnPoolListener<T> connPoolListener) {
         super();
         Args.positive(defaultMaxPerRoute, "Max per route value");
         Args.positive(maxTotal, "Max total value");
-        this.timeToLive = timeToLive;
-        this.timeUnit = timeUnit != null ? timeUnit : TimeUnit.MILLISECONDS;
+        this.timeToLive = timeToLive != null ? timeToLive : TimeValue.NEG_ONE_MILLIS;
         this.connPoolListener = connPoolListener;
         this.policy = policy != null ? policy : ConnPoolPolicy.LIFO;
         this.routeToPool = new HashMap<>();
@@ -109,7 +106,7 @@ public class StrictConnPool<T, C extends
     }
 
     public StrictConnPool(final int defaultMaxPerRoute, final int maxTotal) {
-        this(defaultMaxPerRoute, maxTotal, 0, TimeUnit.MILLISECONDS, ConnPoolPolicy.LIFO, null);
+        this(defaultMaxPerRoute, maxTotal, TimeValue.NEG_ONE_MILLIS, ConnPoolPolicy.LIFO, null);
     }
 
     public boolean isShutdown() {
@@ -151,15 +148,15 @@ public class StrictConnPool<T, C extends
 
     public Future<PoolEntry<T, C>> lease(
             final T route, final Object state,
-            final long leaseTimeout, final TimeUnit tunit,
+            final TimeValue requestTimeout,
             final FutureCallback<PoolEntry<T, C>> callback) {
         Args.notNull(route, "Route");
-        Args.notNull(tunit, "Time unit");
+        Args.notNull(requestTimeout, "Request timeout");
         Asserts.check(!this.isShutDown.get(), "Connection pool shut down");
         final BasicFuture<PoolEntry<T, C>> future = new BasicFuture<>(callback);
         this.lock.lock();
         try {
-            final LeaseRequest<T, C> request = new LeaseRequest<>(route, state, leaseTimeout, future);
+            final LeaseRequest<T, C> request = new LeaseRequest<>(route, state, requestTimeout, future);
             final boolean completed = processPendingRequest(request);
             if (!request.isDone() && !completed) {
                 this.leasingRequests.add(request);
@@ -176,11 +173,11 @@ public class StrictConnPool<T, C extends
 
     @Override
     public Future<PoolEntry<T, C>> lease(final T route, final Object state, final FutureCallback<PoolEntry<T, C>> callback) {
-        return lease(route, state, -1, TimeUnit.MICROSECONDS, callback);
+        return lease(route, state, TimeValue.NEG_ONE_MILLIS, callback);
     }
 
     public Future<PoolEntry<T, C>> lease(final T route, final Object state) {
-        return lease(route, state, -1, TimeUnit.MICROSECONDS, null);
+        return lease(route, state, TimeValue.NEG_ONE_MILLIS, null);
     }
 
     @Override
@@ -333,7 +330,7 @@ public class StrictConnPool<T, C extends
                 }
             }
 
-            entry = pool.createEntry(this.timeToLive, this.timeUnit);
+            entry = pool.createEntry(this.timeToLive);
             this.leased.add(entry);
             request.completed(entry);
             if (this.connPoolListener != null) {
@@ -572,13 +569,9 @@ public class StrictConnPool<T, C extends
     }
 
     @Override
-    public void closeIdle(final long idletime, final TimeUnit tunit) {
-        Args.notNull(tunit, "Time unit");
-        long time = tunit.toMillis(idletime);
-        if (time < 0) {
-            time = 0;
-        }
-        final long deadline = System.currentTimeMillis() - time;
+    public void closeIdle(final TimeValue idleTime) {
+        Args.notNull(idleTime, "Idle time");
+        final long deadline = System.currentTimeMillis() - (idleTime.getDuration() > 0 ? idleTime.toMillis() : 0);
         enumAvailable(new Callback<PoolEntry<T, C>>() {
 
             @Override

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/AbstractMultiworkerIOReactor.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/AbstractMultiworkerIOReactor.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/AbstractMultiworkerIOReactor.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/AbstractMultiworkerIOReactor.java Mon Apr  3 18:23:04 2017
@@ -48,6 +48,7 @@ import java.util.concurrent.atomic.Atomi
 import org.apache.hc.core5.function.Callback;
 import org.apache.hc.core5.io.ShutdownType;
 import org.apache.hc.core5.util.Args;
+import org.apache.hc.core5.util.TimeValue;
 
 /**
  * Generic implementation of {@link IOReactor} that can run multiple
@@ -405,14 +406,13 @@ public abstract class AbstractMultiworke
     }
 
     @Override
-    public void awaitShutdown(final long timeout, final TimeUnit timeUnit) throws InterruptedException {
-        Args.notNull(timeUnit, "Time unit");
+    public void awaitShutdown(final TimeValue waitTime) throws InterruptedException {
+        Args.notNull(waitTime, "Wait time");
         if (this.status.get() == IOReactorStatus.INACTIVE) {
             return;
         }
-        final long timeoutMs = timeUnit.toMillis(timeout);
-        final long deadline = System.currentTimeMillis() + timeoutMs;
-        long remaining = timeoutMs;
+        final long deadline = System.currentTimeMillis() + waitTime.toMillis();
+        long remaining = waitTime.toMillis();
         synchronized (this.shutdownMutex) {
             while (this.status.get().compareTo(IOReactorStatus.SHUT_DOWN) < 0) {
                 this.shutdownMutex.wait(remaining);
@@ -426,7 +426,7 @@ public abstract class AbstractMultiworke
             final IOReactorImpl dispatcher = this.dispatchers[i];
             if (dispatcher != null) {
                 if (dispatcher.getStatus().compareTo(IOReactorStatus.SHUT_DOWN) < 0) {
-                    dispatcher.awaitShutdown(remaining, TimeUnit.MILLISECONDS);
+                    dispatcher.awaitShutdown(TimeValue.of(remaining, TimeUnit.MILLISECONDS));
                     remaining = deadline - System.currentTimeMillis();
                     if (remaining <= 0) {
                         return;
@@ -467,7 +467,7 @@ public abstract class AbstractMultiworke
         initiateShutdown();
         try {
             if (shutdownType == ShutdownType.GRACEFUL) {
-                awaitShutdown(2, TimeUnit.SECONDS);
+                awaitShutdown(TimeValue.ofSeconds(5));
             }
             forceShutdown();
         } catch (final InterruptedException e) {

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOReactor.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOReactor.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOReactor.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOReactor.java Mon Apr  3 18:23:04 2017
@@ -28,9 +28,9 @@
 package org.apache.hc.core5.reactor;
 
 import java.io.IOException;
-import java.util.concurrent.TimeUnit;
 
 import org.apache.hc.core5.io.GracefullyCloseable;
+import org.apache.hc.core5.util.TimeValue;
 
 /**
  * HttpCore NIO is based on the Reactor pattern as described by Doug Lea.
@@ -79,11 +79,10 @@ public interface IOReactor extends Grace
      * Blocks for the given period of time in milliseconds awaiting
      * the completion of the reactor shutdown.
      *
-     * @param timeout wait timeout in units.
-     * @param timeUnit time unit
+     * @param waitTime wait time.
      *
      * @since 5.0
      */
-    void awaitShutdown(long timeout, TimeUnit timeUnit) throws InterruptedException;
+    void awaitShutdown(TimeValue waitTime) throws InterruptedException;
 
 }

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOReactorConfig.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOReactorConfig.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOReactorConfig.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOReactorConfig.java Mon Apr  3 18:23:04 2017
@@ -265,7 +265,7 @@ public final class IOReactorConfig {
         }
 
         public Builder setSoTimeout(final int soTimeout, final TimeUnit timeUnit) {
-            this.soTimeout = new TimeValue(soTimeout, timeUnit);;
+            this.soTimeout = TimeValue.of(soTimeout, timeUnit);;
             return this;
         }
 
@@ -280,7 +280,7 @@ public final class IOReactorConfig {
         }
 
         public Builder setSoLinger(final int soLinger, final TimeUnit timeUnit) {
-            this.soLinger = new TimeValue(soLinger, timeUnit);;
+            this.soLinger = TimeValue.of(soLinger, timeUnit);;
             return this;
         }
 
@@ -300,7 +300,7 @@ public final class IOReactorConfig {
         }
 
         public Builder setConnectTimeout(final int connectTimeout, final TimeUnit timeUnit) {
-            this.connectTimeout = new TimeValue(connectTimeout, timeUnit);
+            this.connectTimeout = TimeValue.of(connectTimeout, timeUnit);
             return this;
         }
 

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOReactorImpl.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOReactorImpl.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOReactorImpl.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOReactorImpl.java Mon Apr  3 18:23:04 2017
@@ -39,7 +39,6 @@ import java.nio.channels.SocketChannel;
 import java.util.Queue;
 import java.util.Set;
 import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
 
@@ -47,6 +46,7 @@ import org.apache.hc.core5.concurrent.Ca
 import org.apache.hc.core5.function.Callback;
 import org.apache.hc.core5.io.ShutdownType;
 import org.apache.hc.core5.util.Args;
+import org.apache.hc.core5.util.TimeValue;
 
 /**
  * {@link IOReactor} implementation.
@@ -356,11 +356,10 @@ class IOReactorImpl implements IOReactor
     }
 
     @Override
-    public void awaitShutdown(final long timeout, final TimeUnit timeUnit) throws InterruptedException {
-        Args.notNull(timeUnit, "Time unit");
-        final long timeoutMs = timeUnit.toMillis(timeout);
-        final long deadline = System.currentTimeMillis() + timeoutMs;
-        long remaining = timeoutMs;
+    public void awaitShutdown(final TimeValue waitTime) throws InterruptedException {
+        Args.notNull(waitTime, "Wait time");
+        final long deadline = System.currentTimeMillis() + waitTime.toMillis();
+        long remaining = waitTime.toMillis();
         synchronized (this.shutdownMutex) {
             while (this.status.get().compareTo(IOReactorStatus.SHUT_DOWN) < 0) {
                 this.shutdownMutex.wait(remaining);
@@ -389,7 +388,7 @@ class IOReactorImpl implements IOReactor
         initiateShutdown();
         try {
             if (shutdownType == ShutdownType.GRACEFUL) {
-                awaitShutdown(2, TimeUnit.SECONDS);
+                awaitShutdown(TimeValue.ofSeconds(5));
             }
             forceShutdown();
         } catch (final InterruptedException e) {

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/util/TimeValue.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/util/TimeValue.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/util/TimeValue.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/util/TimeValue.java Mon Apr  3 18:23:04 2017
@@ -40,6 +40,8 @@ import org.apache.hc.core5.annotation.Th
 @Contract(threading = ThreadingBehavior.IMMUTABLE)
 public class TimeValue {
 
+    public static final TimeValue MAX_VALUE = new TimeValue(Long.MAX_VALUE, TimeUnit.DAYS);
+    public static final TimeValue NEG_ONE_MILLIS = new TimeValue(-1, TimeUnit.MILLISECONDS);
     public static final TimeValue ZERO_MILLIS = new TimeValue(0, TimeUnit.MILLISECONDS);
     public static final TimeValue NEG_ONE_SECONDS = new TimeValue(-1, TimeUnit.SECONDS);
 
@@ -52,14 +54,39 @@ public class TimeValue {
         return (int) value;
     }
 
+    public static TimeValue of(final long duration, final TimeUnit timeUnit) {
+        Args.notNull(timeUnit, "timeUnit");
+        return new TimeValue(duration, timeUnit);
+    }
+
+    public static TimeValue ofDays(final long days) {
+        return new TimeValue(days, TimeUnit.DAYS);
+    }
+
+    public static TimeValue ofHours(final long hours) {
+        return new TimeValue(hours, TimeUnit.HOURS);
+    }
+
+    public static TimeValue ofMinutes(final long minutes) {
+        return new TimeValue(minutes, TimeUnit.MINUTES);
+    }
+
+    public static TimeValue ofSeconds(final long seconds) {
+        return new TimeValue(seconds, TimeUnit.SECONDS);
+    }
+
+    public static TimeValue ofMillis(final long millis) {
+        return new TimeValue(millis, TimeUnit.MILLISECONDS);
+    }
+
     private final long duration;
 
     private final TimeUnit timeUnit;
 
-    public TimeValue(final long duration, final TimeUnit timeUnit) {
+    TimeValue(final long duration, final TimeUnit timeUnit) {
         super();
         this.duration = duration;
-        this.timeUnit = Args.notNull(timeUnit, "timeUnit");
+        this.timeUnit = timeUnit;
     }
 
     public long convert(final TimeUnit sourceUnit) {

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/pool/TestPoolEntry.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/pool/TestPoolEntry.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/pool/TestPoolEntry.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/pool/TestPoolEntry.java Mon Apr  3 18:23:04 2017
@@ -30,6 +30,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.hc.core5.http.HttpConnection;
 import org.apache.hc.core5.io.ShutdownType;
+import org.apache.hc.core5.util.TimeValue;
 import org.junit.Assert;
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -38,7 +39,7 @@ public class TestPoolEntry {
 
     @Test
     public void testBasics() throws Exception {
-        final PoolEntry<String, HttpConnection> entry1 = new PoolEntry<>("route1", 10L, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, HttpConnection> entry1 = new PoolEntry<>("route1", TimeValue.of(10L, TimeUnit.MILLISECONDS));
 
         Assert.assertEquals("route1", entry1.getRoute());
         Assert.assertEquals(0, entry1.getUpdated());
@@ -63,7 +64,7 @@ public class TestPoolEntry {
 
     @Test
     public void testValidInfinitely() throws Exception {
-        final PoolEntry<String, HttpConnection> entry1 = new PoolEntry<>("route1", 0L, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, HttpConnection> entry1 = new PoolEntry<>("route1", TimeValue.ZERO_MILLIS);
         entry1.assignConnection(Mockito.mock(HttpConnection.class));
         Assert.assertEquals(Long.MAX_VALUE, entry1.getValidityDeadline());
         Assert.assertEquals(entry1.getValidityDeadline(), entry1.getExpiry());
@@ -71,32 +72,32 @@ public class TestPoolEntry {
 
     @Test
     public void testExpiry() throws Exception {
-        final PoolEntry<String, HttpConnection> entry1 = new PoolEntry<>("route1", 0L, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, HttpConnection> entry1 = new PoolEntry<>("route1", TimeValue.ZERO_MILLIS);
         entry1.assignConnection(Mockito.mock(HttpConnection.class));
         Assert.assertEquals(Long.MAX_VALUE, entry1.getExpiry());
-        entry1.updateExpiry(50L, TimeUnit.MILLISECONDS);
+        entry1.updateExpiry(TimeValue.of(50L, TimeUnit.MILLISECONDS));
         Assert.assertEquals(entry1.getUpdated() + 50L, entry1.getExpiry());
-        entry1.updateExpiry(0L, TimeUnit.MILLISECONDS);
+        entry1.updateExpiry(TimeValue.ZERO_MILLIS);
         Assert.assertEquals(Long.MAX_VALUE, entry1.getExpiry());
 
-        final PoolEntry<String, HttpConnection> entry2 = new PoolEntry<>("route1", 100L, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, HttpConnection> entry2 = new PoolEntry<>("route1", TimeValue.of(100L, TimeUnit.MILLISECONDS));
         entry2.assignConnection(Mockito.mock(HttpConnection.class));
         Assert.assertEquals(entry2.getUpdated() + 100L, entry2.getExpiry());
-        entry2.updateExpiry(150L, TimeUnit.MILLISECONDS);
+        entry2.updateExpiry(TimeValue.of(150L, TimeUnit.MILLISECONDS));
         Assert.assertEquals(entry2.getUpdated() + 100L, entry2.getExpiry());
-        entry2.updateExpiry(50L, TimeUnit.MILLISECONDS);
+        entry2.updateExpiry(TimeValue.of(50L, TimeUnit.MILLISECONDS));
         Assert.assertEquals(entry2.getUpdated() + 50L, entry2.getExpiry());
     }
 
     @Test(expected=IllegalArgumentException.class)
     public void testInvalidExpiry() throws Exception {
-        final PoolEntry<String, HttpConnection> entry = new PoolEntry<>("route1", 0L, TimeUnit.MILLISECONDS);
-        entry.updateExpiry(50L, null);
+        final PoolEntry<String, HttpConnection> entry = new PoolEntry<>("route1", TimeValue.of(0L, TimeUnit.MILLISECONDS));
+        entry.updateExpiry(null);
     }
 
     @Test
     public void testExpiryDoesNotOverflow() {
-        final PoolEntry<String, HttpConnection> entry = new PoolEntry<>("route1", Long.MAX_VALUE, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, HttpConnection> entry = new PoolEntry<>("route1", TimeValue.of(Long.MAX_VALUE, TimeUnit.MILLISECONDS));
         entry.assignConnection(Mockito.mock(HttpConnection.class));
         Assert.assertEquals(Long.MAX_VALUE, entry.getValidityDeadline());
     }

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/pool/TestRouteSpecificPool.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/pool/TestRouteSpecificPool.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/pool/TestRouteSpecificPool.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/pool/TestRouteSpecificPool.java Mon Apr  3 18:23:04 2017
@@ -26,10 +26,9 @@
  */
 package org.apache.hc.core5.pool;
 
-import java.util.concurrent.TimeUnit;
-
 import org.apache.hc.core5.io.GracefullyCloseable;
 import org.apache.hc.core5.io.ShutdownType;
+import org.apache.hc.core5.util.TimeValue;
 import org.junit.Assert;
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -53,7 +52,7 @@ public class TestRouteSpecificPool {
     public void testAdd() throws Exception {
         final RoutePool<String, GracefullyCloseable> pool = new RoutePool<>("whatever");
         final GracefullyCloseable conn = Mockito.mock(GracefullyCloseable.class);
-        final PoolEntry<String, GracefullyCloseable> entry = pool.createEntry(0, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, GracefullyCloseable> entry = pool.createEntry(TimeValue.ZERO_MILLIS);
         entry.assignConnection(conn);
         Assert.assertEquals(1, pool.getAllocatedCount());
         Assert.assertEquals(0, pool.getAvailableCount());
@@ -66,13 +65,13 @@ public class TestRouteSpecificPool {
     public void testLeaseRelease() throws Exception {
         final RoutePool<String, GracefullyCloseable> pool = new RoutePool<>("whatever");
         final GracefullyCloseable conn1 = Mockito.mock(GracefullyCloseable.class);
-        final PoolEntry<String, GracefullyCloseable> entry1 = pool.createEntry(0, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, GracefullyCloseable> entry1 = pool.createEntry(TimeValue.ZERO_MILLIS);
         entry1.assignConnection(conn1);
         final GracefullyCloseable conn2 = Mockito.mock(GracefullyCloseable.class);
-        final PoolEntry<String, GracefullyCloseable> entry2 = pool.createEntry(0, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, GracefullyCloseable> entry2 = pool.createEntry(TimeValue.ZERO_MILLIS);
         entry2.assignConnection(conn2);
         final GracefullyCloseable conn3 = Mockito.mock(GracefullyCloseable.class);
-        final PoolEntry<String, GracefullyCloseable> entry3 = pool.createEntry(0, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, GracefullyCloseable> entry3 = pool.createEntry(TimeValue.ZERO_MILLIS);
         entry3.assignConnection(conn3);
 
         Assert.assertNotNull(entry1);
@@ -106,13 +105,13 @@ public class TestRouteSpecificPool {
     public void testLeaseOrder() throws Exception {
         final RoutePool<String, GracefullyCloseable> pool = new RoutePool<>("whatever");
         final GracefullyCloseable conn1 = Mockito.mock(GracefullyCloseable.class);
-        final PoolEntry<String, GracefullyCloseable> entry1 = pool.createEntry(0, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, GracefullyCloseable> entry1 = pool.createEntry(TimeValue.ZERO_MILLIS);
         entry1.assignConnection(conn1);
         final GracefullyCloseable conn2 = Mockito.mock(GracefullyCloseable.class);
-        final PoolEntry<String, GracefullyCloseable> entry2 = pool.createEntry(0, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, GracefullyCloseable> entry2 = pool.createEntry(TimeValue.ZERO_MILLIS);
         entry2.assignConnection(conn2);
         final GracefullyCloseable conn3 = Mockito.mock(GracefullyCloseable.class);
-        final PoolEntry<String, GracefullyCloseable> entry3 = pool.createEntry(0, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, GracefullyCloseable> entry3 = pool.createEntry(TimeValue.ZERO_MILLIS);
         entry3.assignConnection(conn3);
 
         Assert.assertNotNull(entry1);
@@ -138,13 +137,13 @@ public class TestRouteSpecificPool {
     public void testLeaseReleaseStateful() throws Exception {
         final RoutePool<String, GracefullyCloseable> pool = new RoutePool<>("whatever");
         final GracefullyCloseable conn1 = Mockito.mock(GracefullyCloseable.class);
-        final PoolEntry<String, GracefullyCloseable> entry1 = pool.createEntry(0, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, GracefullyCloseable> entry1 = pool.createEntry(TimeValue.ZERO_MILLIS);
         entry1.assignConnection(conn1);
         final GracefullyCloseable conn2 = Mockito.mock(GracefullyCloseable.class);
-        final PoolEntry<String, GracefullyCloseable> entry2 = pool.createEntry(0, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, GracefullyCloseable> entry2 = pool.createEntry(TimeValue.ZERO_MILLIS);
         entry2.assignConnection(conn2);
         final GracefullyCloseable conn3 = Mockito.mock(GracefullyCloseable.class);
-        final PoolEntry<String, GracefullyCloseable> entry3 = pool.createEntry(0, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, GracefullyCloseable> entry3 = pool.createEntry(TimeValue.ZERO_MILLIS);
         entry3.assignConnection(conn3);
 
         Assert.assertNotNull(entry1);
@@ -192,13 +191,13 @@ public class TestRouteSpecificPool {
     public void testRemove() throws Exception {
         final RoutePool<String, GracefullyCloseable> pool = new RoutePool<>("whatever");
         final GracefullyCloseable conn1 = Mockito.mock(GracefullyCloseable.class);
-        final PoolEntry<String, GracefullyCloseable> entry1 = pool.createEntry(0, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, GracefullyCloseable> entry1 = pool.createEntry(TimeValue.ZERO_MILLIS);
         entry1.assignConnection(conn1);
         final GracefullyCloseable conn2 = Mockito.mock(GracefullyCloseable.class);
-        final PoolEntry<String, GracefullyCloseable> entry2 = pool.createEntry(0, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, GracefullyCloseable> entry2 = pool.createEntry(TimeValue.ZERO_MILLIS);
         entry2.assignConnection(conn2);
         final GracefullyCloseable conn3 = Mockito.mock(GracefullyCloseable.class);
-        final PoolEntry<String, GracefullyCloseable> entry3 = pool.createEntry(0, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, GracefullyCloseable> entry3 = pool.createEntry(TimeValue.ZERO_MILLIS);
         entry3.assignConnection(conn3);
 
         Assert.assertNotNull(entry1);
@@ -247,10 +246,10 @@ public class TestRouteSpecificPool {
     public void testShutdown() throws Exception {
         final RoutePool<String, GracefullyCloseable> pool = new RoutePool<>("whatever");
         final GracefullyCloseable conn1 = Mockito.mock(GracefullyCloseable.class);
-        final PoolEntry<String, GracefullyCloseable> entry1 = pool.createEntry(0, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, GracefullyCloseable> entry1 = pool.createEntry(TimeValue.ZERO_MILLIS);
         entry1.assignConnection(conn1);
         final GracefullyCloseable conn2 = Mockito.mock(GracefullyCloseable.class);
-        final PoolEntry<String, GracefullyCloseable> entry2 = pool.createEntry(0, TimeUnit.MILLISECONDS);
+        final PoolEntry<String, GracefullyCloseable> entry2 = pool.createEntry(TimeValue.ZERO_MILLIS);
         entry2.assignConnection(conn2);
 
         Assert.assertNotNull(entry1);

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/pool/TestStrictConnPool.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/pool/TestStrictConnPool.java?rev=1790031&r1=1790030&r2=1790031&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/pool/TestStrictConnPool.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/pool/TestStrictConnPool.java Mon Apr  3 18:23:04 2017
@@ -32,6 +32,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.hc.core5.http.HttpConnection;
 import org.apache.hc.core5.io.ShutdownType;
+import org.apache.hc.core5.util.TimeValue;
 import org.junit.Assert;
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -107,12 +108,12 @@ public class TestStrictConnPool {
     public void testLeaseIllegal() throws Exception {
         final StrictConnPool<String, HttpConnection> pool = new StrictConnPool<>(2, 10);
         try {
-            pool.lease(null, null, 0, TimeUnit.MILLISECONDS, null);
+            pool.lease(null, null, TimeValue.ZERO_MILLIS, null);
             Assert.fail("IllegalArgumentException should have been thrown");
         } catch (final IllegalArgumentException expected) {
         }
         try {
-            pool.lease("somehost", null, 0, null, null);
+            pool.lease("somehost", null, null, null);
             Assert.fail("IllegalArgumentException should have been thrown");
         } catch (final IllegalArgumentException expected) {
         }
@@ -367,7 +368,7 @@ public class TestStrictConnPool {
         Assert.assertNotNull(entry1);
         entry1.assignConnection(conn1);
 
-        entry1.updateExpiry(1, TimeUnit.MILLISECONDS);
+        entry1.updateExpiry(TimeValue.of(1, TimeUnit.MILLISECONDS));
         pool.release(entry1, true);
 
         Thread.sleep(200L);
@@ -406,12 +407,12 @@ public class TestStrictConnPool {
         Assert.assertNotNull(entry2);
         entry2.assignConnection(conn2);
 
-        entry1.updateExpiry(1, TimeUnit.MILLISECONDS);
+        entry1.updateExpiry(TimeValue.of(1, TimeUnit.MILLISECONDS));
         pool.release(entry1, true);
 
         Thread.sleep(200);
 
-        entry2.updateExpiry(1000, TimeUnit.SECONDS);
+        entry2.updateExpiry(TimeValue.of(1000, TimeUnit.SECONDS));
         pool.release(entry2, true);
 
         pool.closeExpired();
@@ -456,7 +457,7 @@ public class TestStrictConnPool {
         entry2.updateState(null);
         pool.release(entry2, true);
 
-        pool.closeIdle(50, TimeUnit.MILLISECONDS);
+        pool.closeIdle(TimeValue.of(50, TimeUnit.MILLISECONDS));
 
         Mockito.verify(conn1).shutdown(ShutdownType.GRACEFUL);
         Mockito.verify(conn2, Mockito.never()).shutdown(Mockito.<ShutdownType>any());
@@ -470,7 +471,7 @@ public class TestStrictConnPool {
         Assert.assertEquals(0, stats.getLeased());
         Assert.assertEquals(0, stats.getPending());
 
-        pool.closeIdle(-1, TimeUnit.MILLISECONDS);
+        pool.closeIdle(TimeValue.of(-1, TimeUnit.MILLISECONDS));
 
         Mockito.verify(conn2).shutdown(ShutdownType.GRACEFUL);
 
@@ -490,9 +491,9 @@ public class TestStrictConnPool {
 
         final StrictConnPool<String, HttpConnection> pool = new StrictConnPool<>(1, 1);
 
-        final Future<PoolEntry<String, HttpConnection>> future1 = pool.lease("somehost", null, 0, TimeUnit.MILLISECONDS, null);
-        final Future<PoolEntry<String, HttpConnection>> future2 = pool.lease("somehost", null, 0, TimeUnit.MILLISECONDS, null);
-        final Future<PoolEntry<String, HttpConnection>> future3 = pool.lease("somehost", null, 10, TimeUnit.MILLISECONDS, null);
+        final Future<PoolEntry<String, HttpConnection>> future1 = pool.lease("somehost", null, TimeValue.of(0, TimeUnit.MILLISECONDS), null);
+        final Future<PoolEntry<String, HttpConnection>> future2 = pool.lease("somehost", null, TimeValue.of(0, TimeUnit.MILLISECONDS), null);
+        final Future<PoolEntry<String, HttpConnection>> future3 = pool.lease("somehost", null, TimeValue.of(10, TimeUnit.MILLISECONDS), null);
 
         Assert.assertTrue(future1.isDone());
         final PoolEntry<String, HttpConnection> entry1 = future1.get();
@@ -513,14 +514,14 @@ public class TestStrictConnPool {
     public void testLeaseRequestCanceled() throws Exception {
         final StrictConnPool<String, HttpConnection> pool = new StrictConnPool<>(1, 1);
 
-        final Future<PoolEntry<String, HttpConnection>> future1 = pool.lease("somehost", null, 0, TimeUnit.MILLISECONDS, null);
+        final Future<PoolEntry<String, HttpConnection>> future1 = pool.lease("somehost", null, TimeValue.of(0, TimeUnit.MILLISECONDS), null);
 
         Assert.assertTrue(future1.isDone());
         final PoolEntry<String, HttpConnection> entry1 = future1.get();
         Assert.assertNotNull(entry1);
         entry1.assignConnection(Mockito.mock(HttpConnection.class));
 
-        final Future<PoolEntry<String, HttpConnection>> future2 = pool.lease("somehost", null, 0, TimeUnit.MILLISECONDS, null);
+        final Future<PoolEntry<String, HttpConnection>> future2 = pool.lease("somehost", null, TimeValue.of(0, TimeUnit.MILLISECONDS), null);
         future2.cancel(true);
 
         pool.release(entry1, true);
@@ -533,7 +534,7 @@ public class TestStrictConnPool {
     @Test(expected=IllegalArgumentException.class)
     public void testCloseIdleInvalid() throws Exception {
         final StrictConnPool<String, HttpConnection> pool = new StrictConnPool<>(2, 2);
-        pool.closeIdle(50, null);
+        pool.closeIdle(null);
     }
 
     @Test(expected=IllegalArgumentException.class)