【问题标题】:Why is cacheLoadOnlyStoreAdapter throwing NPE during load?为什么 cacheLoadOnlyStoreAdapter 在加载过程中会抛出 NPE?
【发布时间】:2019-04-02 06:00:50
【问题描述】:

我们从 2.4.0 切换到 2.7.0。什么可能导致这种情况?我不能排除我们的代码有问题,但我们不在堆栈中。

22:39:36.270 [mgmt-#66] 错误 o.a.i.i.p.task.GridTaskWorker - 失败 从结果获取远程作业结果策略 ComputeTask.result(..) 方法(将使整个任务失败): GridJobResultImpl [job=C2 [c=LoadCacheJobV2 [keepBinary=false]], sib=GridJobSiblingImpl [sesId=6461c7cd961-d4d7605d-33c7-4941-84bc-f6eca074593f, jobId=7461c7cd961-d4d7605d-33c7-4941-84bc-f6eca074593f, nodeId=503c524c-c53a-4f98-aadd-4c95ac2b168b, isJobDone=false], jobCtx=GridJobContextImpl [jobId=7461c7cd961-d4d7605d-33c7-4941-84bc-f6eca074593f, timeoutObj=null, attrs={}], node=TcpDiscoveryNode [id=503c524c-c53a-4f98-aadd-4c95ac2b168b,地址=[127.0.0.1, 172.17.0.2], sockAddrs=[/127.0.0.1:47500, / 172.17.0.2:47500], discPort=47500, order=1, intOrder=1, lastExchangeTime=1554182314332, loc=false, ver=2.4.0#20180305-sha1:aa342270, isClient=false], ex=class o.a.i.IgniteException: null, hasRes=true, isCancelled=false, isOccupied=true] org.apache.ignite.IgniteException:远程作业抛出 用户异常(覆盖或实现 ComputeTask.result(..) 方法,如果 您希望对此异常进行自动故障转移)。 在 org.apache.ignite.compute.ComputeTaskAdapter.result(ComputeTaskAdapter.java:101) 在 org.apache.ignite.internal.processors.task.GridTaskWorker$5.apply(GridTaskWorker.java:1047) 在 org.apache.ignite.internal.processors.task.GridTaskWorker$5.apply(GridTaskWorker.java:1040) 在 org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:6655) 在 org.apache.ignite.internal.processors.task.GridTaskWorker.result(GridTaskWorker.java:1040) 在 org.apache.ignite.internal.processors.task.GridTaskWorker.onResponse(GridTaskWorker.java:858) 在 org.apache.ignite.internal.processors.task.GridTaskProcessor.processJobExecuteResponse(GridTaskProcessor.java:1077) 在 org.apache.ignite.internal.processors.task.GridTaskProcessor$JobMessageListener.onMessage(GridTaskProcessor.java:1312) 在 org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1555) 在 org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1183) 在 org.apache.ignite.internal.managers.communication.GridIoManager.access $4200(GridIoManager.java:126) 在 org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1090) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748) 引起:org.apache.ignite.IgniteException: null 在 org.apache.ignite.internal.processors.closure.GridClosureProcessor$C2.execute(GridClosureProcessor.java:1858) 在 org.apache.ignite.internal.processors.job.GridJobWorker$2.call(GridJobWorker.java:566) 在 org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:6623) 在 org.apache.ignite.internal.processors.job.GridJobWorker.execute0(GridJobWorker.java:560) 在 org.apache.ignite.internal.processors.job.GridJobWorker.body(GridJobWorker.java:489) 在 org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110) 在 org.apache.ignite.internal.processors.job.GridJobProcessor.processJobExecuteRequest(GridJobProcessor.java:1123) 在 org.apache.ignite.internal.processors.job.GridJobProcessor$JobExecutionListener.onMessage(GridJobProcessor.java:1921) ...省略了7个常用框架 引起:org.apache.ignite.IgniteException: null 在 org.apache.ignite.internal.util.IgniteUtils.convertException(IgniteUtils.java:980) 在 org.apache.ignite.internal.processors.cache.GridCacheAdapter$LoadCacheJob.localExecute(GridCacheAdapter.java:5525) 在 org.apache.ignite.internal.processors.cache.GridCacheAdapter$LoadCacheJobV2.localExecute(GridCacheAdapter.java:5569) 在 org.apache.ignite.internal.processors.cache.GridCacheAdapter$TopologyVersionAwareJob.execute(GridCacheAdapter.java:6184) 在 org.apache.ignite.compute.ComputeJobAdapter.call(ComputeJobAdapter.java:132) 在 org.apache.ignite.internal.processors.closure.GridClosureProcessor$C2.execute(GridClosureProcessor.java:1855)

...省略了 14 个常用帧 引起:org.apache.ignite.IgniteCheckedException:null 在 org.apache.ignite.internal.util.IgniteUtils.cast(IgniteUtils.java:7244) 在 org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.sessionEnd0(GridCacheStoreManagerAdapter.java:943) 在 org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.loadCache(GridCacheStoreManagerAdapter.java:549) 在 org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheAdapter.localLoadCache(GridDhtCacheAdapter.java:608) 在 org.apache.ignite.internal.processors.cache.GridCacheProxyImpl.localLoadCache(GridCacheProxyImpl.java:217) 在 org.apache.ignite.internal.processors.cache.GridCacheAdapter$LoadCacheJob.localExecute(GridCacheAdapter.java:5520)

...18 个常见框架省略 原因:java.lang.NullPointerException: null 在 org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter$SessionData.access$900(GridCacheStoreManagerAdapter.java:964) 在 org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.sessionEnd0(GridCacheStoreManagerAdapter.java:937)

...省略了 22 个常用帧 22:39:36.293 [pool-3-thread-1] 错误 c.b.a.c.c.i.cache.CeresCacheManager - 加载缓存 ceres-daily-2019-02-27 的数据时出现问题。问题: () java.lang.NullPointerException:空 在 org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter$SessionData.access$900(GridCacheStoreManagerAdapter.java:964) 在 org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.sessionEnd0(GridCacheStoreManagerAdapter.java:937) 在 org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.loadCache(GridCacheStoreManagerAdapter.java:549) 在 org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheAdapter.localLoadCache(GridDhtCacheAdapter.java:608) 在 org.apache.ignite.internal.processors.cache.GridCacheProxyImpl.localLoadCache(GridCacheProxyImpl.java:217) 在 org.apache.ignite.internal.processors.cache.GridCacheAdapter$LoadCacheJob.localExecute(GridCacheAdapter.java:5520) 在 org.apache.ignite.internal.processors.cache.GridCacheAdapter$LoadCacheJobV2.localExecute(GridCacheAdapter.java:5569) 在 org.apache.ignite.internal.processors.cache.GridCacheAdapter$TopologyVersionAwareJob.execute(GridCacheAdapter.java:6184) 在 org.apache.ignite.compute.ComputeJobAdapter.call(ComputeJobAdapter.java:132) 在 org.apache.ignite.internal.processors.closure.GridClosureProcessor$C2.execute(GridClosureProcessor.java:1855) 在 org.apache.ignite.internal.processors.job.GridJobWorker$2.call(GridJobWorker.java:566) 在 org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:6623) 在 org.apache.ignite.internal.processors.job.GridJobWorker.execute0(GridJobWorker.java:560) 在 org.apache.ignite.internal.processors.job.GridJobWorker.body(GridJobWorker.java:489) 在 org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110) 在 org.apache.ignite.internal.processors.job.GridJobProcessor.processJobExecuteRequest(GridJobProcessor.java:1123) 在 org.apache.ignite.internal.processors.job.GridJobProcessor$JobExecutionListener.onMessage(GridJobProcessor.java:1921) 在 org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1555) 在 org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1183) 在 org.apache.ignite.internal.managers.communication.GridIoManager.access $4200(GridIoManager.java:126) 在 org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1090) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748)

