bhattmanish98 commented on code in PR #7817:
URL: https://github.com/apache/hadoop/pull/7817#discussion_r2280760232


##########
hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/services/AbfsConnectionManager.java:
##########
@@ -89,23 +121,56 @@ public ConnectionRequest requestConnection(final HttpRoute 
route,
        */
       @Override
       public HttpClientConnection get(final long timeout,
-          final TimeUnit timeUnit)
-          throws InterruptedException, ExecutionException,
-          ConnectionPoolTimeoutException {
+          final TimeUnit timeUnit) throws ExecutionException {
         String requestId = UUID.randomUUID().toString();
         logDebug("Connection requested for request {}", requestId);
+        if (!route.getTargetHost().equals(baseHost)) {
+          // If the route target host does not match the base host, create a 
new connection
+          logDebug("Route target host {} does not match base host {}, creating 
new connection",
+              route.getTargetHost(), baseHost);
+          return createNewConnection();
+        }
         try {
-          HttpClientConnection clientConn = kac.get();
-          if (clientConn != null) {
-            logDebug("Connection retrieved from KAC: {} for requestId: {}",
-                clientConn, requestId);
-            return clientConn;
+          HttpClientConnection conn = kac.get();
+
+          // If a valid connection is available, return it and trigger 
background warm-up if needed
+          if (conn != null) {
+            triggerConnectionWarmupIfNeeded();
+            return conn;
+          }
+
+          // No connection available — wait up to timeout for one to appear
+          synchronized (connectionLock) {
+            triggerConnectionWarmupIfNeeded();
+
+            final long timeoutMs = 500L;
+            final long deadline = System.currentTimeMillis() + timeoutMs;
+
+            while ((conn = kac.get()) == null
+                && System.currentTimeMillis() < deadline) {
+              long waitTime = deadline - System.currentTimeMillis();
+              if (waitTime <= 0) {
+                break;
+              }
+
+              try {
+                connectionLock.wait(waitTime);
+              } catch (InterruptedException e) {
+                Thread.currentThread().interrupt();

Review Comment:
   With the current flow, it is expected that even if warmup failed there is no 
need to raise an expection. Thats why not throwing the exception.
   But with the next PR changes where we are making changes for Apache to JDK 
fallback, will throw an exception and that we will help us know fallback to JDK 
in init flow.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-issues-h...@hadoop.apache.org

Reply via email to