This is an automated email from the ASF dual-hosted git repository.

peacewong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/linkis.git

commit 2b6d80240a065c67085d36ae915cec5b5bfeaae1
Author: peacewong <[email protected]>
AuthorDate: Fri Sep 22 14:54:24 2023 +0800

    add default retry for 401
---
 .../linkis/httpclient/AbstractHttpClient.scala     | 26 ++++++++++++++--------
 .../httpclient/config/ClientConfigBuilder.scala    |  9 ++++----
 2 files changed, 21 insertions(+), 14 deletions(-)

diff --git 
a/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/AbstractHttpClient.scala
 
b/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/AbstractHttpClient.scala
index d901bb902..ec61ebd66 100644
--- 
a/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/AbstractHttpClient.scala
+++ 
b/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/AbstractHttpClient.scala
@@ -143,23 +143,31 @@ abstract class AbstractHttpClient(clientConfig: 
ClientConfig, clientName: String
       val req = prepareReq(action)
       val startTime = System.currentTimeMillis
       val response = executeRequest(req, Some(waitTime).filter(_ > 0))
+      val taken = System.currentTimeMillis - startTime
+      attempts.add(taken)
+      val costTime = ByteTimeUtils.msDurationToString(taken)
+      logger.info(
+        s"invoke ${req.getURI} get status 
${response.getStatusLine.getStatusCode} taken: ${costTime}."
+      )
       if (response.getStatusLine.getStatusCode == 401) {
         tryLogin(action, getRequestUrl(action), true)
-        logger.info("The user is not logged in, please log in first, you can 
set a retry")
         val msg = Utils.tryCatch(EntityUtils.toString(response.getEntity)) { t 
=>
           logger.warn("failed to parse entity", t)
           ""
         }
         IOUtils.closeQuietly(response)
-        throw new HttpClientRetryException(
-          "The user is not logged in, please log in first, you can set a 
retry, message: " + msg
-        )
+        if (attempts.size() <= 1) {
+          logger.info("The user is not logged in, default retry once")
+          addAttempt()
+        } else {
+          logger.info("The user is not logged in, you can set a retry")
+          throw new HttpClientRetryException(
+            "The user is not logged in, please log in first, you can set a 
retry, message: " + msg
+          )
+        }
+      } else {
+        response
       }
-      val taken = System.currentTimeMillis - startTime
-      attempts.add(taken)
-      val costTime = ByteTimeUtils.msDurationToString(taken)
-      logger.info(s"invoke ${req.getURI} taken: ${costTime}.")
-      response
     }
 
     val response =
diff --git 
a/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/config/ClientConfigBuilder.scala
 
b/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/config/ClientConfigBuilder.scala
index 26170a457..b1fc579f3 100644
--- 
a/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/config/ClientConfigBuilder.scala
+++ 
b/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/config/ClientConfigBuilder.scala
@@ -17,9 +17,9 @@
 
 package org.apache.linkis.httpclient.config
 
+import org.apache.linkis.common.exception.LinkisRetryException
 import org.apache.linkis.common.utils.{DefaultRetryHandler, RetryHandler}
 import org.apache.linkis.httpclient.authentication.AuthenticationStrategy
-import org.apache.linkis.httpclient.exception.HttpClientRetryException
 import org.apache.linkis.httpclient.loadbalancer.LoadBalancerStrategy
 
 import scala.concurrent.duration.TimeUnit
@@ -39,11 +39,10 @@ class ClientConfigBuilder protected () {
   protected var readTimeout: Long = _
   protected var maxConnection: Int = _
   protected var retryEnabled: Boolean = true
-  protected var retryHandler: RetryHandler = buildDefaultRetryHandler()
 
-  def buildDefaultRetryHandler(): RetryHandler = {
-    retryHandler = new DefaultRetryHandler
-    retryHandler.addRetryException(classOf[HttpClientRetryException])
+  protected var retryHandler: RetryHandler = {
+    val retryHandler = new DefaultRetryHandler
+    retryHandler.addRetryException(classOf[LinkisRetryException])
     retryHandler
   }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to