Skip to content

Commit 119b1b5

Browse files
authored
Add information when master node left to DiscoveryNodes' shortSummary() (#28197)
This commit changes `DiscoveryNodes.Delta.shortSummary()` in order to add information to the summary when the master node left.
1 parent 1ae920c commit 119b1b5

File tree

2 files changed

+45
-54
lines changed

2 files changed

+45
-54
lines changed

server/src/main/java/org/elasticsearch/cluster/node/DiscoveryNodes.java

Lines changed: 42 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import java.util.Iterator;
4040
import java.util.List;
4141
import java.util.Map;
42+
import java.util.Objects;
4243

4344
/**
4445
* This class holds all {@link DiscoveryNode} in the cluster and provides convenience methods to
@@ -205,12 +206,14 @@ public DiscoveryNode getLocalNode() {
205206
}
206207

207208
/**
208-
* Get the master node
209-
*
210-
* @return master node
209+
* Returns the master node, or {@code null} if there is no master node
211210
*/
211+
@Nullable
212212
public DiscoveryNode getMasterNode() {
213-
return nodes.get(masterNodeId);
213+
if (masterNodeId != null) {
214+
return nodes.get(masterNodeId);
215+
}
216+
return null;
214217
}
215218

216219
/**
@@ -385,27 +388,20 @@ public DiscoveryNodes newNode(DiscoveryNode node) {
385388
* Returns the changes comparing this nodes to the provided nodes.
386389
*/
387390
public Delta delta(DiscoveryNodes other) {
388-
List<DiscoveryNode> removed = new ArrayList<>();
389-
List<DiscoveryNode> added = new ArrayList<>();
391+
final List<DiscoveryNode> removed = new ArrayList<>();
392+
final List<DiscoveryNode> added = new ArrayList<>();
390393
for (DiscoveryNode node : other) {
391-
if (!this.nodeExists(node)) {
394+
if (this.nodeExists(node) == false) {
392395
removed.add(node);
393396
}
394397
}
395398
for (DiscoveryNode node : this) {
396-
if (!other.nodeExists(node)) {
399+
if (other.nodeExists(node) == false) {
397400
added.add(node);
398401
}
399402
}
400-
DiscoveryNode previousMasterNode = null;
401-
DiscoveryNode newMasterNode = null;
402-
if (masterNodeId != null) {
403-
if (other.masterNodeId == null || !other.masterNodeId.equals(masterNodeId)) {
404-
previousMasterNode = other.getMasterNode();
405-
newMasterNode = getMasterNode();
406-
}
407-
}
408-
return new Delta(previousMasterNode, newMasterNode, localNodeId, Collections.unmodifiableList(removed),
403+
404+
return new Delta(other.getMasterNode(), getMasterNode(), localNodeId, Collections.unmodifiableList(removed),
409405
Collections.unmodifiableList(added));
410406
}
411407

@@ -429,8 +425,8 @@ public String toString() {
429425
public static class Delta {
430426

431427
private final String localNodeId;
432-
private final DiscoveryNode previousMasterNode;
433-
private final DiscoveryNode newMasterNode;
428+
@Nullable private final DiscoveryNode previousMasterNode;
429+
@Nullable private final DiscoveryNode newMasterNode;
434430
private final List<DiscoveryNode> removed;
435431
private final List<DiscoveryNode> added;
436432

@@ -448,13 +444,15 @@ public boolean hasChanges() {
448444
}
449445

450446
public boolean masterNodeChanged() {
451-
return newMasterNode != null;
447+
return Objects.equals(newMasterNode, previousMasterNode) == false;
452448
}
453449

450+
@Nullable
454451
public DiscoveryNode previousMasterNode() {
455452
return previousMasterNode;
456453
}
457454

455+
@Nullable
458456
public DiscoveryNode newMasterNode() {
459457
return newMasterNode;
460458
}
@@ -476,51 +474,45 @@ public List<DiscoveryNode> addedNodes() {
476474
}
477475

478476
public String shortSummary() {
479-
StringBuilder sb = new StringBuilder();
480-
if (!removed() && masterNodeChanged()) {
481-
if (newMasterNode.getId().equals(localNodeId)) {
482-
// we are the master, no nodes we removed, we are actually the first master
483-
sb.append("new_master ").append(newMasterNode());
484-
} else {
485-
// we are not the master, so we just got this event. No nodes were removed, so its not a *new* master
486-
sb.append("detected_master ").append(newMasterNode());
477+
final StringBuilder summary = new StringBuilder();
478+
if (masterNodeChanged()) {
479+
summary.append("master node changed {previous [");
480+
if (previousMasterNode() != null) {
481+
summary.append(previousMasterNode());
487482
}
488-
} else {
489-
if (masterNodeChanged()) {
490-
sb.append("master {new ").append(newMasterNode());
491-
if (previousMasterNode() != null) {
492-
sb.append(", previous ").append(previousMasterNode());
493-
}
494-
sb.append("}");
483+
summary.append("], current [");
484+
if (newMasterNode() != null) {
485+
summary.append(newMasterNode());
495486
}
496-
if (removed()) {
497-
if (masterNodeChanged()) {
498-
sb.append(", ");
499-
}
500-
sb.append("removed {");
501-
for (DiscoveryNode node : removedNodes()) {
502-
sb.append(node).append(',');
503-
}
504-
sb.append("}");
487+
summary.append("]}");
488+
}
489+
if (removed()) {
490+
if (summary.length() > 0) {
491+
summary.append(", ");
492+
}
493+
summary.append("removed {");
494+
for (DiscoveryNode node : removedNodes()) {
495+
summary.append(node).append(',');
505496
}
497+
summary.append("}");
506498
}
507499
if (added()) {
508500
// don't print if there is one added, and it is us
509501
if (!(addedNodes().size() == 1 && addedNodes().get(0).getId().equals(localNodeId))) {
510-
if (removed() || masterNodeChanged()) {
511-
sb.append(", ");
502+
if (summary.length() > 0) {
503+
summary.append(", ");
512504
}
513-
sb.append("added {");
505+
summary.append("added {");
514506
for (DiscoveryNode node : addedNodes()) {
515507
if (!node.getId().equals(localNodeId)) {
516508
// don't print ourself
517-
sb.append(node).append(',');
509+
summary.append(node).append(',');
518510
}
519511
}
520-
sb.append("}");
512+
summary.append("}");
521513
}
522514
}
523-
return sb.toString();
515+
return summary.toString();
524516
}
525517
}
526518

server/src/test/java/org/elasticsearch/cluster/node/DiscoveryNodesTests.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,15 +140,14 @@ public void testDeltas() {
140140

141141
DiscoveryNodes.Delta delta = discoNodesB.delta(discoNodesA);
142142

143-
if (masterB == null || Objects.equals(masterAId, masterBId)) {
143+
if (Objects.equals(masterAId, masterBId)) {
144144
assertFalse(delta.masterNodeChanged());
145145
assertThat(delta.previousMasterNode(), nullValue());
146146
assertThat(delta.newMasterNode(), nullValue());
147147
} else {
148148
assertTrue(delta.masterNodeChanged());
149-
assertThat(delta.newMasterNode().getId(), equalTo(masterBId));
150-
assertThat(delta.previousMasterNode() != null ? delta.previousMasterNode().getId() : null,
151-
equalTo(masterAId));
149+
assertThat(delta.newMasterNode() != null ? delta.newMasterNode().getId() : null, equalTo(masterBId));
150+
assertThat(delta.previousMasterNode() != null ? delta.previousMasterNode().getId() : null, equalTo(masterAId));
152151
}
153152

154153
Set<DiscoveryNode> newNodes = new HashSet<>(nodesB);

0 commit comments

Comments
 (0)