当前位置: 首页 > 知识库问答 >
问题:

为什么cacheLoadOnlyStoreAdapter在加载过程中抛出NPE?

厉成仁
2023-03-14

我们从2.4.0切换到2.7.0。这可能是什么原因造成的?我不能排除我们的代码有问题,但我们不在堆栈中。

...忽略了14个常见帧,原因是:org.apache.ignite.ignite.internal.util.igniteutils.cast(igniteutils.java:7244)(org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.SessionEnd0(GridCacheStoreManagerAdapter.943)(org.apache.ignite.internal.processors.Cache.store.GridCacheStoreManagerAdapter.LoadCache(GridCacheStoreManagerAdapter.549)(org.apache.ignite.ignite.internal.processors.cac)he.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: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)

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);
    }
}

共有1个答案

邵和硕
2023-03-14

我打赌您忘记在CacheStore实现的某个地方调用super.method(),从而导致底层数据结构的部分初始化。可能在loadCache()或loadFromStore()中。

 类似资料:
  • 我的代码出现错误: 我的示例的完整代码如下:

  • 问题内容: final Multimap terms = getTerms(bq); for (Term t : terms.keySet()) { Collection C = new HashSet(terms.get(t)); if (!C.isEmpty()) { for (Iterator it = C.iterator(); it.hasNext();) { BooleanClause

  • 问题内容: 我试图将两个’Employee’对象添加到TreeSet中: 但是它抛出一个ClassCastException: 但是,如果我仅将一个对象添加到TreeSet中: 或者,如果我改用HashSet: 那就成功了。为什么会发生异常,我该如何解决? 问题答案: 要么必须实现,或者你需要提供一个比较创建时。 在文档中对此进行了详细说明: 插入排序集中的所有元素都必须实现接口(或被指定的比较器

  • 问题内容: 将字符串解析为字节时出现异常 问题答案: 这是因为默认的parse方法要求使用十进制格式的数字来解析十六进制数字,请使用以下parse: 其中16是解析的基础。 至于您的评论,您是对的。字节的最大值为0x7F。因此,您可以将其解析为并执行二进制与操作以获得LSB,即您的字节:

  • 问题内容: 我有这种方法: 映射: Person.hbm.xml Cars.hbm.xml 此方法适用于单个线程,并且在多个线程上,给我一个错误: AOP交易: 注意:当我在更新后添加Thread.sleep(5000)时,就可以了。 但是这种解决方案并不干净。 问题答案: 我有汽车->(1-n)个地方。而且我在表位置(id_car)有一个外键。此外键没有索引。当我向该外键添加索引时,我的问题已解

  • 当使用Mockito截尾时,我们通常为一个方法指定一个具体的参数。之后,我们可以用相同的参数调用Stubed方法。例如,在下面的代码中,get()用参数0进行了stubed。所以,当调用get()时,get()的参数也是0。因此,get()将返回一个整数,即3。 如果调用语句被修改为: 即参数更改为1,然后Mockito抛出“NullPointerException”,而不是“AssertionE