Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

best_practice 工作流在 v0.10.19 中更新已有 container 时崩溃

Aperta
#256 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub

@07-clottattoos-cyber ci sta già lavorando.

Dal 2/4/2026.

  • #257 di @07-clottattoos-cyber — aperta

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
55/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Tranquilla
Stack tecnologico
python

Direzione di ricerca

Inizia riproducendo il workflow documentato in docs/user_guide/best_practice.md, poi leggi unilabos/ros/nodes/base_device_node.py in corrispondenza di append_resource e confrontalo con unilabos/resources/container.py. Controlla il percorso del container esistente e l’errore di attributo segnalato di RegularContainer. Il lavoro è completato quando il passaggio documentato create_resource aggiorna un container esistente senza arrestarsi in modo anomalo e l’esecuzione raggiunge PumpTransferProtocol.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

问题概述

这个问题不是自定义工作流,而是官方文档 best_practice(最佳实践)中的示例工作流本身无法跑通。

按照文档 best_practice 中的工作流操作时,如果 host_node/create_resource 的 res_id 指向一个已存在的 container,本地执行器会直接崩溃。

这会导致文档里的两步工作流无法跑通:

  1. creat_resource 向已有 container 中加入水
  2. PumpTransferProtocol 将液体传输到 container1
版本信息
  • Uni-Lab-OS v0.10.19
  • tag/main commit: c001f6a1512affb48e9ae5c068e201bda3412679
文档位置

docs/user_guide/best_practice.md
第 7.5 - 7.9 节当前给出的配置是:

  • creat_resource

    • class_name: container
    • device_id: workstation
    • parent: workstation
    • res_id: container
    • liquid_type: water
    • liquid_volume: 50
  • PumpTransferProtocol

    • from_vessel: water
    • to_vessel: container1
复现步骤
  1. 启动 Uni-Lab,并完成 registry 上传。
  2. 在 Web UI 中创建实验室,包含:
    • workstation(其 protocol_type 包含 PumpTransferProtocol)
    • virtual_transfer_pump
    • container
    • container1
  3. 严格按照 best_practice.md 的说明创建工作流。
  4. 运行 creat_resource,参数为:
    • res_id=container
    • liquid_type=water
    • liquid_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.state
  • load_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 崩溃。

Lingua principale
Python
Stelle
180
Fork
76
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di deepmodeling/Uni-Lab-OS

Tutte le issue di deepmodeling/Uni-Lab-OS

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.