一个工作流系统每天运行27次,每次都显示COMPLETED(已完成),但其中27个分支从未真正执行过。更令人不安的是,系统并不是在撒谎——它只是诚实地报告了一件没有发生的事。
这个问题的根源,是一个从项目开始就存在、却从未被写入过的枚举值:StepExecutionStatus.SKIPPED。它在代码库中的出现次数是零。
![]()
被跳过的步骤,连数据库行都没有
当某个分支的条件永远无法匹配时,步骤被跳过,运行被标记为成功,没有任何人收到通知。这种情况持续了数周。开发者最初以为数据应该存在于步骤级别的记录中——每个步骤都有自己的状态,SKIPPED就是其中之一。但检查后发现,被跳过的步骤根本不会创建数据库行,循环只是把一个字典追加到内存中的结果列表里,然后继续执行。跳过的唯一痕迹,存在于执行行上的一个JSON片段中。
换句话说,开发者构建了一个枚举值来描述某种状态,却从未真正记录过这种状态。
修复方案与一个被否决的徽章
修复只花了一个下午。现在,被跳过的步骤会写入真实的数据行,并附带原因。运行报告会显示处理、跳过和失败的数量,这些数字直接来源于数据行,因此不会与步骤视图产生偏差。
随后,开发者添加了一个徽章:当一次完成的运行实际未处理任何内容时,系统会明确提示。但审核者在不到一小时内就否决了这个方案,而且他的理由是对的。
零可能是合法的。安静的一天,没有内容可发送,COMPLETED且处理数为0,这是正确的。只有当计数是双向的,警报才有意义:运行报告它处理了什么,数据源报告它移交了什么,两者必须对得上。
一个定时工作流在无事可做时,每个安静的日子都会处理零个任务。徽章会在所有这类运行上触发,一周内就会被静音,然后在真正重要的那天反而不出现。这比什么都不显示更糟,因为它看起来像是覆盖了问题。
徽章被移除。计数保留下来,作为朴素的事实。判断权随徽章一起消失了。
部署脚本的五个绿色勾选
两天后,开发者构建了一个部署脚本:在本地运行测试,任何失败都拒绝部署,最后验证部署是否成功。它打印了五行绿色信息:
- ✓ 已部署
- ✓ 服务器在c15b730
- ✓ 所有容器运行中
- ✓ agent-mesh.org/health 健康
每一行都是真的。但刚部署的功能是死的。容器在开发者添加所需的环境变量之前就已经启动,代码发布了,却什么都没做。开发者是通过手动请求端点并读取返回值才发现问题的——而脚本没有做这一步。
验证部署成功,不等于验证功能正常。健康检查是通用的,效果检查才是具体的。这两者之间的差距,正是27次假成功和五个绿色勾选共同指向的同一个盲区。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.