@@ -510,17 +510,22 @@ public Set<TaskId> getBannedTaskIds() {
510
510
return Collections .unmodifiableSet (banedParents .keySet ());
511
511
}
512
512
513
+ public Collection <DiscoveryNode > startBanOnChildrenNodes (long taskId , Runnable onChildTasksCompleted ) {
514
+ return startBanOnChildrenNodes (taskId , onChildTasksCompleted , "unknown" );
515
+ }
516
+
513
517
/**
514
518
* Start rejecting new child requests as the parent task was cancelled.
515
519
*
516
520
* @param taskId the parent task id
517
521
* @param onChildTasksCompleted called when all child tasks are completed or failed
522
+ * @param reason the ban reason
518
523
* @return the set of current nodes that have outstanding child tasks
519
524
*/
520
- public Collection <DiscoveryNode > startBanOnChildrenNodes (long taskId , Runnable onChildTasksCompleted ) {
525
+ public Collection <DiscoveryNode > startBanOnChildrenNodes (long taskId , Runnable onChildTasksCompleted , String reason ) {
521
526
final CancellableTaskHolder holder = cancellableTasks .get (taskId );
522
527
if (holder != null ) {
523
- return holder .startBan (onChildTasksCompleted );
528
+ return holder .startBan (onChildTasksCompleted , reason );
524
529
} else {
525
530
onChildTasksCompleted .run ();
526
531
return Collections .emptySet ();
@@ -585,6 +590,7 @@ private static class CancellableTaskHolder {
585
590
private List <Runnable > cancellationListeners = null ;
586
591
private Map <DiscoveryNode , Integer > childTasksPerNode = null ;
587
592
private boolean banChildren = false ;
593
+ private String banReason ;
588
594
private List <Runnable > childTaskCompletedListeners = null ;
589
595
590
596
CancellableTaskHolder (CancellableTask task ) {
@@ -662,7 +668,7 @@ public CancellableTask getTask() {
662
668
663
669
synchronized void registerChildNode (DiscoveryNode node ) {
664
670
if (banChildren ) {
665
- throw new TaskCancelledException ("The parent task was cancelled, shouldn't start any child tasks" );
671
+ throw new TaskCancelledException ("The parent task was cancelled, shouldn't start any child tasks, " + banReason );
666
672
}
667
673
if (childTasksPerNode == null ) {
668
674
childTasksPerNode = new HashMap <>();
@@ -686,11 +692,13 @@ void unregisterChildNode(DiscoveryNode node) {
686
692
notifyListeners (listeners );
687
693
}
688
694
689
- Set <DiscoveryNode > startBan (Runnable onChildTasksCompleted ) {
695
+ Set <DiscoveryNode > startBan (Runnable onChildTasksCompleted , String reason ) {
690
696
final Set <DiscoveryNode > pendingChildNodes ;
691
697
final Runnable toRun ;
692
698
synchronized (this ) {
693
699
banChildren = true ;
700
+ assert reason != null ;
701
+ banReason = reason ;
694
702
if (childTasksPerNode == null ) {
695
703
pendingChildNodes = Collections .emptySet ();
696
704
} else {
0 commit comments