Ir al contenido

Bloqueo Distribuido de Estado

El bloqueo distribuido (State Locking) evita que multiples desarrolladores o pipelines de CI/CD ejecuten testform apply de manera simultanea, protegiendo el ledger de corrupcion y condiciones de carrera.

  1. Intento de Adquisicion: Al iniciar cualquier comando mutativo (apply, destroy), Testform genera un identificador unico de bloqueo (Lock Info):
    • ID: UUID v4 aleatorio.
    • Operation: Operacion en curso (ejemplo: OperationTypeApply).
    • Who: Usuario del sistema operativo y hostname.
    • Created: Marca temporal UTC.
  2. Escritura Atomica: El backend verifica si ya existe un bloqueo activo. Si existe, la ejecucion se detiene inmediatamente con codigo de error.
  3. Liberacion Segura: Al finalizar la aplicacion (exitosa o con error controlado), Testform elimina el registro del mutex.

Si otro proceso esta ejecutando una modificacion, Testform emite el siguiente mensaje descriptivo:

Error adquiriendo bloqueo de estado: Estado bloqueado por otro proceso.
Detalles del Bloqueo:
ID: e92c1404-9fb6-455c-b452-f4705574581c
Ruta: produccion/testform.state
Operacion: OperationTypeApply
Usuario: github-runner-04@actions-node
Creado: 2026-10-21 14:15:22 UTC
Testform no continuara para evitar danar el archivo de estado.
Espera a que el proceso anterior finalice.

Si un pipeline de CI/CD fue cancelado abruptamente a nivel de sistema (por ejemplo, timeout de GitHub Actions o terminacion forzada del contenedor), el bloqueo puede quedar huerfano.

Para liberarlo manualmente tras verificar que ningun proceso sigue activo:

Ventana de terminal
testform force-unlock e92c1404-9fb6-455c-b452-f4705574581c

Salida esperada:

Verificando bloqueo 'e92c1404-9fb6-455c-b452-f4705574581c'...
Bloqueo liberado con exito. El estado vuelve a estar disponible para conciliacion.