跳到主要内容

arc drain

arc drain 是一个长驻进程,盯着工作台账(work ledger),把就绪的工作派给一个空闲 peer,直到就绪集合清空为止。

arc drain 是一个真实的 CLI 进程,不是一次对话轮次——杀掉启动它的那个会话不会让它停下来,只有杀掉这个进程本身才行。它订阅 /dev/code-agents(或者你用 --subscribe-path 传的路径),每次被唤醒时就从工作台账里认领就绪的工作,然后执行 /dev/code-agents/.actions/run 处理认领到的工作。就绪集合为空时以 0 退出;arc drain 自己从不创建台账行,只消费它们。

用法

bash
arc drain --cwd <dir> [options]
  • --cwd <dir>(必填,没有默认值):传给 /dev/code-agents/.actions/run 的工作目录。不能是 daemon 自己的项目 checkout
  • --work-root <path>:工作集合的根,也就是哪个 AFS 路径存工作记录(默认 /work
  • --subscribe-path <path>:订阅唤醒事件的 AFS 路径前缀,比如 /dev/code-agents/settled(默认 /dev/code-agents
  • --engine <id>:只派给这个 engine id(默认:第一个空闲的 dispatch target)
  • --peer <id>:只派给这个 peer id(默认:第一个空闲在线的 peer)

全局选项(见 总览):--json--view--instance / -i(作用在哪个本地 ARC 实例;省略即 default),以及 --home(实例根;要指定作用在哪个实例,用 --instance)。--standalone 也是全局的(ad-hoc 模式:从当前目录的本地配置加载 AFS,而不是连接正在跑的 daemon)。实践中 drain 通常就作用在默认实例上,除非你传 --instance

arc drain 期望目标实例的 daemon 已经在跑(比如先 arc service start)。让 drain 自己去自动起,走的是一条更精简的 AFS 引导路径,不带默认的 /work 挂载,于是还没碰到台账就先报错:No module found for path: /work in namespace 'default'

示例(空的就绪集合,daemon 已经在跑)

bash
$ arc drain --cwd /path/to/a/work/tree
ready set empty

按 Ctrl-C(SIGINT)或者发 SIGTERM 可以停止 drain;两者都会干净地中止当前的等待。

示例(缺少必填选项)

bash
$ arc drain
ERROR: --cwd is required (no default — must not be the daemon's own project checkout)