Apache DolphinScheduler 8 月报:权限安全加固,调度补火上线,性能与稳定性持续提升

2 阅读15分钟

Apache DolphinScheduler 8 月月报来啦!过去一个月,社区持续推进项目迭代,在功能优化、性能提升和生态建设等方面不断取得新进展。让我们一起看看 8 月 DolphinScheduler 又有哪些值得关注的更新,也感谢每一位参与贡献、积极反馈和支持社区的小伙伴,正是大家的共同努力,让 DolphinScheduler 持续成长!

📊 本月数据速览

指标数值
🚀 合并 PR 总数23
👥 贡献者人数10
➕ 新增代码行+3,702
➖ 删除代码行-1,327
🔀 净变更行数+2,375
📁 触达模块数8
📝 文档文件触达数5
🧪 测试文件触达数28

🏆 贡献者排名

排名GitHub 用户名主要贡献方向PR 数+Lines-Lines综合得分
🥇@ruanwenjun测试用例 / Tests101602100188.59
🥈@njnu-seafish性能优化 / Performance381828829.09
🥉@SEPURI-SAI-KRISHNA问题定位与修复 / Debug & Fix2229318.77
4.@kittimzhe文档完善 / Documentation24414.02
5.@nikhiln64问题定位与修复 / Debug & Fix1344810.16
6.@hellodml问题定位与修复 / Debug & Fix113619.45
7.@zhang-arvin问题定位与修复 / Debug & Fix11039.04
8.@liang-wenjie测试用例 / Tests154277.82
9.@hiSandog测试用例 / Tests11716.06
10.@SbloodyS架构与工程化 / Architecture10116.01

🔄 代码变更

按维度分布(功能特性 / 性能优化 / Bug 修复 / 架构改进)

维度PR 数占比
功能特性626.1%
性能优化28.7%
Bug 修复939.1%
架构改进626.1%

本月 Bug 修复(39.1%,9 项) 占比最高,叠加 6 项功能特性和 2 项性能优化,整体呈现「稳定性优先 + 稳步迭代新特性」的节奏。

📦 主要涉及模块

按 PR 触达次数排序。

排名模块PR 触达新增行删除行净变更
1.dolphinscheduler-api82+2,132-1,016+1,116
2.dolphinscheduler-dao25+307-201+106
3.docs14+68-48+20
4.dolphinscheduler-ui10+74-27+47
5.dolphinscheduler-master9+374-12+362
6.dolphinscheduler-common6+64-6+58
7.dolphinscheduler-scheduler-plugin6+229-4+225
8.dolphinscheduler-task-plugin4+305-2+303
9.misc3+149-11+138

模块洞察

  • 🏛️ API 层(15次) 是本月绝对的改动重心,15/23 的 PR 都涉及 API 模块——主要集中在权限/授权加固过时接口清理
  • 🏗️ DAO 层(7次) 主要配合 API 层做查询优化(大字段排除)和权限查询逻辑改造
  • 🎨 UI 模块(5次) 虽触达不少,但以小改动为主(+49 净行),属配套型调整
  • 🔧 Master(4次) 聚焦任务重试、故障恢复等调度核心稳定性

🎯 对用户最有感的 8 件事

从「用户感知度」角度筛选本月最重要的变更,按影响面排序。

一. 🔐 权限/安全增强(7 项 PR)

代表性 PR:#18561 - [Fix-18559][API] Align workflow mutations with project write permissions (#18561)

  • 作者:@ruanwenjun
  • 变更规模:+426 / -128 行
  • 本月同类 PR 数:7 项

用户价值:多租户隔离更严格,敏感操作更安全,合规性更强。本月连续 7 个 PR 围绕权限体系打补丁(项目写权限对齐、子工作流跨项目鉴权、数据源/集群授权校验、Actuator端点鉴权、用户列表脱敏、授权列表接口优化),是企业多租户场景的核心收益点。

