[go: nahoru, domu]

Skip to content
This repository has been archived by the owner on Nov 16, 2023. It is now read-only.

Commit

Permalink
Refine Framework golang iteration (#28)
Browse files Browse the repository at this point in the history
  • Loading branch information
yqwang-ms committed Jul 17, 2019
1 parent 157c3bf commit 243996c
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 32 deletions.
27 changes: 13 additions & 14 deletions pkg/apis/frameworkcontroller/v1/funcs.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ func (f *Framework) Key() string {
func (f *Framework) TaskRoleSpec(taskRoleName string) *TaskRoleSpec {
for _, taskRole := range f.Spec.TaskRoles {
if taskRole.Name == taskRoleName {
return &taskRole
return taskRole
}
}
panic(fmt.Errorf("[%v]: TaskRole is not found in Spec", taskRoleName))
Expand Down Expand Up @@ -154,13 +154,12 @@ func (ts *TaskStatus) CompletionType() CompletionType {
return ts.AttemptStatus.CompletionStatus.Type
}

func (f *Framework) TaskRoleStatuses() []TaskRoleStatus {
func (f *Framework) TaskRoleStatuses() []*TaskRoleStatus {
return f.Status.AttemptStatus.TaskRoleStatuses
}

func (f *Framework) TaskRoleStatus(taskRoleName string) *TaskRoleStatus {
for i := range f.TaskRoleStatuses() {
taskRoleStatus := &f.TaskRoleStatuses()[i]
for _, taskRoleStatus := range f.TaskRoleStatuses() {
if taskRoleStatus.Name == taskRoleName {
return taskRoleStatus
}
Expand All @@ -171,7 +170,7 @@ func (f *Framework) TaskRoleStatus(taskRoleName string) *TaskRoleStatus {
func (f *Framework) TaskStatus(taskRoleName string, taskIndex int32) *TaskStatus {
taskRoleStatus := f.TaskRoleStatus(taskRoleName)
if 0 <= taskIndex && taskIndex < int32(len(taskRoleStatus.TaskStatuses)) {
return &taskRoleStatus.TaskStatuses[taskIndex]
return taskRoleStatus.TaskStatuses[taskIndex]
}
panic(fmt.Errorf("[%v][%v]: Task is not found in Status", taskRoleName, taskIndex))
}
Expand Down Expand Up @@ -237,14 +236,14 @@ func (ct CompletionType) ContainsAttribute(attribute CompletionTypeAttribute) bo
return false
}

func (trs *TaskRoleStatus) GetTaskStatuses(selector TaskStatusSelector) []TaskStatus {
func (trs *TaskRoleStatus) GetTaskStatuses(selector TaskStatusSelector) []*TaskStatus {
if selector == nil {
return trs.TaskStatuses
}

taskStatuses := []TaskStatus{}
taskStatuses := []*TaskStatus{}
for _, taskStatus := range trs.TaskStatuses {
if selector(&taskStatus) {
if selector(taskStatus) {
taskStatuses = append(taskStatuses, taskStatus)
}
}
Expand Down Expand Up @@ -433,20 +432,20 @@ func (f *Framework) NewFrameworkAttemptStatus(
}
}

func (f *Framework) NewTaskRoleStatuses() []TaskRoleStatus {
trss := []TaskRoleStatus{}
func (f *Framework) NewTaskRoleStatuses() []*TaskRoleStatus {
trss := []*TaskRoleStatus{}
for _, taskRole := range f.Spec.TaskRoles {
trs := TaskRoleStatus{Name: taskRole.Name, TaskStatuses: []TaskStatus{}}
trs := TaskRoleStatus{Name: taskRole.Name, TaskStatuses: []*TaskStatus{}}
for taskIndex := int32(0); taskIndex < taskRole.TaskNumber; taskIndex++ {
trs.TaskStatuses = append(trs.TaskStatuses, f.NewTaskStatus(taskRole.Name, taskIndex))
}
trss = append(trss, trs)
trss = append(trss, &trs)
}
return trss
}

func (f *Framework) NewTaskStatus(taskRoleName string, taskIndex int32) TaskStatus {
return TaskStatus{
func (f *Framework) NewTaskStatus(taskRoleName string, taskIndex int32) *TaskStatus {
return &TaskStatus{
Index: taskIndex,
StartTime: meta.Now(),
CompletionTime: nil,
Expand Down
6 changes: 3 additions & 3 deletions pkg/apis/frameworkcontroller/v1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ type FrameworkSpec struct {
// Only support to update from ExecutionStart to ExecutionStop
ExecutionType ExecutionType `json:"executionType"`
RetryPolicy RetryPolicySpec `json:"retryPolicy"`
TaskRoles []TaskRoleSpec `json:"taskRoles"`
TaskRoles []*TaskRoleSpec `json:"taskRoles"`
}

type TaskRoleSpec struct {
Expand Down Expand Up @@ -270,15 +270,15 @@ type FrameworkAttemptStatus struct {
// ConfigMapUID can also universally locate the FrameworkAttemptInstance.
ConfigMapUID *types.UID `json:"configMapUID"`
CompletionStatus *CompletionStatus `json:"completionStatus"`
TaskRoleStatuses []TaskRoleStatus `json:"taskRoleStatuses"`
TaskRoleStatuses []*TaskRoleStatus `json:"taskRoleStatuses"`
}

type TaskRoleStatus struct {
// TaskRoleName
Name string `json:"name"`

// Tasks with TaskIndex in range [0, TaskNumber)
TaskStatuses []TaskStatus `json:"taskStatuses"`
TaskStatuses []*TaskStatus `json:"taskStatuses"`
}

type TaskStatus struct {
Expand Down
24 changes: 18 additions & 6 deletions pkg/apis/frameworkcontroller/v1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pkg/barrier/barrier.go
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ func isBarrierPassed(f *ci.Framework) bool {
if f.Status != nil {
for _, taskRoleStatus := range f.TaskRoleStatuses() {
for _, taskStatus := range taskRoleStatus.TaskStatuses {
if isTaskReady(&taskStatus) {
if isTaskReady(taskStatus) {
readyTaskCount++
}
}
Expand Down
12 changes: 4 additions & 8 deletions pkg/controller/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -1635,10 +1635,8 @@ func (c *FrameworkController) completeFrameworkAttempt(
f.Status.AttemptStatus.CompletionStatus = completionStatus
}

for i := range f.TaskRoleStatuses() {
taskRoleStatus := &f.TaskRoleStatuses()[i]
for j := range taskRoleStatus.TaskStatuses {
taskStatus := &taskRoleStatus.TaskStatuses[j]
for _, taskRoleStatus := range f.TaskRoleStatuses() {
for _, taskStatus := range taskRoleStatus.TaskStatuses {
if taskStatus.AttemptStatus.CompletionStatus == nil {
taskStatus.AttemptStatus.CompletionStatus =
ci.CompletionCodeFrameworkAttemptCompletion.
Expand All @@ -1648,11 +1646,9 @@ func (c *FrameworkController) completeFrameworkAttempt(
}

if force {
for i := range f.TaskRoleStatuses() {
taskRoleStatus := &f.TaskRoleStatuses()[i]
for _, taskRoleStatus := range f.TaskRoleStatuses() {
taskRoleName := taskRoleStatus.Name
for j := range taskRoleStatus.TaskStatuses {
taskStatus := &taskRoleStatus.TaskStatuses[j]
for _, taskStatus := range taskRoleStatus.TaskStatuses {
taskIndex := taskStatus.Index
if taskStatus.State != ci.TaskCompleted {
if taskStatus.State != ci.TaskAttemptCompleted {
Expand Down

0 comments on commit 243996c

Please sign in to comment.