public class XYZLoader
    extends CacheLoadOnlyStoreAdapter<XYZKey, byte[], XYZRecord>
    implements ComputeJob, Serializable {

    public XYZLoader(...) {

        reconfigureCacheLoadOnlyStoreAdapter(gridNodePhysicalThreadCount, externalParallelism);

    }

    private void reconfigureCacheLoadOnlyStoreAdapter(int gridNodePhysicalThreadCount, int externalParallelism) {
        int physicalThreadCount = ...

        this.setBatchSize(...);
        this.setBatchQueueSize(...);
        this.setThreadsCount(...);
    }

    int[] getLocalPartitions(Ignite ignite) {
        //...
        return ...;
    }

    @Override
    protected Iterator<XYZRecord> inputIterator(@Nullable Object... args) throws CacheLoaderException {
        int[] parts = getLocalPartitions(ignite);
        IgniteCluster cluster = ignite.cluster();
        ClusterNode localNode = cluster.localNode();
        int partitionCount = ignite.affinity(dataloadDescriptor.cacheName).partitions();

        Iterator<XYZRecord> reader = new XYZReader(parts, ...);

        iteratorFinishedFlag = false;

        return new Iterator<XYZRecord>() {
            // wrap inner iterator reader here..
        };
    }

    protected IgniteBiTuple<XYZKey, byte[]> parse(XYZRecord rec, @Nullable Object... args) {
        // parsing foo...
        return record;
    }

    @IgniteInstanceResource
    public void setIgnite(Ignite ignite) {
        this.ignite = ignite;
    }

    @Override // ComputeJob
    public void cancel() {
        throw new RuntimeException("Not implemented");
    }

    @Override // ComputeJob
    public Object execute() throws IgniteException {
        throw new RuntimeException("Not implemented");
    }

    @TaskSessionResource
    public void setTaskSession(ComputeTaskSession taskSes) {
        ComputeTaskSession ses = taskSes;
        logger.info(... ses);
    }
}

【问题讨论】:

  • 你能分享一下你的缓存存储实现代码吗?
  • 我只能分享一个高度编辑的版本。但是显示了与 super 的所有交互。如果允许,我现在将编辑和添加。
  • 好的,我把它压扁了,现在它适合了.. 感谢您的关注。

标签: ignite


【解决方案1】:

我敢打赌,您忘记在 CacheStore 实现中的某处调用 super.method(),导致底层数据结构的部分初始化。也许在 loadCache() 或 loadFromStore() 中。

【讨论】:

  • 嗯不认为实现那些必要的使用 CacheLoadOnlyStoreAdapter。在 javadoc 中看不到任何类似的效果。
  • 将在每个帖子的示例/src/main/java/org/apache/ignite/examples/datagrid/store 中查看此类的示例
  • 示例是 ./examples/src/main/java/org/apache/ignite/examples/datagrid/store/CacheLoadOnlyStoreExample.java。我没有看到它做任何我不真正做的事情。
  • 你能把一个小的复制器项目放在一起,上传到某个地方吗?
猜你喜欢
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 2011-08-26
  • 2013-03-10
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 2014-02-25
相关资源
最近更新 更多