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

morningman pushed a commit to branch branch-1.1-lts
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-1.1-lts by this push:
     new d9a647f02e [enhancement](frontendservice) add retry when create 
connection to frontend service (#15635) (#15668)
d9a647f02e is described below

commit d9a647f02e81f66e0abcecbdffc371c1560cef31
Author: Zhengguo Yang <[email protected]>
AuthorDate: Mon Jan 9 09:27:49 2023 +0800

    [enhancement](frontendservice) add retry when create connection to frontend 
service (#15635) (#15668)
    
    cherry-pick #15635
---
 be/src/runtime/client_cache.h | 29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/be/src/runtime/client_cache.h b/be/src/runtime/client_cache.h
index a7b6e6d1b8..5076844b4b 100644
--- a/be/src/runtime/client_cache.h
+++ b/be/src/runtime/client_cache.h
@@ -150,22 +150,25 @@ template <class T>
 class ClientConnection {
 public:
     ClientConnection(ClientCache<T>* client_cache, const TNetworkAddress& 
address, Status* status)
-            : _client_cache(client_cache), _client(nullptr) {
-        *status = _client_cache->get_client(address, &_client, 0);
-
-        if (status->ok()) {
-            DCHECK(_client != nullptr);
-        }
-    }
+            : ClientConnection(client_cache, address, 0, status, 3) {}
 
     ClientConnection(ClientCache<T>* client_cache, const TNetworkAddress& 
address, int timeout_ms,
-                     Status* status)
+                     Status* status, int max_retries = 3)
             : _client_cache(client_cache), _client(nullptr) {
-        *status = _client_cache->get_client(address, &_client, timeout_ms);
-
-        if (status->ok()) {
-            DCHECK(_client != nullptr);
-        }
+        int num_retries = 0;
+        do {
+            *status = _client_cache->get_client(address, &_client, timeout_ms);
+            if (status->ok()) {
+                DCHECK(_client != nullptr);
+                break;
+            }
+            if (num_retries++ < max_retries) {
+                // exponential backoff retry with starting delay of 500ms
+                usleep(500000 * (1 << num_retries));
+                LOG(INFO) << "Failed to get client from cache: " << 
status->to_string()
+                          << ", retrying[" << num_retries << "]...";
+            }
+        } while (num_retries < max_retries);
     }
 
     ~ClientConnection() {


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

Reply via email to