3939import java .util .Iterator ;
4040import java .util .List ;
4141import 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
0 commit comments