Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions cli/cmd/predict.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ import (
"github.com/cortexlabs/cortex/pkg/lib/errors"
"github.com/cortexlabs/cortex/pkg/lib/files"
"github.com/cortexlabs/cortex/pkg/lib/json"
libstrings "github.com/cortexlabs/cortex/pkg/lib/strings"
s "github.com/cortexlabs/cortex/pkg/lib/strings"
libtime "github.com/cortexlabs/cortex/pkg/lib/time"
"github.com/cortexlabs/cortex/pkg/lib/urls"
Expand Down Expand Up @@ -83,7 +82,7 @@ var predictCmd = &cobra.Command{
predictResponse, err := makePredictRequest(apiURL, samplesJSONPath)
if err != nil {
if strings.Contains(err.Error(), "503 Service Temporarily Unavailable") || strings.Contains(err.Error(), "502 Bad Gateway") {
errors.Exit(ErrorAPINotReady(apiName, resource.StatusAPIUpdating.Message()))
errors.Exit(ErrorAPINotReady(apiName, resource.StatusUpdating.Message()))
}
errors.Exit(err)
}
Expand Down Expand Up @@ -120,7 +119,7 @@ var predictCmd = &cobra.Command{
json, _ := json.Marshal(prediction.PredictedValueReversed)
fmt.Println(s.TrimPrefixAndSuffix(string(json), "\""))
} else {
fmt.Println(libstrings.Round(prediction.PredictedValue, 2, true))
fmt.Println(s.Round(prediction.PredictedValue, 2, true))
}
}
}
Expand Down
109 changes: 49 additions & 60 deletions pkg/operator/api/resource/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,27 +90,24 @@ const (
StatusSkipped
StatusParentFailed
StatusParentKilled
StatusKilledOOM

// Data statuses
StatusDataRunning
StatusDataSucceeded
StatusDataFailed
StatusDataKilled
StatusRunning
StatusSucceeded
StatusFailed
StatusKilled

// API statuses
StatusAPIUpdating
StatusAPIReady
StatusAPIStopping
StatusAPIStopped
StatusAPIError
StatusUpdating
StatusReady
StatusStopping
StatusStopped
StatusError

// Additional API group statuses (i.e. aggregated API status)
StatusAPIGroupPendingUpdate
StatusAPIGroupParentFailed
StatusAPIGroupParentKilled
StatusAPIGroupUpdateSkipped

StatusDataKilledOOM
StatusPendingUpdate
StatusUpdateSkipped
)

