Make Run runtime state authoritative
This commit is contained in:
@@ -50,7 +50,7 @@ func (svc *CoreService) projectLifecycleJobResult(job domain.Job, stamp time.Tim
|
||||
}
|
||||
return svc.recordAuditEvent("run:"+job.RunEndpointID, "config.write.result", "server-instance", instance.ID, domain.AuditResultSuccess, job.ExecutionResult.AuditSummary)
|
||||
}
|
||||
nextState, ok := lifecycleProjectedState(job.Capability, job.State)
|
||||
nextState, ok := lifecycleProjectedState(job.Capability, job.State, job.ExecutionResult)
|
||||
if !ok || job.ServerInstanceID == "" {
|
||||
return nil
|
||||
}
|
||||
@@ -100,10 +100,16 @@ func (svc *CoreService) projectServerDeploymentProgress(job domain.Job, stamp ti
|
||||
return svc.store.ServerInstances().Update(instance)
|
||||
}
|
||||
|
||||
func lifecycleProjectedState(capability string, jobState domain.JobState) (domain.ServerInstanceState, bool) {
|
||||
if capability != domain.LifecycleCapabilityInstall && capability != domain.LifecycleCapabilityStart && capability != domain.LifecycleCapabilityStop {
|
||||
func lifecycleProjectedState(capability string, jobState domain.JobState, result domain.JobExecutionResult) (domain.ServerInstanceState, bool) {
|
||||
if capability != domain.LifecycleCapabilityInstall && capability != domain.LifecycleCapabilityStart && capability != domain.LifecycleCapabilityStop && capability != domain.LifecycleCapabilityStatus {
|
||||
return "", false
|
||||
}
|
||||
if capability == domain.LifecycleCapabilityStatus {
|
||||
if jobState != domain.JobStateSucceeded {
|
||||
return "", false
|
||||
}
|
||||
return lifecycleStateFromProcessResult(result)
|
||||
}
|
||||
if jobState == domain.JobStateFailed || jobState == domain.JobStateCancelled {
|
||||
return domain.ServerInstanceStateFailed, true
|
||||
}
|
||||
@@ -114,10 +120,31 @@ func lifecycleProjectedState(capability string, jobState domain.JobState) (domai
|
||||
case domain.LifecycleCapabilityInstall:
|
||||
return domain.ServerInstanceStateReady, true
|
||||
case domain.LifecycleCapabilityStart:
|
||||
return domain.ServerInstanceStateRunning, true
|
||||
return lifecycleStateFromProcessResult(result)
|
||||
case domain.LifecycleCapabilityStop:
|
||||
if state, ok := lifecycleStateFromProcessResult(result); ok {
|
||||
return state, true
|
||||
}
|
||||
return domain.ServerInstanceStateStopped, true
|
||||
default:
|
||||
return "", false
|
||||
}
|
||||
}
|
||||
|
||||
func lifecycleStateFromProcessResult(result domain.JobExecutionResult) (domain.ServerInstanceState, bool) {
|
||||
switch strings.TrimSpace(result.ProcessState) {
|
||||
case "running":
|
||||
return domain.ServerInstanceStateRunning, true
|
||||
case "stopped", "not-started":
|
||||
return domain.ServerInstanceStateStopped, true
|
||||
case "exited":
|
||||
switch strings.TrimSpace(result.ExitClassification) {
|
||||
case "requested-stop", "forced-stop", "already-stopped":
|
||||
return domain.ServerInstanceStateStopped, true
|
||||
default:
|
||||
return domain.ServerInstanceStateFailed, true
|
||||
}
|
||||
default:
|
||||
return "", false
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user