39
39
import java .util .Iterator ;
40
40
import java .util .List ;
41
41
import java .util .Map ;
42
+ import java .util .Objects ;
42
43
43
44
/**
44
45
* This class holds all {@link DiscoveryNode} in the cluster and provides convenience methods to
@@ -205,12 +206,14 @@ public DiscoveryNode getLocalNode() {
205
206
}
206
207
207
208
/**
208
- * Get the master node
209
- *
210
- * @return master node
209
+ * Returns the master node, or {@code null} if there is no master node
211
210
*/
211
+ @ Nullable
212
212
public DiscoveryNode getMasterNode () {
213
- return nodes .get (masterNodeId );
213
+ if (masterNodeId != null ) {
214
+ return nodes .get (masterNodeId );
215
+ }
216
+ return null ;
214
217
}
215
218
216
219
/**
@@ -385,27 +388,20 @@ public DiscoveryNodes newNode(DiscoveryNode node) {
385
388
* Returns the changes comparing this nodes to the provided nodes.
386
389
*/
387
390
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 <>();
390
393
for (DiscoveryNode node : other ) {
391
- if (! this .nodeExists (node )) {
394
+ if (this .nodeExists (node ) == false ) {
392
395
removed .add (node );
393
396
}
394
397
}
395
398
for (DiscoveryNode node : this ) {
396
- if (! other .nodeExists (node )) {
399
+ if (other .nodeExists (node ) == false ) {
397
400
added .add (node );
398
401
}
399
402
}
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 ),
409
405
Collections .unmodifiableList (added ));
410
406
}
411
407
@@ -429,8 +425,8 @@ public String toString() {
429
425
public static class Delta {
430
426
431
427
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 ;
434
430
private final List <DiscoveryNode > removed ;
435
431
private final List <DiscoveryNode > added ;
436
432
@@ -448,13 +444,15 @@ public boolean hasChanges() {
448
444
}
449
445
450
446
public boolean masterNodeChanged () {
451
- return newMasterNode != null ;
447
+ return Objects . equals ( newMasterNode , previousMasterNode ) == false ;
452
448
}
453
449
450
+ @ Nullable
454
451
public DiscoveryNode previousMasterNode () {
455
452
return previousMasterNode ;
456
453
}
457
454
455
+ @ Nullable
458
456
public DiscoveryNode newMasterNode () {
459
457
return newMasterNode ;
460
458
}
@@ -476,51 +474,45 @@ public List<DiscoveryNode> addedNodes() {
476
474
}
477
475
478
476
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 ());
487
482
}
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 ());
495
486
}
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 ( ',' );
505
496
}
497
+ summary .append ("}" );
506
498
}
507
499
if (added ()) {
508
500
// don't print if there is one added, and it is us
509
501
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 (", " );
512
504
}
513
- sb .append ("added {" );
505
+ summary .append ("added {" );
514
506
for (DiscoveryNode node : addedNodes ()) {
515
507
if (!node .getId ().equals (localNodeId )) {
516
508
// don't print ourself
517
- sb .append (node ).append (',' );
509
+ summary .append (node ).append (',' );
518
510
}
519
511
}
520
- sb .append ("}" );
512
+ summary .append ("}" );
521
513
}
522
514
}
523
- return sb .toString ();
515
+ return summary .toString ();
524
516
}
525
517
}
526
518
0 commit comments