fix: recover run runtime state and logs
This commit is contained in:
@@ -29,8 +29,20 @@ func (svc *CoreService) ReportRunLifecycle(report domain.RunLifecycleReport) (do
|
||||
|
||||
stamp := svc.now()
|
||||
nextState, projected := lifecycleProjectedState(report.Capability, report.State, report.ExecutionResult)
|
||||
if lifecycleObservationIsStale(instance, report) {
|
||||
projected = false
|
||||
nextState = instance.State
|
||||
}
|
||||
if projected {
|
||||
instance.State = nextState
|
||||
if report.ManagedProcessID != "" {
|
||||
instance.LifecycleProcessID = report.ManagedProcessID
|
||||
instance.LifecycleObservationSeq = report.ObservationSeq
|
||||
instance.LifecycleObservedAt = report.ObservedAt
|
||||
if instance.LifecycleObservedAt.IsZero() {
|
||||
instance.LifecycleObservedAt = stamp
|
||||
}
|
||||
}
|
||||
instance.UpdatedAt = stamp
|
||||
if err := validator.ValidateServerInstance(instance); err != nil {
|
||||
return domain.RunLifecycleReportResult{}, err
|
||||
@@ -49,6 +61,16 @@ func (svc *CoreService) ReportRunLifecycle(report domain.RunLifecycleReport) (do
|
||||
return domain.CopyRunLifecycleReportResult(domain.RunLifecycleReportResult{Accepted: true, RunEndpointID: report.RunEndpointID, ServerInstanceID: report.ServerInstanceID, ProjectedState: nextState, ServerTime: stamp}), nil
|
||||
}
|
||||
|
||||
func lifecycleObservationIsStale(instance domain.ServerInstance, report domain.RunLifecycleReport) bool {
|
||||
if report.ManagedProcessID == "" || instance.LifecycleProcessID == "" {
|
||||
return false
|
||||
}
|
||||
if report.ManagedProcessID == instance.LifecycleProcessID {
|
||||
return report.ObservationSeq <= instance.LifecycleObservationSeq
|
||||
}
|
||||
return !report.ObservedAt.IsZero() && !instance.LifecycleObservedAt.IsZero() && report.ObservedAt.Before(instance.LifecycleObservedAt)
|
||||
}
|
||||
|
||||
func lifecycleReportSummary(report domain.RunLifecycleReport, projectedState domain.ServerInstanceState, projected bool) string {
|
||||
for _, candidate := range []string{report.ExecutionResult.AuditSummary, report.Progress.Message, report.Message, report.ErrorCode} {
|
||||
if strings.TrimSpace(candidate) != "" {
|
||||
|
||||
Reference in New Issue
Block a user