重点关注场景

  • ✅ 工作流变更(创建/更新/删除)是否严格校验项目级 write 权限
  • ✅ 子工作流引用时,是否能校验「被引用工作流」的访问权限(防止越权)
  • ✅ 任务定义关联数据源时,是否校验当前用户对该数据源的访问权限
  • ✅ 集群查询 API 是否有一致性的权限校验
  • ✅ 用户列表接口是否脱敏 + 权限收敛
  • ✅ Actuator 敏感端点是否需要认证才能访问

同类 PR 完整列表

PR #标题作者Diff
#18561[Fix-18559][API] Align workflow mutations with project write permissions (#18561)@ruanwenjun+426/-128
#18597[Fix-18596][API] Enforce permission checks for sub-workflow references (#18597)@ruanwenjun+450/-0
#18566[Fix-18565][API] Validate datasource access for task definitions (#18566)@ruanwenjun+342/-17
#18564[Improvement-18563][API] Refine datasource authorization list APIs (#18564)@ruanwenjun+102/-62
#18583[Fix-18582][Authentication] Align actuator endpoint matching (#18583)@ruanwenjun+149/-11
#18560[Improvement-18558][API] Harden user list access and responses (#18560)@ruanwenjun+65/-28
#18590[Improvement-18589][API] Align cluster query permissions (#18590)@ruanwenjun+59/-20

二. 🛡️ 稳定性/Bug修复(4 项 PR)

代表性 PR:#18573 - [Fix-18570][Master] Detect wrapped CommandDuplicateHandleException in bootstrapError (#18570) (#18573)

  • 作者:@hellodml
  • 变更规模:+136 / -1 行
  • 本月同类 PR 数:4 项

用户价值:修复工作流/任务的异常状态问题,直接提升生产可靠性。维度维度上 Bug 修复 PR 共 9 项(本月主线),其余 Bug 类 PR 已归入「权限/K8S/DataX/文档」等专项小节,此处列出非专项的 4 项核心 Bug 修复。

重点关注场景

  • 失败任务重试:任务失败后重新创建实例时,运行时状态是否正确 reset(避免脏状态导致重试异常)
  • 重试时机计算:任务重试调度时间是否按 endTime + retryInterval 计算,而非 startTime
  • Master 启动异常CommandDuplicateHandleException 被包装后能否被 bootstrapError 正确识别
  • 日志消息拼写:DataSourceServiceImpl 日志是否正确(避免排查时被误导)

同类 PR 完整列表

PR #标题作者Diff
#18573[Fix-18570][Master] Detect wrapped CommandDuplicateHandleException in bootstrapError (#18570) (#18573)@hellodml+136/-1
#18541[Fix-18540][Master] Reset the runtime state when recreating a failed task instance (#18541)@SEPURI-SAI-KRISHNA+132/-0
#18539[Fix-18538][Master] Schedule task retry at endTime + retryInterval (#18539)@SEPURI-SAI-KRISHNA+97/-3
#18581[Improvement-18580][api] Fix typo in DataSourceServiceImpl log message (#18581)@kittimzhe+1/-1

三. ⏰ 调度策略/补火(1 项 PR)

代表性 PR:#18464 - [DSIP-18454][Scheduler] Add schedule missed fire policy (#18464)

  • 作者:@liang-wenjie
  • 变更规模:+542 / -7 行
  • 本月同类 PR 数:1 项
策略行为适用场景
Skip跳过错过的触发,等待下一次 cron错过即错过,不希望补跑冲击系统
FireOnceNow只补一次(立即执行),其余错过的丢弃只要补最近一次的业务
FireAll把所有错过的触发全部补齐(按原计划时间依次触发)金融/对账场景,必须每次都跑

用户价值:这是本月最大的新特性!当 Master 停机或调度线程阻塞导致错过 cron 触发时,现在可以配置 3 种策略应对「补火」场景。

重点关注场景

  • ✅ 新建/编辑调度时,UI 上能否看到「Missed Fire Policy」下拉选项
  • ✅ 模拟 Master 停机 2 小时(停掉 Master 进程再拉起),观察不同策略下的行为是否符合预期
  • ✅ 数据库升级脚本(3.5.0_schema)是否正确执行,t_ds_schedule 表新增字段是否存在

