Add runtime SQLite query targets

This commit is contained in:
npc0-hue
2026-09-01 17:15:09 +08:00
parent 65da73eff0
commit 163fbda394
17 changed files with 708 additions and 114 deletions
+45
View File
@@ -88,6 +88,51 @@ func (worker *Worker) materializeSQLiteProbeDataTarget(ctx context.Context, assi
return matched.WorkspaceKey, nil
}
func (worker *Worker) materializeSQLiteQueryDataTarget(ctx context.Context, assignment protocol.RunJobAssignment) (string, error) {
plan, _, ok, err := LoadAutonomousLifecyclePlan(worker.cfg)
if err != nil {
return assignment.TargetKey, newDataTargetMaterializeError("data_target_plan_invalid", false)
}
if !ok || plan == nil || len(plan.DataTargets) == 0 {
return assignment.TargetKey, newDataTargetMaterializeError("data_target_not_declared", false)
}
if plan.ServerInstanceID != assignment.ServerInstanceID || plan.RunEndpointID != assignment.RunEndpointID || plan.PluginID != assignment.ExecutionInput.PluginID {
return assignment.TargetKey, newDataTargetMaterializeError("data_target_scope_mismatch", false)
}
if plan.ProfileKey != "" && assignment.ExecutionInput.WorkspaceScope != "" && plan.ProfileKey != assignment.ExecutionInput.WorkspaceScope {
return assignment.TargetKey, newDataTargetMaterializeError("data_target_scope_mismatch", false)
}
var matched *protocol.RunAutonomousDataTarget
for i := range plan.DataTargets {
target := &plan.DataTargets[i]
if dataTargetMatchesSQLiteProbeAssignment(*target, assignment.TargetKey) {
matched = target
break
}
}
if matched == nil {
return assignment.TargetKey, newDataTargetMaterializeError("data_target_not_declared", false)
}
if !dataTargetSupportsPlatform(matched.Platforms, runtime.GOOS) {
return assignment.TargetKey, newDataTargetMaterializeError("data_target_platform_unsupported", false)
}
manifest, err := materializeSQLiteSnapshotDataTarget(ctx, worker.cfg.WorkspaceRoot, assignment.ServerInstanceID, assignment.ExecutionInput.WorkspaceScope, *matched, plan.RuntimeBindings)
if err != nil {
log.Printf("RUN phase=data_target.snapshot status=failed target=%s code=%s", safeOptional(matched.Key), safeOptional(dataTargetErrorCode(err)))
return assignment.TargetKey, err
}
log.Printf("RUN phase=data_target.snapshot status=complete target=%s workspaceKey=%s bytes=%d checksum=%s", safeOptional(matched.Key), safeOptional(matched.WorkspaceKey), manifest.SnapshotSizeBytes, safeOptional(manifest.SnapshotChecksum))
return matched.WorkspaceKey, nil
}
func sqliteQueryFailureForDataTarget(err error) LifecycleExecutionResult {
var materializeErr dataTargetMaterializeError
if errors.As(err, &materializeErr) {
return lifecycleExecutionFailure(materializeErr.code, "SQLite query data target is unavailable", materializeErr.retryable)
}
return lifecycleExecutionFailure("data_target_unavailable", "SQLite query data target is unavailable", true)
}
func dataTargetMatchesSQLiteProbeAssignment(target protocol.RunAutonomousDataTarget, assignmentTargetKey string) bool {
if target.Kind != "sqlite.snapshot" || assignmentTargetKey == "" {
return false