Почему ignite не удается десериализовать объект GridClosureProcessor?

#ignite

#ignite

Вопрос:

Я знаю, что аналогичный стек был опубликован другими. Мой вопрос: «похоже, Ignite пытается десериализовать GridClosureProcessor (или закрытие от него?) . Если да, то почему он это делает? Я пытаюсь устранить основную причину этой проблемы, но ни один из моих кодов не находится в стеке, за исключением MyCallable, упомянутого вверху (фактически не в стеке).

В этом пути к коду не происходит кэширования, если они не являются внутренними. Я упоминаю это из-за комментария к другому сообщению о том, что «Неизвестная пара» может быть вызвана размещением кэша неправильного типа.

Я сосредотачиваюсь на

Не удалось десериализовать объект [имя_Типа=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.разное.Launcher $ AppClassLoader@764c12b6, clsLdrId=730290ff961-8d93b961-09f2-48c3-bd2f-49db31aae61e, userVer = 0, loc= true, sampleClsName=o.a.i.i.processors.cache.GridCacheProcessor$RemovedItemsCleanupTask$1, pendingUndeploy=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.разное.Launcher $ AppClassLoader@764c12b6, closed= false, cpSpi = null, failSpi = null, loadSpi = null, usage = 1, fullSup = false, internal= false, topPred = null, subjId=7ff6a786-9d4d-43d8-91a0-70225c5e3a4a, mapFut=IgniteFuture [origin= GridFutureAdapter [ignoreInterrupts=false, состояние= ИНИЦИАЛИЗАЦИЯ, res= null, хэш =314803578]], execName=null], JobID=800890ff961-7ff6a786-9d4d-43d8-91a0-70225c5e3a4a]] класс 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.GridJobWorker.initialize 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.запустите (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.Абстрактное имя awaremarshaller.unmarshal(абстрактное имя awaremarshaller.java:82) в org.apache.ignite.internal.util.IgniteUtils.unmarshal(IgniteUtils.java:9902) … еще 10 вызвано: class org.apache.ignite.binary.Исключение BinaryInvalidTypeException: неизвестная пара [PlatformID=0, typeId =-1409390795] в организации.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.Двоичные файлы.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. воспламенить.внутренний.двоичный файл.BinaryContext.descriptorForTypeId(BinaryContext.java:687) … еще 22

обновление — хотел отметить, что это происходит при новом развертывании. Вокруг нет старых файлов или чего-либо сохраненного. Все классы либо извлекаются из even, либо только что скомпилированы. 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. Пожалуйста, покажите com.obfucorp.aa.project.core.jobs. Вызываемый класс

2. Отредактированный пост, чтобы добавить код для класса.

Ответ №1:

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

Похоже, вы потеряли свой кеш маршаллера ( marshaller/ каталог).

Вы можете сделать ignite.marshaller().marshal(new WhateverTypeIsCausingThis()); один раз, чтобы устранить эту ошибку.

Комментарии:

1. Я не вижу этот метод в ignite, поэтому я сделал это. значение gkc: GridKernalContext = (ignite. asInstanceOf[IgniteKernal]).context() val marshaller = gkc.grid().configuration().getMarshaller но это не помогло. Я не уверен, какой тип вызывает это на самом деле. Это не видно в стеке, если только это не»org.apache.ignite.internal.processors.closure.GridClosureProcessor$C2]».

2. Я посмотрел на серверный узел. Каталог существует и содержит только /var/lib/ignite/work/marshaller/902610168.classname0.ignite/work/marshaller/902610168.classname0. Содержимое этого единственного файла представляет собой строку «javax.cache.integration. Исключение CacheLoaderException». Это ожидаемо? (На этом этапе кода мы еще не загрузили никаких кэшей.) Это что-нибудь значит?

3. Включена ли у вас сохраняемость? Если ответ положительный, это означает, что вы потеряли свой кэш маршаллера. Вы всегда должны поддерживать работу / маршаллер вместе с постоянными данными.

4. Да, у нас есть сохранение. Мы получаем эту ошибку сразу после запуска всего нового (таким образом, фактически ничего не сохранялось до запуска). вопросы: (1) Как мы могли потерять кэш маршаллера в тот момент (так рано)? (2) Нужно ли нам создавать его явно при запуске? Я не уверен, что это когда-либо было там. (3) что мне нужно сделать, чтобы сохранить work / marshaller вместе с постоянными данными, как вы говорите. Я не знаю, какие действия предпринять по этому поводу.

5. Я предполагаю, что у вас были оставшиеся данные (но не кэш маршаллера) от предыдущих запусков, и Ignite не знал, к каким типам сопоставляются эти данные.