Celebi / 版本更新

CelebiChrono v1.0.0b3

原始数据

  • register-data <runner> <remote_path>:数据已经在计算农场上时,无需经过你的 网络即可登记 —— MD5 在 runner 上计算,数据拷贝到 Yuki 在该 runner 上的受管 impressions 区域,本地任务成为指向它的指针。以后台任务运行并实时显示进度;重复 登记同一路径是幂等的,任务的默认 runner 会设为托管数据的那个 runner。
  • 数据命令改名:use-data → attach-data(领养 DITE 印象,零传输)、 send → upload-data(本地目录上传到 DITE,带进度条)。旧名字彻底移除。
  • verify-data:重算当前数据任务的 MD5 并与登记的 UUID 比对(远端数据在宿主 runner 上重算)。
  • cache_on_runner 取代 use_eos:REANA 把结果拷贝到 EOS,SSH 拷贝到 runner 的 受管 impressions 区域,native/dry 无效果。
  • 原始数据任务:ls 不再显示 Memory limit / Validated;status 显示 stageout 文件表(含 in-Yuki 标记);archived 显示为 [coda][archived]。

Runner

  • register-runner/update-runner 支持 ssh 选项(--ssh-host、--ssh-user、 --ssh-key-path、--ssh-port、--remote-workdir)与 native 选项(--workdir、 --cores、--mem-mb、--conda-path、--snakemake-path)。
  • SSH 密钥自动上传:注册/更新时读取客户端路径并发送,服务端保存;不指定密钥 路径时依次尝试 ~/.ssh/id_rsa / ~/.ssh/id_ed25519。
  • test-runner <name> 探测连通性、snakemake、conda 与远端工作目录;结果持久化 并作为 HEALTH 列显示在 runners 中。
  • runner-envs <name> 列出 ssh/native runner 上的 conda 环境。
  • Chern shell 新增 test_runner、runner_envs、register_data、 cache_on_runner 及 runner 名 Tab 补全;shell 中的 register_runner 支持 ssh。

引擎日志

  • engine-logs 现在能渲染 ssh/native 日志结构;工作流日志一节标题为 YUKI LOG。
  • engine-logs --fetch 在服务器上按需生成引擎日志;不带 --fetch 时,只要 Yuki 工作流日志存在仍会返回。错误响应体显示为错误信息,而非空的 N/A 表格。

修复与质量

  • DITE 端口回退修正为 127.0.0.1:3315;修复 add_host 包装器参数不匹配;runner Tab 补全缓存现在会被正确填充。
  • tqdm 依赖已在 pyproject.toml 中声明。
  • 全项目 pylint 评分 10.00/10。

Yuki(DITE 服务器)

  • 远端数据登记:register-data 在 Yuki 上作为后台任务运行(hashing → copying → registering);印象状态 running → archived,远端托管数据通过 file_status 列出。
  • verify-data 重算 MD5(远端数据在宿主 runner 上重算)并与登记 UUID 比对。
  • SSH 工作流:远端布局 workflows/<project>/<uuid>/ + 受管 impressions/ 缓存;原始数据输入在 runner 上自动缓存,并由 Snakefile setup 规则 staging —— 与 REANA 使用 EOS 的机制相同。
  • cache_on_runner(取代 use_eos):REANA 上为 EOS,SSH 上为 runner impressions,native/dry 无效果。
  • Runner 探测端点:/test-runner、/runner-health、/runner-envs;runner 设置/健康存储;SSH 密钥存放于 $YUKIDIR/keys/。
  • 引擎日志:/engine-log?fetch=true 按需生成,否则返回 Yuki workflow.log。
  • Docker 合并(非 root 多阶段镜像、统一 build.sh)、选择性收集与文件可见性、 全量 pylint 清理。

Runner 缓存管理

runner 的受管 impressions 缓存(<remote-workdir>/impressions/...)现在可以 从 shell 双向管理:

  • cache-results <runner> 把当前印象留在 runner 上的结果(工作流的 stageout)保存进该 runner 的受管缓存 —— 相当于工作流自带 cache 规则的手动 版本:拷贝在 runner 上执行(reflink → hardlink → rsync → copy 链),完成后设为 只读。作为 Yuki 后台任务运行并实时轮询;任务未完成的印象、或 runner 上没有 stageout 的印象会被跳过并给出原因,而不是让整批失败。
  • purge-ssh-runner-cache <runner> 从 ssh runner 上清除当前印象的缓存项 (只读项先恢复可写),并同步清理本地登记,不留悬空引用。它不会清除整个 runner 缓存;仍在进行中的登记会被跳过;若清除了注册数据会提示用 register-data 恢复。
  • whereabouts 对齐报告当前印象的数据所在:yuki 本地存储、各 runner 的 workflow/cache 状态、注册宿主 runner —— 数据来自持久化的 distribution 注册表。

三个命令同时存在于 Chern shell(do_*)、celebi-cli 和 shell 函数层。在目录 内执行时,会对全部已 impress 子对象展开(整批一次确认)。Yuki 服务器端新增 yuki purge-ssh-runner-cache CLI,便于在服务器上执行清理。

失败状态处理

  • 后端执行失败不再把所有执行任务一律标记为 failed:已处于终态的任务保留 原状态 —— 远端工作流启动失败时任务标记为 dissonance,不会覆盖此前已完成的 状态,修复了"工作流启动失败 → 上游任务被错误标记失败 → 下游连锁 Blocked"的 问题。
  • SSH 工作流启动失败现在会附上 runner 端 snakemake.log 的尾部 (“Remote Snakemake failed: … (exit N)”),不再是一句空白的错误信息。

新增服务器端点

  • 新增 POST /purge-runner-cache、POST /cache-results + GET /cache-results/<job_id>、GET /whereabouts/<project>/<impression> 支撑上述命令。
  • 缓存任务状态存放于 $YUKIDIR/cache-jobs/,register-jobs 辅助函数泛化为 按用途分目录。