You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Ignite Bug:GridDiscoveryManager.java致服务节点崩溃

Ignite分段检测配置引发空指针崩溃问题

配置了segmentationResolver,将分段策略设为RESTART_JVM,同时把segmentationCheckFreq设为0(表示基于拓扑变化触发分段检查),但该场景下集群节点会出现崩溃。

代码逻辑矛盾分析

在GridDiscoveryManager.java的3130行,处理节点离开事件(EVT_NODE_LEFT)时,仅判断是否配置了解析器就调度分段检查:

case EVT_NODE_LEFT: {
// Check only if resolvers were configured.
if (hasRslvrs)
segChkWrk.scheduleSegmentCheck();

但segChkWrk对象仅在segmentationCheckFreq设为非零值时才会初始化,相关逻辑在1087行:

// Start segment check worker only if frequency is greater than 0.
if (hasRslvrs && segChkFreq > 0) {
    segChkWrk = new SegmentCheckWorker();
    segChkThread = new IgniteThread(segChkWrk);

这就导致当拓扑变化触发检查时,segChkWrk为空,直接抛出空指针异常,引发节点崩溃。

重现步骤

  • 配置分段解析器
  • 将segmentationCheckFreq设置为0
  • 停止集群中的一个节点,其余节点会因空指针崩溃

报错日志

2024-06-20 16:06:51,030 UTC+0530 ERROR [disco-event-worker-#45%as%] org.apache.ignite.internal.managers.discovery.GridDiscoveryManager -- Exception in discovery event worker thread.
java.lang.NullPointerException: Cannot invoke "org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$SegmentCheckWorker.scheduleSegmentCheck()" because the return value of "org.apache.ignite.internal.managers.discovery.GridDiscoveryManager.access$11600(org.apache.ignite.internal.managers.discovery.GridDiscoveryManager)" is null
at org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$DiscoveryWorker.body0(GridDiscoveryManager.java:3133) ~[ignite-core-2.16.0.jar:2.16.0]
at org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$DiscoveryWorker.body(GridDiscoveryManager.java:3060) ~[ignite-core-2.16.0.jar:2.16.0]
at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125) ~[ignite-core-2.16.0.jar:2.16.0]
at java.lang.Thread.run(Thread.java:1583) ~[?:?]

2024-06-20 16:06:51,711 UTC+0530 ERROR [disco-event-worker-#45%as%] org.apache.ignite.logger.jcl.JclLogger -- Critical system error detected. Will be handled accordingly to configured handler [hnd=StopNodeOrHaltFailureHandler [tryStop=false, timeout=0, super=AbstractFailureHandler [ignoredFailureTypes=UnmodifiableSet []]], failureCtx=FailureContext [type=SYSTEM_WORKER_TERMINATION, err=java.lang.NullPointerException: Cannot invoke "o.a.i.i.managers.discovery.GridDiscoveryManager$SegmentCheckWorker.scheduleSegmentCheck()" because the return value of "o.a.i.i.managers.discovery.GridDiscoveryManager.access$11600(o.a.i.i.managers.discovery.GridDiscoveryManager)" is null]]
java.lang.NullPointerException: Cannot invoke "org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$SegmentCheckWorker.scheduleSegmentCheck()" because the return value of "org.apache.ignite.internal.managers.discovery.GridDiscoveryManager.access$11600(org.apache.ignite.internal.managers.discovery.GridDiscoveryManager)" is null
at org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$DiscoveryWorker.body0(GridDiscoveryManager.java:3133) ~[ignite-core-2.16.0.jar:2.16.0]
at org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$DiscoveryWorker.body(GridDiscoveryManager.java:3060) ~[ignite-core-2.16.0.jar:2.16.0]
at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125) ~[ignite-core-2.16.0.jar:2.16.0]
at java.lang.Thread.run(Thread.java:1583) ~[?:?]

内容的提问来源于stack exchange,提问作者Lakshmikantha Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:38:12