四. ⚡ 性能优化(2 项 PR)

代表性 PR:#18444 - [Improvement-18443][API&DAO] Optimize WorkflowInstanceMapper to exclude large text fields from list queries (#18444)

  • 作者:@njnu-seafish
  • 变更规模:+790 / -268 行
  • 本月同类 PR 数:2 项

用户价值:工作流实例/任务实例列表查询时,不再把 global_paramsprocess_instance_json 等大 TEXT 字段一起查出来。列表页响应速度、数据库 IO、内存占用都会有明显改善,大规模部署场景收益突出。

重点关注场景

  • ✅ 工作流实例列表页分页查询响应时间(1000+ 实例时对比优化前后)
  • ✅ 打开单个工作流实例详情页,全局参数等大字段是否正常展示(详情接口还是会查)
  • ✅ 列表页导出/搜索等功能是否正常不受影响

同类 PR 完整列表

PR #标题作者Diff
#18444[Improvement-18443][API&DAO] Optimize WorkflowInstanceMapper to exclude large text fields from list queries (#18444)@njnu-seafish+790/-268
#18442[Improvement-18441][API&DAO] Optimize TaskInstanceMapper to exclude large text fields from list queries (#18442)@njnu-seafish+17/-5

五. 🔌 任务类型/新数据源(1 项 PR)

代表性 PR:#18434 - [Fix-18389][DataX] Read job definition from attached resource file when custom json is empty (#18434)

  • 作者:@nikhiln64
  • 变更规模:+344 / -8 行
  • 本月同类 PR 数:1 项

用户价值:DataX 用户之前必须把 JSON 内容粘贴到 UI 的自定义 JSON 框里,且无法复用资源中心的文件。现在支持「自定义 JSON 为空时,自动从资源文件读取」,与 SQL 任务从资源文件读 SQL 逻辑一致,体验更统一。

六. 🧹 API清理/工程化(5 项 PR)

代表性 PR:#18569 - [Improvement-18568][API] Remove obsolete task update-with-upstream API (#18569)

  • 作者:@ruanwenjun
  • 变更规模:+2 / -507 行
  • 本月同类 PR 数:5 项

用户价值:本月集中清理了 3 组过时 API(cluster query-by-code、task update-with-upstream、dynamic sub-workflow 相关),并同步更新了 incompatible.md。对升级用户来说需重点关注——如果你们有自研前端或自动化脚本用到了这些老 API,需要提前做适配。

同类 PR 完整列表

PR #标题作者Diff
#18569[Improvement-18568][API] Remove obsolete task update-with-upstream API (#18569)@ruanwenjun+2/-507
#18557[Improvement-18556][API] Remove obsolete dynamic sub-workflow API (#18557)@ruanwenjun+2/-138
#18584[Chore][API] Remove obsolete cluster query-by-code API (#18584)@ruanwenjun+5/-90
#18408[Chore][Common] Handle parentless paths in FileUtils (#18408)@hiSandog+17/-1
#18599[Chore] Remove unused code- #18599 (#18599)@SbloodyS+0/-11

七. ☸️ K8S/云原生部署(1 项 PR)

代表性 PR:#18574 - [Fix-17883] Fix K8s Alert HTTP test sending failed by using IP for non-StatefulSet pods (#17883) (#18574)

  • 作者:@zhang-arvin
  • 变更规模:+10 / -3 行
  • 本月同类 PR 数:1 项

用户价值:K8S 非 StatefulSet Pod(如 Deployment 模式)下,告警 HTTP 实例测试之前因按 hostname 寻址失败,修复后改用 IP 寻址,K8S 部署的告警通道可靠性提升。

八. 📚 文档/示例改进(2 项 PR)

代表性 PR:#18478 - [Doc-18474][Upgrade] Fix zh/en incompatible upgrade docs out of sync (#18478)

  • 作者:@njnu-seafish
  • 变更规模:+11 / -15 行
  • 本月同类 PR 数:2 项

