This is an automated email from the ASF dual-hosted git repository. qiaojialin pushed a commit to branch remove_unused_stack in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit d17f712dc9b544ed8f6ab6ae1aa6e28fa4f20412 Author: qiaojialin <[email protected]> AuthorDate: Sat Jun 25 11:16:48 2022 +0800 avoid some exception in middle retry --- .../client/SyncConfigNodeClientPool.java | 38 ++++++++++++++-------- .../apache/iotdb/commons/client/ClientManager.java | 2 +- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/client/SyncConfigNodeClientPool.java b/confignode/src/main/java/org/apache/iotdb/confignode/client/SyncConfigNodeClientPool.java index 94890eeee4..1ac87a6764 100644 --- a/confignode/src/main/java/org/apache/iotdb/confignode/client/SyncConfigNodeClientPool.java +++ b/confignode/src/main/java/org/apache/iotdb/confignode/client/SyncConfigNodeClientPool.java @@ -66,38 +66,43 @@ public class SyncConfigNodeClientPool { public TConfigNodeRegisterResp registerConfigNode( TEndPoint endPoint, TConfigNodeRegisterReq req) { // TODO: Unified retry logic + Throwable lastException = null; for (int retry = 0; retry < retryNum; retry++) { try (SyncConfigNodeIServiceClient client = clientManager.borrowClient(endPoint)) { return client.registerConfigNode(req); } catch (Exception e) { - LOGGER.warn("Register ConfigNode failed, retrying {}...", retry, e); + lastException = e; + LOGGER.warn("Register ConfigNode failed because {}, retrying {}...", e.getMessage(), retry); doRetryWait(retry); } } - LOGGER.error("Register ConfigNode failed"); + LOGGER.error("Register ConfigNode failed", lastException); return new TConfigNodeRegisterResp() .setStatus( new TSStatus(TSStatusCode.ALL_RETRY_FAILED.getStatusCode()) - .setMessage("All retry failed.")); + .setMessage("All retry failed due to " + lastException.getMessage())); } public TSStatus addConsensusGroup( TEndPoint endPoint, List<TConfigNodeLocation> configNodeLocation) { // TODO: Unified retry logic + Throwable lastException = null; for (int retry = 0; retry < retryNum; retry++) { try (SyncConfigNodeIServiceClient client = clientManager.borrowClient(endPoint)) { TConfigNodeRegisterResp registerResp = new TConfigNodeRegisterResp(); registerResp.setConfigNodeList(configNodeLocation); registerResp.setStatus(StatusUtils.OK); return client.addConsensusGroup(registerResp); - } catch (Exception e) { - LOGGER.warn("Add Consensus Group failed, retrying {} ...", retry, e); + } catch (Throwable e) { + lastException = e; + LOGGER.warn( + "Add Consensus Group failed because {}, retrying {} ...", e.getMessage(), retry); doRetryWait(retry); } } - LOGGER.error("Add ConsensusGroup failed"); + LOGGER.error("Add ConsensusGroup failed", lastException); return new TSStatus(TSStatusCode.ALL_RETRY_FAILED.getStatusCode()) - .setMessage("All retry failed."); + .setMessage("All retry failed due to " + lastException.getMessage()); } /** @@ -110,6 +115,7 @@ public class SyncConfigNodeClientPool { public TSStatus removeConfigNode( List<TConfigNodeLocation> configNodeLocations, TConfigNodeLocation configNodeLocation) { // TODO: Unified retry logic + Throwable lastException = null; for (TConfigNodeLocation nodeLocation : configNodeLocations) { for (int retry = 0; retry < retryNum; retry++) { try (SyncConfigNodeIServiceClient client = @@ -124,33 +130,37 @@ public class SyncConfigNodeClientPool { } } return status; - } catch (Exception e) { - LOGGER.warn("Remove ConfigNode failed, retrying...", e); + } catch (Throwable e) { + lastException = e; + LOGGER.warn( + "Remove ConfigNode failed because {}, retrying {} ...", e.getMessage(), retry); doRetryWait(retry); } } } - LOGGER.error("Remove ConfigNode failed"); + LOGGER.error("Remove ConfigNode failed", lastException); return new TSStatus(TSStatusCode.ALL_RETRY_FAILED.getStatusCode()) - .setMessage("All retry failed."); + .setMessage("All retry failed due to " + lastException.getMessage()); } /** Only use stopConfigNode when the ConfigNode is removed. */ public TSStatus stopConfigNode(TConfigNodeLocation configNodeLocation) { // TODO: Unified retry logic + Throwable lastException = null; for (int retry = 0; retry < retryNum; retry++) { try (SyncConfigNodeIServiceClient client = clientManager.borrowClient(configNodeLocation.getInternalEndPoint())) { return client.stopConfigNode(configNodeLocation); } catch (Exception e) { - LOGGER.warn("Stop ConfigNode failed, retrying...", e); + lastException = e; + LOGGER.warn("Stop ConfigNode failed because {}, retrying {}...", e.getMessage(), retry); doRetryWait(retry); } } - LOGGER.error("Stop ConfigNode failed"); + LOGGER.error("Stop ConfigNode failed", lastException); return new TSStatus(TSStatusCode.ALL_RETRY_FAILED.getStatusCode()) - .setMessage("All retry failed."); + .setMessage("All retry failed due to" + lastException.getMessage()); } private void doRetryWait(int retryNum) { diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/client/ClientManager.java b/node-commons/src/main/java/org/apache/iotdb/commons/client/ClientManager.java index 70bd2edb29..6d12f0cb56 100644 --- a/node-commons/src/main/java/org/apache/iotdb/commons/client/ClientManager.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/client/ClientManager.java @@ -57,7 +57,7 @@ public class ClientManager<K, V> implements IClientManager<K, V> { } catch (Exception e) { // external doesn't care of other exceptions String errorMessage = String.format("Borrow client from pool for node %s failed.", node); - logger.error(errorMessage, e); + logger.warn(errorMessage, e); throw new IOException(errorMessage, e); } return client;
