engine

package
v1.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 10, 2026 License: Apache-2.0 Imports: 11 Imported by: 0

Documentation

Overview

Package engine arranca y teardownea los 6 motores para el arnés del superapp, y verifica que no haya fugas (goroutines, conexiones del pool) tras cerrar.

Espeja el patrón PROBADO de bugbash/tools/docker.go: contenedores por `docker run` (NO testcontainers — su reaper tumba la imagen de Oracle en runners hosted, ADR-0018/PR #127), SQLite in-process, y override por env `SUPERAPP_DSN_<ENGINE>` que cortocircuita Docker (para reusar un contenedor ya levantado: el `quark-oracle` persistente, el postgres de Lantia, etc.). No importa el módulo bugbash (es otro módulo `-tags=bugbash`), así que replica.

Contenedores namespaced `superapp-<engine>` en puertos propios para no colisionar con los de bugbash ni con el postgres de Lantia (5432).

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Down

func Down(engines ...control.Engine)

Down elimina los contenedores de los motores pedidos (SQLite es no-op; su fichero temporal lo limpia el caller). Best-effort. NO toca contenedores resueltos por SUPERAPP_DSN_<ENGINE> (no los gestionamos nosotros).

func EnvVar

func EnvVar(e control.Engine) string

EnvVar es el override de DSN por motor: SUPERAPP_DSN_POSTGRES, etc.

func Goroutines

func Goroutines() int

Goroutines cuenta las goroutines vivas tras estabilizar.

func Run

func Run(conns map[control.Engine]Conn, tol int, newClient func(Conn) (*quark.Client, error), fn func(control.Engine, *quark.Client) error) map[control.Engine]Result

Run abre un Client por motor (vía newClient), corre fn, lo cierra, y verifica fugas: goroutines estables (dentro de tol) y pool a 0 tras Close. El pool se lee DESPUÉS de Close — ahí InUse/OpenConnections deben ser 0. Cada motor captura su propia línea base de goroutines, así que la acumulación entre motores no falsea el resultado.

func Settle

func Settle()

Settle deja que las goroutines en cierre terminen antes de contar (GC + pausa).

func Up

func Up(ctx context.Context, engines ...control.Engine) (map[control.Engine]Conn, error)

Up levanta los motores pedidos y devuelve un Conn por motor. SQLite resuelve a un fichero temporal sin contenedor. Para el resto, un SUPERAPP_DSN_<ENGINE> explícito gana a Docker; si no, se arranca (o reusa) el contenedor y se espera a que responda un ping. Idempotente: reusa un contenedor ya corriendo.

Types

type Conn

type Conn struct {
	Engine control.Engine
	Driver string
	DSN    string
}

Conn es lo que hace falta para abrir un Client: el driver de database/sql y un DSN listo. El driver lo registra un blank-import del binario consumidor.

type LeakReport

type LeakReport struct {
	Engine           control.Engine `json:"engine"`
	GoroutinesBefore int            `json:"goroutines_before"`
	GoroutinesAfter  int            `json:"goroutines_after"`
	Tolerance        int            `json:"tolerance"`
	PoolInUse        int            `json:"pool_in_use"` // conexiones en uso tras Close (debe ser 0)
	PoolOpen         int            `json:"pool_open"`   // conexiones abiertas tras Close (debe ser 0)
}

LeakReport compara goroutines antes/después de la corrida y el estado del pool DESPUÉS de cerrar el Client. Un motor limpio deja el pool a 0 y no acumula goroutines (más allá de la tolerancia, que cubre goroutines residuales de algunos drivers).

func (LeakReport) GoroutinesLeaked

func (r LeakReport) GoroutinesLeaked() bool

func (LeakReport) OK

func (r LeakReport) OK() bool

func (LeakReport) PoolLeaked

func (r LeakReport) PoolLeaked() bool

func (LeakReport) String

func (r LeakReport) String() string

type Result

type Result struct {
	Err  error
	Leak LeakReport
}

Result reúne el error funcional de fn y el report de fugas de un motor.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL