@@ -1535,53 +1535,57 @@ func (c *FrameworkController) syncFrameworkAttemptCompletionPolicy(
1535
1535
return true
1536
1536
}
1537
1537
1538
- // The Framework must not Completing or Completed, so TaskRoles/Tasks in
1539
- // f.Spec must fully contain not DeletionPending (ScaleDown) TaskRoles/Tasks
1540
- // in f.Status, thus completedTaskCount must <= totalTaskCount.
1541
1538
totalTaskCount := f .GetTotalTaskCountSpec ()
1542
- completedTaskCount := f .GetTaskCountStatus (completedTaskSelector )
1543
- if completedTaskCount >= totalTaskCount {
1544
- var lastCompletedTaskStatus * ci.TaskStatus
1545
- var lastCompletedTaskRoleName string
1546
- for _ , taskRoleSpec := range f .Spec .TaskRoles {
1547
- taskRoleName := taskRoleSpec .Name
1548
- taskRoleStatus := f .GetTaskRoleStatus (taskRoleName )
1549
- if taskRoleStatus == nil {
1550
- // Unreachable
1551
- continue
1552
- }
1539
+ // At least one completed Task is needed to trigger its
1540
+ // FrameworkAttemptCompletionPolicy.
1541
+ if totalTaskCount >= 1 {
1542
+ completedTaskCount := f .GetTaskCountStatus (completedTaskSelector )
1543
+ // The Framework must not Completing or Completed, so TaskRoles/Tasks in
1544
+ // f.Spec must fully contain not DeletionPending (ScaleDown) TaskRoles/Tasks
1545
+ // in f.Status, thus completedTaskCount must <= totalTaskCount.
1546
+ if completedTaskCount >= totalTaskCount {
1547
+ var lastCompletedTaskStatus * ci.TaskStatus
1548
+ var lastCompletedTaskRoleName string
1549
+ for _ , taskRoleSpec := range f .Spec .TaskRoles {
1550
+ taskRoleName := taskRoleSpec .Name
1551
+ taskRoleStatus := f .GetTaskRoleStatus (taskRoleName )
1552
+ if taskRoleStatus == nil {
1553
+ // Unreachable
1554
+ continue
1555
+ }
1553
1556
1554
- roleTotalTaskCount := taskRoleSpec .TaskNumber
1555
- if roleTotalTaskCount == 0 {
1556
- continue
1557
- }
1557
+ roleTotalTaskCount := taskRoleSpec .TaskNumber
1558
+ if roleTotalTaskCount == 0 {
1559
+ continue
1560
+ }
1558
1561
1559
- roleLastCompletedTask := taskRoleStatus .CompletionTimeOrderedTaskStatus (
1560
- completedTaskSelector , roleTotalTaskCount - 1 )
1562
+ roleLastCompletedTask := taskRoleStatus .CompletionTimeOrderedTaskStatus (
1563
+ completedTaskSelector , roleTotalTaskCount - 1 )
1561
1564
1562
- if lastCompletedTaskStatus == nil ||
1563
- roleLastCompletedTask .CompletionTime .Time .After (
1564
- lastCompletedTaskStatus .CompletionTime .Time ) {
1565
- lastCompletedTaskStatus = roleLastCompletedTask
1566
- lastCompletedTaskRoleName = taskRoleName
1565
+ if lastCompletedTaskStatus == nil ||
1566
+ roleLastCompletedTask .CompletionTime .Time .After (
1567
+ lastCompletedTaskStatus .CompletionTime .Time ) {
1568
+ lastCompletedTaskStatus = roleLastCompletedTask
1569
+ lastCompletedTaskRoleName = taskRoleName
1570
+ }
1567
1571
}
1568
- }
1569
1572
1570
- firstTriggerCompletionStatus = ci .NewCompletedTaskTriggeredCompletionStatus (
1571
- lastCompletedTaskStatus , lastCompletedTaskRoleName ,
1572
- completedTaskCount , totalTaskCount )
1573
+ firstTriggerCompletionStatus = ci .NewCompletedTaskTriggeredCompletionStatus (
1574
+ lastCompletedTaskStatus , lastCompletedTaskRoleName ,
1575
+ completedTaskCount , totalTaskCount )
1573
1576
1574
- if firstTriggerCompletionStatus .Trigger == nil {
1575
- klog .Infof ("[%v]: syncFrameworkAttemptCompletionPolicy: %v" , f .Key (),
1576
- firstTriggerCompletionStatus .Diagnostics )
1577
- } else {
1578
- klog .Infof ("[%v][%v][%v]: syncFrameworkAttemptCompletionPolicy: %v" , f .Key (),
1579
- firstTriggerCompletionStatus .Trigger .TaskRoleName ,
1580
- firstTriggerCompletionStatus .Trigger .TaskIndex ,
1581
- firstTriggerCompletionStatus .Trigger .Message )
1577
+ if firstTriggerCompletionStatus .Trigger == nil {
1578
+ klog .Infof ("[%v]: syncFrameworkAttemptCompletionPolicy: %v" , f .Key (),
1579
+ firstTriggerCompletionStatus .Diagnostics )
1580
+ } else {
1581
+ klog .Infof ("[%v][%v][%v]: syncFrameworkAttemptCompletionPolicy: %v" , f .Key (),
1582
+ firstTriggerCompletionStatus .Trigger .TaskRoleName ,
1583
+ firstTriggerCompletionStatus .Trigger .TaskIndex ,
1584
+ firstTriggerCompletionStatus .Trigger .Message )
1585
+ }
1586
+ c .completeFrameworkAttempt (f , false , firstTriggerCompletionStatus )
1587
+ return true
1582
1588
}
1583
- c .completeFrameworkAttempt (f , false , firstTriggerCompletionStatus )
1584
- return true
1585
1589
}
1586
1590
1587
1591
return false
@@ -1998,18 +2002,22 @@ func (c *FrameworkController) syncTaskState(
1998
2002
return nil
1999
2003
}
2000
2004
2001
- // The Framework must not Completing or Completed, so TaskRoles/Tasks in
2002
- // f.Spec must fully contain not DeletionPending (ScaleDown) TaskRoles/Tasks
2003
- // in f.Status, thus completedTaskCount must <= totalTaskCount.
2004
2005
totalTaskCount := f .GetTotalTaskCountSpec ()
2005
- completedTaskCount := f .GetTaskCountStatus (completedTaskSelector )
2006
- if completedTaskCount >= totalTaskCount {
2007
- triggerCompletionStatus = ci .NewCompletedTaskTriggeredCompletionStatus (
2008
- taskStatus , taskRoleName , completedTaskCount , totalTaskCount )
2009
-
2010
- klog .Info (logPfx + triggerCompletionStatus .Trigger .Message )
2011
- c .completeFrameworkAttempt (f , false , triggerCompletionStatus )
2012
- return nil
2006
+ // At least one completed Task is needed to trigger its
2007
+ // FrameworkAttemptCompletionPolicy.
2008
+ if taskStatus .IsCompleted (true ) && totalTaskCount >= 1 {
2009
+ completedTaskCount := f .GetTaskCountStatus (completedTaskSelector )
2010
+ // The Framework must not Completing or Completed, so TaskRoles/Tasks in
2011
+ // f.Spec must fully contain not DeletionPending (ScaleDown) TaskRoles/Tasks
2012
+ // in f.Status, thus completedTaskCount must <= totalTaskCount.
2013
+ if completedTaskCount >= totalTaskCount {
2014
+ triggerCompletionStatus = ci .NewCompletedTaskTriggeredCompletionStatus (
2015
+ taskStatus , taskRoleName , completedTaskCount , totalTaskCount )
2016
+
2017
+ klog .Info (logPfx + triggerCompletionStatus .Trigger .Message )
2018
+ c .completeFrameworkAttempt (f , false , triggerCompletionStatus )
2019
+ return nil
2020
+ }
2013
2021
}
2014
2022
2015
2023
return nil
0 commit comments