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

Ignite从2.11.0升级至2.15.0后clear()方法抛出异常求助

Ignite 2.15.0中clear()方法抛出异常的原因排查与解决方案

异常现象

从Ignite 2.11.0升级到2.15.0后,未修改任何配置,调用clear()/clearAll()方法时抛出如下异常:

javax.cache.CacheException: class org.apache.ignite.IgniteCheckedException: Remote job threw exception.
    at org.apache.ignite.internal.processors.cache.GridCacheUtils.convertToCacheException(GridCacheUtils.java:1272)
    at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.cacheException(IgniteCacheProxyImpl.java:2084)
    at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.clearAll(IgniteCacheProxyImpl.java:1654)
    at org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.clearAll(GatewayProtectedCacheProxy.java:1202)
    at geode.casper.ignite.CasperIgniteHelper.clearAllByKeys(CasperIgniteHelper.java:107)
    at geode.tme.cache.TMECache.internalClearCacheItems(TMECache.java:86)
    at geode.tme.cache.CacheManager.clearCacheItems(CacheManager.java:58)
    at geode.tme.flatfile.task.ClearCacheTask.execute(ClearCacheTask.java:39)
    at geode.services.scheduler.task.Task.executeTask(Task.java:435)
    at geode.services.scheduler.task.Task.execute(Task.java:369)
    at geode.services.scheduler.process.Process.executeTasksNow(Process.java:287)
    at geode.services.scheduler.process.Process.executeTasks(Process.java:210)
    at geode.services.scheduler.process.Process.executeTasks(Process.java:197)
    at geode.services.scheduler.SchedulerServiceImpl$2.run(SchedulerServiceImpl.java:243)
    at java.lang.Thread.run(Thread.java:750)
Caused by: class org.apache.ignite.IgniteCheckedException: Remote job threw exception.
    at org.apache.ignite.internal.util.IgniteUtils.cast(IgniteUtils.java:7929)
    at org.apache.ignite.internal.util.future.GridFutureAdapter.resolve(GridFutureAdapter.java:261)
    at org.apache.ignite.internal.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:173)
    at org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:142)
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter.clear(GridCacheAdapter.java:1147)
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter.clearAll(GridCacheAdapter.java:1118)
    at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.clearAll(IgniteCacheProxyImpl.java:1651)
    ... 12 more
Caused by: class org.apache.ignite.IgniteException: Remote job threw exception.
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter$ClearTask.result(GridCacheAdapter.java:7174)
    at org.apache.ignite.internal.processors.task.GridTaskWorker$4.apply(GridTaskWorker.java:1071)
    at org.apache.ignite.internal.processors.task.GridTaskWorker$4.apply(GridTaskWorker.java:1064)
    at org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:7463)
    at org.apache.ignite.internal.processors.task.GridTaskWorker.result(GridTaskWorker.java:1064)
    at org.apache.ignite.internal.processors.task.GridTaskWorker.onResponse(GridTaskWorker.java:868)
    at org.apache.ignite.internal.processors.task.GridTaskWorker.processDelayedResponses(GridTaskWorker.java:716)
    at org.apache.ignite.internal.processors.task.GridTaskWorker.body(GridTaskWorker.java:539)
    at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125)
    at org.apache.ignite.internal.processors.task.GridTaskProcessor.startTask(GridTaskProcessor.java:753)
    at org.apache.ignite.internal.processors.task.GridTaskProcessor.execute(GridTaskProcessor.java:448)
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter.executeClearTask(GridCacheAdapter.java:1172)
    ... 15 more
