Неизвестный тип pdx = 4

java gemfire geode

375 просмотра

1 ответ

Моя распределенная geodeсистема работала хорошо раньше, но в последнее время нет, и я не знаю, имеет ли это отношение к отключению электроэнергии прошлой ночью. Кажется, что все данные геоданных сохранились до того, как их нельзя десериализовать назад.

вот информация об ошибке:

 Caused by: java.lang.IllegalStateException: Unknown pdx type=4
    at com.gemstone.gemfire.internal.InternalDataSerializer.readPdxSerializable(InternalDataSerializer.java:3162)
    at com.gemstone.gemfire.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2979)
    at com.gemstone.gemfire.DataSerializer.readObject(DataSerializer.java:3210)
    at com.gemstone.gemfire.internal.util.BlobHelper.deserializeBlob(BlobHelper.java:101)
    at com.gemstone.gemfire.internal.cache.EntryEventImpl.deserialize(EntryEventImpl.java:1554)
    at com.gemstone.gemfire.internal.cache.EntryEventImpl.deserialize(EntryEventImpl.java:1546)
    at com.gemstone.gemfire.internal.cache.PreferBytesCachedDeserializable.getDeserializedValue(PreferBytesCachedDeserializable.java:67)
    at com.gemstone.gemfire.internal.cache.EntryEventImpl.getOldValue(EntryEventImpl.java:723)
    at com.gemstone.gemfire.internal.cache.LocalRegion.validatedDestroy(LocalRegion.java:1146)
    at com.gemstone.gemfire.internal.cache.LocalRegion.destroy(LocalRegion.java:1130)
    at com.gemstone.gemfire.internal.cache.AbstractRegion.destroy(AbstractRegion.java:315)
    at com.gemstone.gemfire.internal.cache.LocalRegion.remove(LocalRegion.java:9372)
    at com.igola.datahub.wwl.geode.WWLResultsDAO.removeByKey(WWLResultsDAO.java:276)

Мой проект был построен на игровой платформе, и моя конфигурация кеша геоданных и региона выглядит следующим образом:

cache.setIsServer(true);

    diskStorage = configuration.getString("geode.storage.name");
    String fileStorage = configuration.getString("geode.storage.path");
    cache.createDiskStoreFactory()
            .setDiskDirs(new File[]{new File(fileStorage)})
            .setDiskUsageWarningPercentage(0.8f)
            .setAutoCompact(true)
            .create(diskStorage);

geodeCache.getCache()
            .<DataKey, When2GoData>createRegionFactory(PARTITION_REDUNDANT_PERSISTENT_OVERFLOW)
            .setStatisticsEnabled(true)
            .setEntryIdleTimeout(new ExpirationAttributes(TIMEOUT_LONG, ExpirationAction.DESTROY))
            .setDiskStoreName(geodeCache.getDiskStorage())
            .setPartitionAttributes(new PartitionAttributesFactory<>()
                    .setRedundantCopies(REDUNDANT_COPIES)
                    .setPartitionResolver(new DataKey())
                    .create())
            .create("xxx");

cache = new CacheFactory()
            .set("locators", configuration.getString("geode.locator"))
            .set("name", configuration.getString("geode.name")+ "-"+ uuid)
            .set("mcast-port", "0")
            .set("log-level", "error")
            .setPdxPersistent(true)
            .setPdxReadSerialized(true)
            .create();
Автор: Even Young Источник Размещён: 08.11.2019 10:59

Ответы (1)


1 плюс

Вот соответствующий код из readPdxSerializableметода:

PdxType pdxType = gfc.getPdxRegistry().getType(typeId);
if (logger.isTraceEnabled(LogMarker.SERIALIZER)) {
    logger.trace(LogMarker.SERIALIZER, "readPdxSerializable pdxType={}", pdxType);
}
if (pdxType == null) {
  throw new IllegalStateException("Unknown pdx type=" + typeId);
}

Похоже, в вашем кеше есть что-то, что вы больше не можете десериализовать ... из-за (я думаю) того факта, что тип больше не зарегистрирован в реестре типов.

Автор: Stephen C Размещён: 20.08.2016 07:27
32x32