var statusCodes = []string{
Expand All @@ -122,37 +119,35 @@ var statusCodes = []string{
"status_skipped",
"status_parent_failed",
"status_parent_killed",
"status_killed_oom",

"status_data_running",
"status_data_succeeded",
"status_data_failed",
"status_data_killed",

"status_api_updating",
"status_api_ready",
"status_api_stopping",
"status_api_stopped",
"status_api_error",
"status_running",
"status_succeeded",
"status_failed",
"status_killed",

"status_api_group_pending_update",
"status_api_group_parent_failed",
"status_api_group_parent_killed",
"status_api_group_update_skipped",
"status_updating",
"status_ready",
"status_stopping",
"status_stopped",
"status_error",

"status_data_oom",
"status_pending_update",
"status_update_skipped",
}

var _ = [1]int{}[int(StatusDataKilledOOM)-(len(statusCodes)-1)] // Ensure list length matches
var _ = [1]int{}[int(StatusUpdateSkipped)-(len(statusCodes)-1)] // Ensure list length matches

var statusCodeMessages = []string{
"unknown", // StatusUnknown

"pending", // StatusPending
"compute unavailable", // StatusPendingCompute
"pending", // StatusWaiting
"skipped", // StatusSkipped
"upstream error", // StatusParentFailed
"upstream termination", // StatusParentKilled
"pending", // StatusPending
"compute unavailable", // StatusPendingCompute
"pending", // StatusWaiting
"skipped", // StatusSkipped
"upstream error", // StatusParentFailed
"upstream termination", // StatusParentKilled
"terminated (out of mem)", // StatusDataOOM

"running", // StatusDataRunning
"ready", // StatusDataSucceeded
Expand All @@ -165,15 +160,12 @@ var statusCodeMessages = []string{
"stopped", // StatusAPIStopped
"error", // StatusAPIError

"update pending", // StatusAPIGroupPendingUpdate
"upstream error", // StatusAPIGroupParentFailed
"upstream termination", // StatusAPIGroupParentKilled
"update skipped", // StatusAPIGroupUpdateSkipped
"update pending", // StatusAPIGroupPendingUpdate
"update skipped", // StatusAPIGroupUpdateSkipped

"terminated (out of mem)", // StatusDataOOM
}

var _ = [1]int{}[int(StatusDataKilledOOM)-(len(statusCodeMessages)-1)] // Ensure list length matches
var _ = [1]int{}[int(StatusUpdateSkipped)-(len(statusCodeMessages)-1)] // Ensure list length matches

// StatusDataRunning aliases
const (
Expand All @@ -193,27 +185,24 @@ var statusSortBuckets = []int{
2, // StatusSkipped
2, // StatusParentFailed
2, // StatusParentKilled
1, // StatusKilledOOM

3, // StatusDataRunning
0, // StatusDataSucceeded
1, // StatusDataFailed
1, // StatusDataKilled

3, // StatusAPIUpdating
0, // StatusAPIReady
3, // StatusAPIStopping
1, // StatusAPIStopped
1, // StatusAPIError
3, // StatusRunning
0, // StatusSucceeded
1, // StatusFailed
1, // StatusKilled

0, // StatusAPIGroupPendingUpdate
2, // StatusAPIGroupParentFailed
2, // StatusAPIGroupParentKilled
2, // StatusAPIGroupUpdateSkipped
3, // StatusUpdating
0, // StatusReady
3, // StatusStopping
1, // StatusStopped
1, // StatusError

1, // StatusDataKilledOOM
0, // StatusPendingUpdate
2, // StatusUpdateSkipped
}

var _ = [1]int{}[int(StatusDataKilledOOM)-(len(statusSortBuckets)-1)] // Ensure list length matches
var _ = [1]int{}[int(StatusUpdateSkipped)-(len(statusSortBuckets)-1)] // Ensure list length matches

func (code StatusCode) String() string {
if int(code) < 0 || int(code) >= len(statusCodes) {
Expand All @@ -237,7 +226,7 @@ func (code StatusCode) SortBucket() int {
}

func (status *DataStatus) Message() string {
if status.Code == StatusDataRunning {
if status.Code == StatusRunning {
switch status.ResourceType {
case RawColumnType:
return RawColumnRunningMessage
Expand Down
58 changes: 23 additions & 35 deletions pkg/operator/workloads/api_status.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,22 +164,22 @@ func getReplicaCountsMap(podList []corev1.Pod, ctx *context.Context) map[string]

func apiStatusCode(apiStatus *resource.APIStatus, failedWorkloadIDs strset.Set) resource.StatusCode {
if failedWorkloadIDs.Has(apiStatus.WorkloadID) {
return resource.StatusAPIError
return resource.StatusError
}
if apiStatus.RequestedReplicas == 0 {
if apiStatus.TotalReady() > 0 {
return resource.StatusAPIStopping
return resource.StatusStopping
}
return resource.StatusAPIStopped
return resource.StatusStopped
}
if apiStatus.ReadyUpdated == apiStatus.RequestedReplicas {
return resource.StatusAPIReady
return resource.StatusReady
}
if apiStatus.FailedUpdated > 0 {
return resource.StatusAPIError
return resource.StatusError
}
if apiStatus.TotalReady() > 0 {
return resource.StatusAPIUpdating
return resource.StatusUpdating
}

return resource.StatusPending
Expand All @@ -195,15 +195,15 @@ func updateAPIStatusCodeByParents(apiStatus *resource.APIStatus, dataStatuses ma
parentSkipped := false
for dependency := range allDependencies {
switch dataStatuses[dependency].Code {
case resource.StatusDataKilled, resource.StatusDataKilledOOM:
case resource.StatusKilled, resource.StatusKilledOOM:
apiStatus.Code = resource.StatusParentKilled
return
case resource.StatusDataFailed:
case resource.StatusFailed:
apiStatus.Code = resource.StatusParentFailed
return
case resource.StatusSkipped:
parentSkipped = true
case resource.StatusDataSucceeded:
case resource.StatusSucceeded:
numSucceeded++
}
}
Expand All @@ -214,7 +214,7 @@ func updateAPIStatusCodeByParents(apiStatus *resource.APIStatus, dataStatuses ma
}

if numSucceeded == len(allDependencies) {
apiStatus.Code = resource.StatusAPIUpdating
apiStatus.Code = resource.StatusUpdating
}
}

Expand Down Expand Up @@ -276,7 +276,7 @@ func getActiveAPIStatus(apiStatuses []*resource.APIStatus, ctx *context.Context)

func apiGroupStatusCode(apiStatuses []*resource.APIStatus, ctx *context.Context) resource.StatusCode {
if len(apiStatuses) == 0 {
return resource.StatusAPIStopped
return resource.StatusStopped
}

apiName := apiStatuses[0].APIName
Expand All @@ -285,10 +285,10 @@ func apiGroupStatusCode(apiStatuses []*resource.APIStatus, ctx *context.Context)
if ctxAPI == nil {
for _, apiStatus := range apiStatuses {
if apiStatus.TotalReady() > 0 {
return resource.StatusAPIStopping
return resource.StatusStopping
}
}
return resource.StatusAPIStopped
return resource.StatusStopped
}

var ctxAPIStatus *resource.APIStatus
Expand All @@ -306,30 +306,18 @@ func apiGroupStatusCode(apiStatuses []*resource.APIStatus, ctx *context.Context)
}

switch ctxAPIStatus.Code {
case resource.StatusUnknown:
return resource.StatusUnknown
case resource.StatusUnknown, resource.StatusPendingCompute,
resource.StatusParentFailed, resource.StatusParentKilled, resource.StatusUpdating,
resource.StatusReady, resource.StatusStopping, resource.StatusError:
return ctxAPIStatus.Code
case resource.StatusPending:
return resource.StatusAPIGroupPendingUpdate
case resource.StatusPendingCompute:
return resource.StatusPendingCompute
return resource.StatusPendingUpdate
case resource.StatusWaiting:
return resource.StatusAPIUpdating
return resource.StatusUpdating
case resource.StatusSkipped:
return resource.StatusAPIGroupUpdateSkipped
case resource.StatusParentFailed:
return resource.StatusAPIGroupParentFailed
case resource.StatusParentKilled:
return resource.StatusAPIGroupParentKilled
case resource.StatusAPIUpdating:
return resource.StatusAPIUpdating
case resource.StatusAPIReady:
return resource.StatusAPIReady
case resource.StatusAPIStopping:
return resource.StatusAPIStopping
case resource.StatusAPIStopped:
return resource.StatusAPIGroupPendingUpdate
case resource.StatusAPIError:
return resource.StatusAPIError
return resource.StatusUpdateSkipped
case resource.StatusStopped:
return resource.StatusPendingUpdate
}

return resource.StatusUnknown
Expand All @@ -346,7 +334,7 @@ func setInsufficientComputeAPIStatusCodes(apiStatuses map[string]*resource.APISt
}

for _, apiStatus := range apiStatuses {
if apiStatus.Code == resource.StatusPending || apiStatus.Code == resource.StatusWaiting || apiStatus.Code == resource.StatusAPIUpdating {
if apiStatus.Code == resource.StatusPending || apiStatus.Code == resource.StatusWaiting || apiStatus.Code == resource.StatusUpdating {
if _, ok := stalledWorkloads[apiStatus.WorkloadID]; ok {
apiStatus.Code = resource.StatusPendingCompute
}
Expand Down
18 changes: 9 additions & 9 deletions pkg/operator/workloads/data_status.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,18 +67,18 @@ func dataStatusCode(dataSavedStatus *resource.DataSavedStatus) resource.StatusCo
return resource.StatusPending
}
if dataSavedStatus.End == nil {
return resource.StatusDataRunning
return resource.StatusRunning
}

switch dataSavedStatus.ExitCode {
case resource.ExitCodeDataSucceeded:
return resource.StatusDataSucceeded
return resource.StatusSucceeded
case resource.ExitCodeDataFailed:
return resource.StatusDataFailed
return resource.StatusFailed
case resource.ExitCodeDataKilled:
return resource.StatusDataKilled
return resource.StatusKilled
case resource.ExitCodeDataOOM:
return resource.StatusDataKilledOOM
return resource.StatusKilledOOM
}

return resource.StatusUnknown
Expand All @@ -93,15 +93,15 @@ func updateDataStatusCodeByParents(dataStatus *resource.DataStatus, dataStatuses
parentSkipped := false
for dependency := range allDependencies {
switch dataStatuses[dependency].Code {
case resource.StatusDataKilled, resource.StatusDataKilledOOM:
case resource.StatusKilled, resource.StatusKilledOOM:
dataStatus.Code = resource.StatusParentKilled
return
case resource.StatusDataFailed:
case resource.StatusFailed:
dataStatus.Code = resource.StatusParentFailed
return
case resource.StatusSkipped:
parentSkipped = true
case resource.StatusDataSucceeded:
case resource.StatusSucceeded:
numSucceeded++
}
}
Expand Down Expand Up @@ -150,7 +150,7 @@ func didSparkShortCircuit(dataStatuses map[string]*resource.DataStatus, ctx *con
if _, ok := sparkResources[dataStatus.ResourceID]; !ok {
continue
}
if dataStatus.Code == resource.StatusDataFailed || dataStatus.Code == resource.StatusDataKilled {
if dataStatus.Code == resource.StatusFailed || dataStatus.Code == resource.StatusKilled {
return true
}
}
Expand Down