用户价值:修复了数据源文档和配置文档中的坏链接,同时中英文升级不兼容变更文档重新对齐,减少文档误导带来的踩坑。

同类 PR 完整列表

PR #标题作者Diff
#18478[Doc-18474][Upgrade] Fix zh/en incompatible upgrade docs out of sync (#18478)@njnu-seafish+11/-15
#18578[Doc-18579] Fix malformed links in datasource and configuration docs (#18578)@kittimzhe+3/-3

⚠️ 升级与验证建议

风险等级评估

总体风险等级:🟠 中高风险

风险维度评估说明
核心模块变更⚠️ 是API 模块 15/23 触达,需重点回归权限相关接口
Bug 修复数量9 项Bug修复较多,建议关注任务重试/失败恢复场景
权限/安全变更7 项⚠️ 权限模型有较大变动,需全面验证鉴权逻辑
K8S/部署变更1 项⚠️ 涉及部署脚本,需验证Helm/Docker部署
UI 变更⚠️ 前端有改动,需冒烟测试主要页面
数据库 Schema⚠️ 是DSIP-18464 有新增 DDL,升级脚本需确认执行

升级前准备

  1. 📦 备份数据库:升级前对 DolphinScheduler 元数据库做完整备份(mysqldump / pg_dump)
  2. 📋 检查 DDL 脚本:核对 dolphinscheduler-dao/src/main/resources/sql/upgrade/3.5.0_schema/ 下新增脚本是否纳入升级流程
  3. 📝 阅读不兼容变更:重点检查 docs/docs/en/guide/upgrade/incompatible.md 中本月标记的 4 组 API 移除
  4. 🧪 检查自研集成:如使用 OpenAPI,用 grep 确认你们的代码里未用到这 3 个已移除接口:
    • cluster/query-by-code(PR #18584)
    • task/update-with-upstream(PR #18569)
    • 动态子工作流相关 API(PR #18557)
  5. 💾 配置文件备份:备份 conf/ 目录所有配置

常见问题快速排查

现象可能原因排查方向
保存工作流时突然 403PR #18561 权限校验更严格检查当前用户在目标项目是否有 write 权限;子工作流引用的上游工作流是否也在授权范围
子工作流无法引用PR #18597 新增跨项目校验确认子工作流所在项目对当前用户授权
数据源绑定失败 403PR #18566 新增数据源校验用户需在「数据源授权」中被授予对应数据源权限
K8S 部署下告警 HTTP 测试失败PR #18574 前后逻辑差异确认 Pod 网络策略;检查日志中是按 hostname 还是 IP 连接
升级后调度未按预期补火DSIP-18464 默认策略 Skip检查 missed_fire_policy 字段值;如需补跑请手动切换策略
任务重试总是立即触发(不按间隔)PR #18539 修复后按 endTime 算对比修复前后:重试时间 = 任务 结束时间 + retryInterval(非开始时间)
工作流实例列表加载变慢或报错大字段排除 VO 字段不匹配检查前端版本是否同步升级;或回滚看 #18444/#18442

🙏 致谢

感谢 2026 年 8 月为 Apache DolphinScheduler 贡献代码的 10 位贡献者:@ruanwenjun, @njnu-seafish, @SEPURI-SAI-KRISHNA, @kittimzhe, @nikhiln64, @hellodml, @zhang-arvin, @liang-wenjie, @hiSandog, @SbloodyS

你们的每一个 PR 都让 DolphinScheduler 在稳定性、可用性与生态扩展上持续进化!💪

📑 附录:本月合并 PR 全量明细

Bug 修复(9 项)

PR #标题作者合并时间影响模块+Lines-Lines
#18541[Fix-18540][Master] Reset the runtime state when recreating a failed task instance (#18541)@SEPURI-SAI-KRISHNA08-10dolphinscheduler-master+132-0
#18539[Fix-18538][Master] Schedule task retry at endTime + retryInterval (#18539)@SEPURI-SAI-KRISHNA08-11dolphinscheduler-master+97-3
#18561[Fix-18559][API] Align workflow mutations with project write permissions (#18561)@ruanwenjun08-19dolphinscheduler-api+426-128
#18573[Fix-18570][Master] Detect wrapped CommandDuplicateHandleException in bootstrapError (#18570) (#18573)@hellodml08-21dolphinscheduler-master+136-1
#18566[Fix-18565][API] Validate datasource access for task definitions (#18566)@ruanwenjun08-21dolphinscheduler-api+342-17
#18583[Fix-18582][Authentication] Align actuator endpoint matching (#18583)@ruanwenjun08-25misc+149-11
#18597[Fix-18596][API] Enforce permission checks for sub-workflow references (#18597)@ruanwenjun08-29dolphinscheduler-api+450-0
#18574[Fix-17883] Fix K8s Alert HTTP test sending failed by using IP for non-StatefulSet pods (#17883) (#18574)@zhang-arvin08-31dolphinscheduler-common+10-3
#18434[Fix-18389][DataX] Read job definition from attached resource file when custom json is empty (#18434)@nikhiln6408-31dolphinscheduler-task-plugindolphinscheduler-ui+344-8

性能优化(2 项)

PR #标题作者合并时间影响模块+Lines-Lines
#18442[Improvement-18441][API&DAO] Optimize TaskInstanceMapper to exclude large text fields from list queries (#18442)@njnu-seafish08-07dolphinscheduler-dao+17-5
#18444[Improvement-18443][API&DAO] Optimize WorkflowInstanceMapper to exclude large text fields from list queries (#18444)@njnu-seafish08-26docsdolphinscheduler-apidolphinscheduler-daodolphinscheduler-master+790-268

功能特性(6 项)

PR #标题作者合并时间影响模块+Lines-Lines
#18557[Improvement-18556][API] Remove obsolete dynamic sub-workflow API (#18557)@ruanwenjun08-18docsdolphinscheduler-apidolphinscheduler-commondolphinscheduler-dao+2-138
#18560[Improvement-18558][API] Harden user list access and responses (#18560)@ruanwenjun08-18dolphinscheduler-apidolphinscheduler-daodolphinscheduler-ui+65-28
#18564[Improvement-18563][API] Refine datasource authorization list APIs (#18564)@ruanwenjun08-19dolphinscheduler-apidolphinscheduler-dao+102-62
#18569[Improvement-18568][API] Remove obsolete task update-with-upstream API (#18569)@ruanwenjun08-24docsdolphinscheduler-apidolphinscheduler-dao+2-507
#18581[Improvement-18580][api] Fix typo in DataSourceServiceImpl log message (#18581)@kittimzhe08-25dolphinscheduler-api+1-1
#18590[Improvement-18589][API] Align cluster query permissions (#18590)@ruanwenjun08-26dolphinscheduler-api+59-20

架构改进(6 项)

PR #标题作者合并时间影响模块+Lines-Lines
#18478[Doc-18474][Upgrade] Fix zh/en incompatible upgrade docs out of sync (#18478)@njnu-seafish08-10docs+11-15
#18464[DSIP-18454][Scheduler] Add schedule missed fire policy (#18464)@liang-wenjie08-12docsdolphinscheduler-apidolphinscheduler-commondolphinscheduler-daodolphinscheduler-scheduler-plugindolphinscheduler-ui+542-7
#18408[Chore][Common] Handle parentless paths in FileUtils (#18408)@hiSandog08-19dolphinscheduler-common+17-1
#18578[Doc-18579] Fix malformed links in datasource and configuration docs (#18578)@kittimzhe08-22docs+3-3
#18584[Chore][API] Remove obsolete cluster query-by-code API (#18584)@ruanwenjun08-28docsdolphinscheduler-apidolphinscheduler-ui+5-90
#18599[Chore] Remove unused code- #18599 (#18599)@SbloodyS08-28dolphinscheduler-api+0-11