Output copies, model validators, and failed pushes on current main

Abierto
#123 0 comentarios 0 reacciones 1 asignado Ver en GitHub

Los mantenedores suelen responder en 1 día

@SimonHeybrock ya está trabajando en esto.

Desde el 28/10/2026.

Evaluación

Este issue todavía no se ha evaluado.

Descripción

Three problems that PRs #76, #77, and #79 fixed are still on main. Those PRs branched before the params rework (#109, #117) and the file rename (#119), and now conflict in 5 to 27 files, so each fix is to be made again on the current code. Their descriptions hold the designs that were reviewed.

client.output returns the object the backend holds (#76)

For a record the client keeps, Backend.outputs returns the value from memory without a copy. An accumulator's outputs are deep-copied, and a persisted record's are read from the store. So in a notebook

iofq = client.output(record, 'iofq')
iofq *= scale   # changes what pending requests read and what persist writes

changes the record's outputs, but only in-process. That breaks the promise that where a request runs changes neither its record nor its outputs. #76 made every read return a value the caller owns, copying only where the source does not already give a fresh object.

Model validators of the params model never run in the backend (#77)

WorkflowSpec allows model validators on the params model, and refuses every other decorator there. The backend builds the params with model_construct, so a plain request never runs them. The author's tests construct the model normally and do run them, which gives false confidence. #77 ran them wherever every value they read is known: on the whole params of a plain request, at each call through a stage, and when an accumulator opens. Its rows for groups given field by field no longer apply, since only the first level is interpreted (#109).

One failed push ends an accumulator for good (#79)

Any failure of a push stops the accumulator (Backend._stop): one unreadable run file ends a sum that has grown all beamtime. No call says whether an accumulator is healthy, and the rows pushed so far cannot be read back. #79 made a push fatal only if the driver may be corrupted: a push that fails in the backend, or in driver.push with ess.spec.PushRefused, leaves the accumulator taking pushes. A failed push keeps its number, and state k equals state k-1. Driver.push takes all tables of a push in one call.

Lenguaje dominante
Python
Estrellas
0
Forks
1
Merge medio
9 h 40 min
PR fusionados (30 d)
60

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de scipp/essapps

Todos los issues de scipp/essapps

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.