Caused by: class org.apache.ignite.spi.IgniteSpiException: Failed to send message to remote node: TcpDiscoveryNode [id=a064e16f-0b64-43a7-a687-abcbb7887e2f, consistentId=a064e16f-0b64-43a7-a687-abcbb7887e2f, addrs=ArrayList [127.0.0.1, 172.17.0.2], sockAddrs=null, discPort=0, order=5, intOrder=5, lastExchangeTime=1694434475703, loc=false, ver=2.15.0#20230425-sha1:f98f7f35, isClient=true]
    at org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi.sendMessage0(TcpCommunicationSpi.java:1152)
    at org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi.sendMessage(TcpCommunicationSpi.java:1052)
    at org.apache.ignite.internal.managers.communication.GridIoManager.send(GridIoManager.java:2102)
    at org.apache.ignite.internal.managers.communication.GridIoManager.sendToGridTopic(GridIoManager.java:2195)
    at org.apache.ignite.internal.processors.task.GridTaskWorker.sendRequest(GridTaskWorker.java:1450)
    at org.apache.ignite.internal.processors.task.GridTaskWorker.processMappedJobs(GridTaskWorker.java:669)
    at org.apache.ignite.internal.processors.task.GridTaskWorker.body(GridTaskWorker.java:533)
    ... 19 more
Caused by: class org.apache.ignite.IgniteCheckedException: No session found
    at org.apache.ignite.spi.communication.tcp.internal.GridNioServerWrapper.createNioSession(GridNioServerWrapper.java:660)
    at org.apache.ignite.spi.communication.tcp.internal.GridNioServerWrapper.createTcpClient(GridNioServerWrapper.java:693)
    at org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi.createTcpClient(TcpCommunicationSpi.java:1181)
    at org.apache.ignite.spi.communication.tcp.internal.GridNioServerWrapper.createTcpClient(GridNioServerWrapper.java:691)
    at org.apache.ignite.spi.communication.tcp.internal.ConnectionClientPool.createCommunicationClient(ConnectionClientPool.java:442)
    at org.apache.ignite.spi.communication.tcp.internal.ConnectionClientPool.reserveClient(ConnectionClientPool.java:231)
    at org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi.sendMessage0(TcpCommunicationSpi.java:1105)

原因分析

从异常栈根因No session found以及目标节点标记isClient=true可以定位问题:

  1. TCP通信SPI逻辑变更:Ignite 2.11到2.15版本间,TCP通信SPI对客户端节点的连接会话处理逻辑调整,旧版本会自动重试或忽略向离线客户端发消息的失败,2.15版本则直接抛出会话不存在异常。
  2. 集群拓扑不一致:集群元数据仍保留已离线的客户端节点信息,clearAll()操作广播到所有节点时,向该离线客户端发送清理任务导致连接失败。
  3. 清理任务默认覆盖客户端:默认情况下clear()/clearAll()会在所有集群节点(包括客户端)执行,但客户端通常不存储缓存数据,向其发送清理任务属于无效操作,新版本中触发了异常。

解决方案

1. 限制清理任务仅在服务器节点执行

修改代码,仅针对服务器节点执行清理,避免向客户端发送任务:

// 获取仅包含服务器节点的集群视图
IgniteCluster serverCluster = ignite.cluster().forServers();
// 通过服务器集群视图执行清理
serverCluster.cache("your-cache-name").clearAll(keys);

2. 调整TCP通信SPI配置

优化连接参数,加快集群感知离线节点速度,增加重试机制:

TcpCommunicationSpi commSpi = new TcpCommunicationSpi();
// 设置连接超时时间
commSpi.setConnectionTimeout(5000);
// 设置重连次数
commSpi.setReconnectCount(3);
// 配置心跳检测,加速离线节点识别
commSpi.setIdleConnectionTimeout(60000);
commSpi.setHeartbeatFrequency(10000);

// 应用配置到Ignite实例
IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setCommunicationSpi(commSpi);

3. 清理离线客户端节点

  • 排查客户端节点是否存在意外断开、网络波动等问题,修复客户端连接稳定性;
  • 触发集群拓扑刷新,移除已离线的客户端节点信息。

4. 升级到更高版本

该问题属于2.15版本的已知连接管理问题,可升级到2.16.0及以上稳定版本,此类问题通常会在后续版本中修复。

5. 添加异常重试逻辑

在业务代码中捕获异常,增加重试机制应对临时网络波动:

int retryCount = 3;
for (int i = 0; i < retryCount; i++) {
    try {
        ignite.cache("your-cache-name").clearAll(keys);
        break;
    } catch (CacheException e) {
        if (i == retryCount - 1) {
            throw e; // 最后一次重试失败,抛出异常
        }
        Thread.sleep(1000); // 间隔1秒后重试
    }
}

内容的提问来源于stack exchange,提问作者Venkatesh H Naik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 10:57:32