best_practice 工作流在 v0.10.19 中更新已有 container 时崩溃
評価
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 初心者へのやさしさ
- 55/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 静か
- 技術スタック
- python
- 領域
- backend, documentation
調査の方向性
まず docs/user_guide/best_practice.md に記載されているワークフローを再現し、次に unilabos/ros/nodes/base_device_node.py の append_resource を読み、unilabos/resources/container.py と比較してください。既存のコンテナのパスと、報告されている RegularContainer の属性エラーを確認してください。完了条件は、記載されている create_resource のステップで既存のコンテナがクラッシュせずに更新され、実行が PumpTransferProtocol に到達することです。
索引モデルが issue の本文から書いたものです。
説明
问题概述
这个问题不是自定义工作流,而是官方文档 best_practice(最佳实践)中的示例工作流本身无法跑通。
按照文档 best_practice 中的工作流操作时,如果 host_node/create_resource 的 res_id 指向一个已存在的 container,本地执行器会直接崩溃。
这会导致文档里的两步工作流无法跑通:
creat_resource向已有container中加入水PumpTransferProtocol将液体传输到container1
版本信息
- Uni-Lab-OS
v0.10.19 - tag/main commit:
c001f6a1512affb48e9ae5c068e201bda3412679
文档位置
docs/user_guide/best_practice.md
第 7.5 - 7.9 节当前给出的配置是:
-
creat_resourceclass_name: containerdevice_id: workstationparent: workstationres_id: containerliquid_type: waterliquid_volume: 50
-
PumpTransferProtocolfrom_vessel: waterto_vessel: container1
复现步骤
- 启动 Uni-Lab,并完成 registry 上传。
- 在 Web UI 中创建实验室,包含:
workstation(其protocol_type包含PumpTransferProtocol)virtual_transfer_pumpcontainercontainer1
- 严格按照
best_practice.md的说明创建工作流。 - 运行
creat_resource,参数为:res_id=containerliquid_type=waterliquid_volume=50
期望行为
作为最佳实践文档中的示例工作流,这个流程应该可以直接跑通:
- 已有的
container被更新为包含water - 然后工作流继续执行
PumpTransferProtocol
实际行为
本地 host executor 在线程中崩溃,还没有执行到 PumpTransferProtocol。
报错堆栈如下:
File "unilabos/ros/nodes/base_device_node.py", line 433, in append_resource
logger.info(f"更新物料{container_instance.name}的数据{found_resource.state}")
AttributeError: 'RegularContainer' object has no attribute 'state'
怀疑的根因
这看起来像一次不完整的重构 / 回归。
在提交 a79c0a8(fix container volume)中,RegularContainer.state 似乎已经被移除:
unilabos/resources/container.py中不再定义self.stateload_state()也改为调用super().load_state(state)
但是 append_resource 仍然在使用旧接口:
logger.info(f"更新物料{container_instance.name}的数据{found_resource.state}")
found_resource.state.update(container_instance.state)
因此,文档中“create_resource 更新已有 container”这条路径在 v0.10.19 上会直接崩溃。
额外说明
文档下一步里还有一个可能的文档 / 实现不一致:
- 文档写的是
from_vessel: water - 当前
PumpTransferProtocol的实现看起来更像是要求传入 vessel/resource id,而不是液体名
不过当前最直接的阻塞问题,还是上面的 create_resource 崩溃。
- 主要言語
- Python
- スター
- 181
- フォーク
- 78
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
deepmodeling/Uni-Lab-OS のほかの issue
-
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
deepmodeling/Uni-Lab-OS#327 · コメント 1 件 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
deepmodeling/Uni-Lab-OS#326 · コメント 1 件 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
deepmodeling/Uni-Lab-OS#325 · コメント 1 件 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
deepmodeling/Uni-Lab-OS#324 · コメント 1 件 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
deepmodeling/Uni-Lab-OS#323 · コメント 1 件 ·
deepmodeling/Uni-Lab-OS の issue をすべて見る
似ている issue
-
changelog investigate
難易度 2/5 1〜3時間 初心者へのやさしさ 67/100
ramnes/notion-sdk-py#433 ·
-
docs pkg:core
難易度 1/5 1時間未満 初心者へのやさしさ 84/100
pydantic/pydantic-ai#11929 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
intake/intake-esm#789 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
MemMachine/MemMachine#1877 ·
メンテナーはふだん 3 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
openedx/openedx-authz#579 ·
メンテナーはふだん 1 日以内に返信