Freeze SCUM log-source tailing run contract
This commit is contained in:
@@ -14,6 +14,7 @@ const (
|
||||
scumSQLiteTemplateExecutionKind = "sqlite.template-query"
|
||||
scumRCONTemplateExecutionKind = "rcon.template-command"
|
||||
scumGuardedMutationExecutionKind = "sqlite.guarded-mutation"
|
||||
scumParsedLogBatchExecutionKind = "log.parsed-events"
|
||||
)
|
||||
|
||||
func (svc *CoreService) RequestSCUMSchemaProbeForSession(sessionID, serverInstanceID, idempotencyKey string) (domain.SCUMSchemaProbeRequest, domain.RemoteAdapterResult, error) {
|
||||
@@ -217,6 +218,45 @@ func validateSCUMGuardedMutationResultForJob(job domain.Job, result domain.SCUMG
|
||||
return nil
|
||||
}
|
||||
|
||||
func validateSCUMParsedLogBatchResultForJob(job domain.Job, result domain.SCUMParsedLogBatchResult) error {
|
||||
if err := validator.ValidateSCUMParsedLogBatchResult(result); err != nil {
|
||||
return err
|
||||
}
|
||||
expected := job.ExecutionInput.LogSource
|
||||
if expected == nil {
|
||||
return validationError("parsed log batch request is missing from leased job")
|
||||
}
|
||||
if result.JobID != job.ID {
|
||||
return validationError("parsed log batch result does not match leased job identity")
|
||||
}
|
||||
if result.Binding.ServerInstanceID != job.ServerInstanceID || result.Binding.RunEndpointID != job.RunEndpointID {
|
||||
return validationError("parsed log batch result does not match leased server or Run endpoint")
|
||||
}
|
||||
if result.SourceKey != expected.Key || result.StreamKey != expected.StreamKey {
|
||||
return validationError("parsed log batch result does not match leased log source identity")
|
||||
}
|
||||
for key, value := range map[string]string{
|
||||
"parserKey": result.ParserKey,
|
||||
"parserVersion": result.ParserVersion,
|
||||
"parserDigest": result.ParserDigest,
|
||||
"adapterVersion": result.AdapterVersion,
|
||||
} {
|
||||
if expectedValue := strings.TrimSpace(job.ExecutionInput.Inputs[key]); expectedValue != "" && value != expectedValue {
|
||||
return validationError("parsed log batch result does not match leased parser identity")
|
||||
}
|
||||
}
|
||||
if job.ExecutionInput.PluginID != "" && result.Binding.PluginID != job.ExecutionInput.PluginID {
|
||||
return validationError("parsed log batch result does not match leased plugin identity")
|
||||
}
|
||||
if job.ExecutionInput.TargetVersion != "" && result.Binding.PluginVersion != job.ExecutionInput.TargetVersion {
|
||||
return validationError("parsed log batch result does not match leased plugin version")
|
||||
}
|
||||
if result.FirstCursor.SourceIdentityDigest != result.LastCursor.SourceIdentityDigest || result.FirstCursor.StreamGeneration != result.LastCursor.StreamGeneration {
|
||||
return validationError("parsed log batch result crosses source identity or generation boundaries")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func sameSCUMSchemaProbeBinding(a, b domain.SCUMBindingIdentity) bool {
|
||||
return a.ServerInstanceID == b.ServerInstanceID && a.RunBindingID == b.RunBindingID && a.RunEndpointID == b.RunEndpointID && a.PluginID == b.PluginID && a.PluginVersion == b.PluginVersion && a.AdapterVersion == b.AdapterVersion && a.GameVersion == b.GameVersion && a.DatabaseIdentity == b.DatabaseIdentity
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user