升级MarkLogic、DHF及Java Client API后JOBS数据库步骤信息捕获异常咨询
DHF升级后JOBS数据库步骤信息被覆盖的问题处理方案
问题分析
升级DHF从5.2.0到5.8.1后,新增的/data-hub/5/data-services/job/下的核心模块(尤其是finishStep.sjs)大概率改变了Job文档的更新逻辑:
- 旧版本中
finishStep操作会追加当前步骤的响应到stepResponses数组 - 新版本默认实现可能改为替换整个
stepResponses字段,导致之前的步骤数据被覆盖
排查步骤
- 检查
finishStep.sjs的代码逻辑- 定位到更新Job文档的代码段,确认是否存在全量替换而非数组追加的逻辑:
正常逻辑应该是:// 错误示例:直接覆盖stepResponses jobDoc.stepResponses = [currentStepResponse]; xdmp.documentInsert(jobUri, jobDoc);// 正确逻辑:追加步骤响应 if (!jobDoc.stepResponses) jobDoc.stepResponses = []; jobDoc.stepResponses.push(currentStepResponse); xdmp.documentInsert(jobUri, jobDoc, {merge: true});
- 定位到更新Job文档的代码段,确认是否存在全量替换而非数组追加的逻辑:
- 对比升级前后Job文档结构
- 导出未升级环境的正常Job文档,与升级后异常的Job文档对比,确认
stepResponses字段的存储差异
- 导出未升级环境的正常Job文档,与升级后异常的Job文档对比,确认
- 查阅DHF版本变更记录
- 查看5.2.0至5.8.1的Release Notes,确认是否有Job管理逻辑的官方变更说明,或已知的相关bug
解决方案:调整新增Job模块
若排查确认是finishStep.sjs的逻辑问题,需修改该模块代码:
- 更新Job文档前,先读取现有文档的
stepResponses数组 - 将当前步骤的响应追加到数组中,再执行文档更新(建议使用
merge: true参数避免全量覆盖) - 同步验证
startJob.sjs和finishJob.sjs的逻辑,确保Job文档结构一致性
注意事项
- 修改前备份原始模块文件,避免破坏DHF默认流程
- 测试多步骤Job的完整执行链路,验证所有步骤的
stepResponses均能被保留 - 若为DHF官方bug,可提交Issue到官方仓库,同时用自定义修改作为临时修复方案
内容的提问来源于stack exchange,提问作者Ashish Patil
相关产品推荐
相关产品推荐

