Skip to content

Commit f196a2a

Browse files
committed
add proper reason when removing nodes
1 parent 4518722 commit f196a2a

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

server/src/main/java/org/elasticsearch/cluster/coordination/FollowersChecker.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ private void handleDisconnectedNode(DiscoveryNode discoveryNode) {
240240
synchronized (mutex) {
241241
FollowerChecker followerChecker = followerCheckers.get(discoveryNode);
242242
if (followerChecker != null && followerChecker.running()) {
243-
followerChecker.failNode();
243+
followerChecker.failNode("disconnected");
244244
}
245245
}
246246
}
@@ -320,18 +320,21 @@ public void handleException(TransportException exp) {
320320

321321
failureCountSinceLastSuccess++;
322322

323+
final String reason;
323324
if (failureCountSinceLastSuccess >= followerCheckRetryCount) {
324325
logger.debug(() -> new ParameterizedMessage("{} failed too many times", FollowerChecker.this), exp);
326+
reason = "followers check retry count exceeded";
325327
} else if (exp instanceof ConnectTransportException
326328
|| exp.getCause() instanceof ConnectTransportException) {
327329
logger.debug(() -> new ParameterizedMessage("{} disconnected", FollowerChecker.this), exp);
330+
reason = "disconnected";
328331
} else {
329332
logger.debug(() -> new ParameterizedMessage("{} failed, retrying", FollowerChecker.this), exp);
330333
scheduleNextWakeUp();
331334
return;
332335
}
333336

334-
failNode();
337+
failNode(reason);
335338
}
336339

337340

@@ -342,7 +345,7 @@ public String executor() {
342345
});
343346
}
344347

345-
void failNode() {
348+
void failNode(String reason) {
346349
transportService.getThreadPool().generic().execute(new Runnable() {
347350
@Override
348351
public void run() {
@@ -354,7 +357,7 @@ public void run() {
354357
faultyNodes.add(discoveryNode);
355358
followerCheckers.remove(discoveryNode);
356359
}
357-
onNodeFailure.accept(discoveryNode, "followers_checker");
360+
onNodeFailure.accept(discoveryNode, reason);
358361
}
359362

360363
@Override

server/src/test/java/org/elasticsearch/cluster/coordination/FollowersCheckerTests.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ public void testFailsNodeThatDoesNotRespond() {
165165
final Settings settings = settingsBuilder.build();
166166

167167
testBehaviourOfFailingNode(settings, () -> null,
168+
"followers check retry count exceeded",
168169
(FOLLOWER_CHECK_RETRY_COUNT_SETTING.get(settings) - 1) * FOLLOWER_CHECK_INTERVAL_SETTING.get(settings).millis()
169170
+ FOLLOWER_CHECK_RETRY_COUNT_SETTING.get(settings) * FOLLOWER_CHECK_TIMEOUT_SETTING.get(settings).millis());
170171
}
@@ -182,6 +183,7 @@ public void testFailsNodeThatRejectsCheck() {
182183
testBehaviourOfFailingNode(settings, () -> {
183184
throw new ElasticsearchException("simulated exception");
184185
},
186+
"followers check retry count exceeded",
185187
(FOLLOWER_CHECK_RETRY_COUNT_SETTING.get(settings) - 1) * FOLLOWER_CHECK_INTERVAL_SETTING.get(settings).millis());
186188
}
187189

@@ -213,14 +215,15 @@ public Empty get() {
213215
throw new ElasticsearchException("simulated exception");
214216
}
215217
},
218+
"followers check retry count exceeded",
216219
(FOLLOWER_CHECK_RETRY_COUNT_SETTING.get(settings) * (maxRecoveries + 1) - 1)
217220
* FOLLOWER_CHECK_INTERVAL_SETTING.get(settings).millis());
218221
}
219222

220223
public void testFailsNodeThatIsDisconnected() {
221224
testBehaviourOfFailingNode(Settings.EMPTY, () -> {
222225
throw new ConnectTransportException(null, "simulated exception");
223-
}, 0);
226+
}, "disconnected", 0);
224227
}
225228

226229
public void testFailsNodeThatDisconnects() {
@@ -262,6 +265,7 @@ public String toString() {
262265
assert false : fcr;
263266
}, (node, reason) -> {
264267
assertTrue(nodeFailed.compareAndSet(false, true));
268+
assertThat(reason, equalTo("disconnected"));
265269
});
266270

267271
DiscoveryNodes discoveryNodes = DiscoveryNodes.builder().add(localNode).add(otherNode).localNodeId(localNode.getId()).build();
@@ -274,7 +278,8 @@ public String toString() {
274278
assertThat(followersChecker.getFaultyNodes(), contains(otherNode));
275279
}
276280

277-
private void testBehaviourOfFailingNode(Settings testSettings, Supplier<TransportResponse.Empty> responder, long expectedFailureTime) {
281+
private void testBehaviourOfFailingNode(Settings testSettings, Supplier<TransportResponse.Empty> responder, String failureReason,
282+
long expectedFailureTime) {
278283
final DiscoveryNode localNode = new DiscoveryNode("local-node", buildNewFakeTransportAddress(), Version.CURRENT);
279284
final DiscoveryNode otherNode = new DiscoveryNode("other-node", buildNewFakeTransportAddress(), Version.CURRENT);
280285
final Settings settings = Settings.builder().put(NODE_NAME_SETTING.getKey(), localNode.getName()).put(testSettings).build();
@@ -321,6 +326,7 @@ public String toString() {
321326
assert false : fcr;
322327
}, (node, reason) -> {
323328
assertTrue(nodeFailed.compareAndSet(false, true));
329+
assertThat(reason, equalTo(failureReason));
324330
});
325331

326332
DiscoveryNodes discoveryNodes = DiscoveryNodes.builder().add(localNode).add(otherNode).localNodeId(localNode.getId()).build();

0 commit comments

Comments
 (0)