为什么ignite无法反序列化GridClosureProcessor对象?

时间:2019-04-09 01:56:22

标签: ignite

我知道其他人也发布了类似的堆栈。我的问题是“看来Ignite试图反序列化GridClosureProcessor(或从其关闭?)。如果是这样,为什么要这样做呢?我试图从根本上引起这个问题,但是除了堆栈中没有我的代码,顶部提到了MyCallable(实际上不在堆栈中)。

除非在内部,否则此代码路径中不会发生任何缓存放置。我之所以这样说,是因为在另一则帖子中评论说“未知对”可能是由错误类型的缓存放置引起的。

我专注于

  

反序列化对象失败   [typeName = org.apache.ignite.internal.processors.closure.GridClosureProcessor $ C2]

剩下的就是这里。

  

[2019-04-08 22:20:23,724] [错误] [pub-#63] [GridJobWorker]无法执行   初始化工作   [jobId = 800890ff961-7ff6a786-9d4d-43d8-91a0-70225c5e3a4a,   ses = GridJobSessionImpl [ses = GridTaskSessionImpl   [taskName = com.obfucorp.aa.project.core.jobs.MyCallable,   dep = GridDeployment [ts = 1554761996013,depMode = SHARED,   clsLdr=sun.misc.Launcher$AppClassLoader@764c12b6,   clsLdrId = 730290ff961-8d93b961-09f2-48c3-bd2f-49db31aae61e,userVer = 0,   loc = true,   sampleClsName = o.a.i.i.processors.cache.GridCacheProcessor $ RemovedItemsCleanupTask $ 1,   endingUndeploy = false,undeployed = false,用法= 1,   taskClsName = com.obfucorp.aa.project.core.jobs.MyCallable,   sesId = 700890ff961-7ff6a786-9d4d-43d8-91a0-70225c5e3a4a,   startTime = 1554762023663,endTime = 9223372036854775807,   taskNodeId = 7ff6a786-9d4d-43d8-91a0-70225c5e3a4a,   clsLdr = sun.misc.Launcher $ AppClassLoader @ 764c12b6,closed = false,   cpSpi = null,failSpi = null,loadSpi = null,用法= 1,fullSup = false,   internal = false,topPred = null,   subjId = 7ff6a786-9d4d-43d8-91a0-70225c5e3a4a,mapFut = IgniteFuture   [orig = GridFutureAdapter [ignoreInterrupts = false,state = INIT,res = null,   hash = 314803578]],execName = null],   jobId = 800890ff961-7ff6a786-9d4d-43d8-91a0-70225c5e3a4a]] class   org.apache.ignite.IgniteCheckedException:无法反序列化对象   [typeName = org.apache.ignite.internal.processors.closure.GridClosureProcessor $ C2]     在   org.apache.ignite.internal.util.IgniteUtils.unmarshal(IgniteUtils.java:9908)     在   org.apache.ignite.internal.processors.job.GridJobWorker.initialize(GridJobWorker.java:438)     在   org.apache.ignite.internal.processors.job.GridJobProcessor.processJobExecuteRequest(GridJobProcessor.java:1117)     在   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)引起于:class   org.apache.ignite.binary.BinaryObjectException:无法反序列化   宾语   [typeName = org.apache.ignite.internal.processors.closure.GridClosureProcessor $ C2]     在   org.apache.ignite.internal.binary.BinaryClassDescriptor.read(BinaryClassDescriptor.java:875)     在   org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1762)     在   org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1714)     在   org.apache.ignite.internal.binary.GridBinaryMarshaller.deserialize(GridBinaryMarshaller.java:310)     在   org.apache.ignite.internal.binary.BinaryMarshaller.unmarshal0(BinaryMarshaller.java:99)     在   org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.unmarshal(AbstractNodeNameAwareMarshaller.java:82)     在   org.apache.ignite.internal.util.IgniteUtils.unmarshal(IgniteUtils.java:9902)     ... 10更多原因:类   org.apache.ignite.binary.BinaryInvalidTypeException:未知对   [platformId = 0,typeId = -1409390795]位于   org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:696)     在   org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1755)     在   org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1714)     在   org.apache.ignite.internal.binary.BinaryUtils.doReadObject(BinaryUtils.java:1799)     在   org.apache.ignite.internal.binary.BinaryReaderExImpl.readObject(BinaryReaderExImpl.java:1329)     在   org.apache.ignite.internal.processors.closure.GridClosureProcessor $ C2.readBinary(GridClosureProcessor.java:1872)     在   org.apache.ignite.internal.binary.BinaryClassDescriptor.read(BinaryClassDescriptor.java:834)     ... 16更多原因:java.lang.ClassNotFoundException:未知对   [platformId = 0,typeId = -1409390795]位于   org.apache.ignite.internal.MarshallerContextImpl.getClassName(MarshallerContextImpl.java:385)     在   org.apache.ignite.internal.MarshallerContextImpl.getClass(MarshallerContextImpl.java:335)     在   org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:687)     ...另外22个

更新-要注意,这是一个全新的部署。没有旧文件或周围没有任何东西。所有类要么从偶数中提取,要么从新编译的中提取。 ty。

帕维尔,这是(Scala)代码(已编辑)

object MyCallable {
    type FooList = Array[Foo]
}

class MyCallable(cacheName: String) extends IgniteCallable[FooList] with Serializable with LazyLogging {
    @IgniteInstanceResource
    private var ignite: Ignite = _

    override def call(): FooList = {
        logger.debug("callable called.");
        val fooCache = ignite.getOrCreateCache[String, Foo](cacheName)
        val qry = new ScanQuery[String, Foo]()
        qry.setLocal(true)
        val cursor = fooCache.query(qry)
        val ret = cursor.iterator().asScala.map(e => e.getValue).toArray
        logger.info("load status array: {}", ret.mkString)
        return ret
    }

    @IgniteInstanceResource
    def setIgnite(ignite: Ignite): Unit = {
        this.ignite = ignite
    }
}

1 个答案:

答案 0 :(得分:1)

Caused by: class org.apache.ignite.binary.BinaryInvalidTypeException: Unknown pair [platformId=0, typeId=-1409390795]

似乎您丢失了编组缓存(marshaller/目录)。

您一次可以执行ignite.marshaller().marshal(new WhateverTypeIsCausingThis());来使此错误消失。