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

オープン
#123 コメント 0 件 リアクション 0 件 担当者 1 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@SimonHeybrock がすでに取り組んでいます。

2026年10月28日 から。

評価

この issue はまだ評価されていません。

説明

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.

主要言語
Python
スター
0
フォーク
1
平均マージ
9時間 40分
マージ済み PR(30日)
60

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

scipp/essapps のほかの issue

scipp/essapps の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。