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]