Trabajos
Los trabajos durables de las tres etapas: estados, progreso por etapa, posición en la cola, turnos y límites, cancelación, reintentos, registros y códigos de fallo.
- Disponibilidad: Planificado
- Evidencia: Leído del código fuente
- Referencia
Operaciones
| Operación | Solicitud | Capacidad | Reintento |
|---|---|---|---|
jobs.list |
GET /v1/applications/{application}/jobs?state= |
application.read |
|
jobs.read |
GET /v1/jobs/{job} |
application.read |
|
jobs.cancel |
POST /v1/jobs/{job}/cancel |
release.prepare |
natural |
jobs.logs |
GET /v1/jobs/{job}/logs |
application.read |
Un trabajo es trabajo durable que continúa sin una pestaña abierta en el navegador. Leer un trabajo nunca inicia, reanuda ni programa nada.
El trabajo
| Miembro | Significado |
|---|---|
kind |
registration ejecuta la etapa resolve. preparation ejecuta prepare, analyze, generate y validate. |
state |
queued, running, waiting_turn, succeeded, failed, cancelled, limit_exceeded |
stage |
La etapa en curso, o aquella en la que terminó el trabajo |
stages |
Una entrada por etapa: state (pending, running, succeeded, failed, skipped, cancelled, limit_exceeded), started, ended, done, total y hits |
plan |
free o premium: la política de planificación con la que se ejecuta el trabajo, fijada cuando fue admitido |
queue |
Presente mientras el trabajo espera: position y los turns ya usados |
registration, graph, release |
Aquello sobre lo que trabaja |
usage |
Milisegundos medidos hasta ahora por categoría: wait, download, analysis, build, diagnostics |
failure |
Obligatorio cuando el estado es failed o limit_exceeded |
hits cuenta las unidades que una salida compatible autorizada satisfizo sin ejecución nueva. Un acierto de caché no suma tiempo de compilación ni genera cargo.
Cómo se planifica el trabajo gratuito
Las organizaciones gratuitas comparten una cola sin SLA. El planificador le da a cada aplicación un turno corto, por rotación. Al final de un turno, el trabajo deja de iniciar módulos nuevos, permite que el módulo en curso termine dentro de un período de gracia y vuelve a la cola como waiting_turn. Al llegar el plazo máximo, el worker aislado se termina de verdad; las salidas que ya estaban verificadas se conservan.
Los trabajos premium ejecutan las mismas tareas sin el turno corto. Conservan tiempos límite de seguridad y límites de crédito.
Cuando un módulo no cabe
La compilación no se puede pausar y reanudar. Un módulo que no puede terminar dentro del presupuesto de ejecución permitido termina en limit_exceeded, con el código de fallo LIMIT_EXCEEDED, y el trabajo informa que necesita un plan ampliado. Nunca se reintenta automáticamente, porque repetirlo fallaría de la misma manera.
Reintentos
Los fallos transitorios se reintentan con espera exponencial, una cantidad acotada de veces. Los fallos deterministas y los resultados limit_exceeded no se reintentan. Cada intento se registra una sola vez, de modo que una entrega duplicada o tardía del mismo trabajo no puede publicar un resultado dos veces ni cobrar dos veces.
Cancelar
jobs.cancel separa este trabajo de sus unidades de trabajo. Una unidad que otros trabajos autorizados todavía consumen sigue ejecutándose, y las salidas completas verificadas se conservan. Cancelar un trabajo que ya terminó responde su estado final, sin cambios.
Registros
jobs.logs pagina las líneas de registro guardadas: sequence, time, level (debug, info, warning, error), stage y message. Los mensajes están saneados: nunca aparecen credenciales ni datos de otras organizaciones. Para ver el progreso en vivo usa los eventos en tiempo real.
Códigos de fallo
Un failure tiene un code, un message y, opcionalmente, el stage, el module y los diagnostics del compilador con file y line. Estos códigos viajan dentro de trabajos, releases, elementos del inventario y eventos; no son respuestas HTTP.
| Código | Significado |
|---|---|
RESOLUTION_FAILED |
No se pudo fijar el grafo: una versión que no existe, restricciones en conflicto o un peer sin satisfacer |
INTEGRITY_MISMATCH |
Un archivo descargado no coincide con la integridad fijada |
FETCH_FAILED |
No se pudo descargar un paquete fijado |
ANALYSIS_FAILED |
No se pudo calcular el inventario alcanzable desde las entradas |
DYNAMIC_IMPORT_UNKNOWN |
Un import dinámico sin declarar impide completar el cierre |
BUILD_FAILED |
Un módulo no compiló; los errores esenciales de compilación siempre se informan |
CLOSURE_INCOMPLETE |
Una salida requerida del cierre de entrega falta, falló o no se puede obtener |
CANCELLED |
El trabajo se canceló antes de completarse |
LIMIT_EXCEEDED |
El trabajo no cabe en su presupuesto de ejecución o de preparación |
QUOTA_EXCEEDED |
Se alcanzó una cuota al descargar o almacenar |
CREDIT_INSUFFICIENT |
El crédito se agotó antes de que el trabajo pudiera admitirse |
BUDGET_EXHAUSTED |
El presupuesto global de admisión no admitió el trabajo |
UNSUPPORTED_INPUT |
Esta versión no puede procesar una entrada |
UPSTREAM_UNAVAILABLE |
Un registro o proveedor no estuvo disponible para una entrada que no estaba en caché |
INTERNAL |
Fallo inesperado |