fix: recover run runtime state and logs

This commit is contained in:
npc0-hue
2026-08-07 12:01:26 +08:00
parent 3818fa0344
commit b789925ae5
23 changed files with 297 additions and 78 deletions
+30
View File
@@ -219,6 +219,36 @@ func (svc *CoreService) QueryLogStream(query domain.LogStreamCursorQuery) (domai
}), nil
}
func (svc *CoreService) GetRunLogStreamProgress(request domain.RunLogStreamProgress) (domain.RunLogStreamProgressResult, error) {
if err := validator.ValidateRunLogStreamProgress(request); err != nil {
return domain.RunLogStreamProgressResult{}, err
}
if _, err := svc.validatedRunSession(request.RunEndpointID, request.SessionToken); err != nil {
return domain.RunLogStreamProgressResult{}, err
}
instance, err := svc.store.ServerInstances().Get(request.ServerInstanceID)
if err != nil {
return domain.RunLogStreamProgressResult{}, err
}
if instance.RunEndpointID != request.RunEndpointID {
return domain.RunLogStreamProgressResult{}, validationError("runEndpointId must match server instance")
}
if !strings.HasPrefix(request.LogStreamID, "run."+request.RunEndpointID+"."+request.ServerInstanceID+".") {
return domain.RunLogStreamProgressResult{}, validationError("logStreamId is not a bound run stream")
}
latest := uint64(0)
stream, err := svc.store.LogStreams().Get(request.LogStreamID)
if err == nil {
if stream.ServerInstanceID != instance.ID {
return domain.RunLogStreamProgressResult{}, validationError("logStreamId does not belong to server instance")
}
latest = stream.LatestSeq
} else if !errors.Is(err, repo.ErrNotFound) {
return domain.RunLogStreamProgressResult{}, err
}
return domain.RunLogStreamProgressResult{Accepted: true, RunEndpointID: request.RunEndpointID, ServerInstanceID: instance.ID, LogStreamID: request.LogStreamID, LatestSeq: latest, ServerTime: svc.now()}, nil
}
func validateLogBatchStream(batch domain.LogBatchIngest, stream domain.LogStream) error {
if stream.ID != batch.LogStreamID {
return validationError("logStreamId must match stream")