Ignite persisting a Set: Cannot find metadata for object with compact footer

Jairton Junior :

I am trying to create a Ignite Cache with persistence for Sets of Model. That is, IgniteCache<String, Set<Model>>.

While running it locally, everything works. I can restart the application and Ignite loads its persisted database.

But when running with Docker or Kubernetes (with mounted volume for persistence) I cannot restart the application. Otherwise I get this error:

Exception in thread "main" javax.cache.CacheException: class org.apache.ignite.IgniteCheckedException: Cannot find metadata for object with compact footer: 2097659979
    at org.apache.ignite.internal.processors.cache.GridCacheUtils.convertToCacheException(GridCacheUtils.java:1337)
    at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.cacheException(IgniteCacheProxyImpl.java:1758)
    at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.get(IgniteCacheProxyImpl.java:931)
    at org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.get(GatewayProtectedCacheProxy.java:640)
    at com.jesjobom.IgnitePersistence.remove(IgnitePersistence.java:81)
    at com.jesjobom.IgnitePersistence.add(IgnitePersistence.java:66)
    at com.jesjobom.Main.main(Main.java:17)
Caused by: class org.apache.ignite.IgniteCheckedException: Cannot find metadata for object with compact footer: 2097659979
    at org.apache.ignite.internal.util.IgniteUtils.cast(IgniteUtils.java:7429)
    at org.apache.ignite.internal.util.future.GridFutureAdapter.resolve(GridFutureAdapter.java:261)
    at org.apache.ignite.internal.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:172)
    at org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:141)
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get0(GridCacheAdapter.java:4723)
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:4697)
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:1415)
    at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.get(IgniteCacheProxyImpl.java:928)
    ... 4 more
Caused by: class org.apache.ignite.binary.BinaryObjectException: Cannot find metadata for object with compact footer: 2097659979
    at org.apache.ignite.internal.binary.BinaryReaderExImpl.getOrCreateSchema(BinaryReaderExImpl.java:2012)
    at org.apache.ignite.internal.binary.BinaryReaderExImpl.<init>(BinaryReaderExImpl.java:286)
    at org.apache.ignite.internal.binary.BinaryReaderExImpl.<init>(BinaryReaderExImpl.java:185)
    at org.apache.ignite.internal.binary.BinaryObjectImpl.reader(BinaryObjectImpl.java:832)
    at org.apache.ignite.internal.binary.BinaryObjectImpl.deserializeValue(BinaryObjectImpl.java:795)
    at org.apache.ignite.internal.binary.BinaryObjectImpl.value(BinaryObjectImpl.java:143)
    at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinary(CacheObjectUtils.java:177)
    at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapKnownCollection(CacheObjectUtils.java:93)
    at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinary(CacheObjectUtils.java:181)
    at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinaryIfNeeded(CacheObjectUtils.java:67)
    at org.apache.ignite.internal.processors.cache.CacheObjectContext.unwrapBinaryIfNeeded(CacheObjectContext.java:125)
    at org.apache.ignite.internal.processors.cache.GridCacheContext.unwrapBinaryIfNeeded(GridCacheContext.java:1773)
    at org.apache.ignite.internal.processors.cache.GridCacheContext.unwrapBinaryIfNeeded(GridCacheContext.java:1761)
    at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.setResult(GridPartitionedSingleGetFuture.java:695)
    at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.localGet(GridPartitionedSingleGetFuture.java:477)
    at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.mapKeyToNode(GridPartitionedSingleGetFuture.java:354)
    at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.map(GridPartitionedSingleGetFuture.java:225)
    at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.init(GridPartitionedSingleGetFuture.java:217)
    at org.apache.ignite.internal.processors.cache.distributed.dht.colocated.GridDhtColocatedCache.getAsync(GridDhtColocatedCache.java:272)
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get0(GridCacheAdapter.java:4716)
    ... 7 more
^C

I created a GitHub repo to make it easy to test... https://github.com/jesjobom/ignite-persistence-test/

Main configuration:

System.setProperty(IgniteSystemProperties.IGNITE_NO_SHUTDOWN_HOOK, "true");

IgniteConfiguration igniteConfiguration = new IgniteConfiguration();

//Region for persistent (in disk) data
DataRegionConfiguration persistence = new DataRegionConfiguration().setPersistenceEnabled(true)
        .setInitialSize(64 * 1024 * 1024)
        .setMaxSize(128 * 1024 * 1024).setName(PERSISTENT_REGION_NAME);

DataStorageConfiguration dataStorageConfiguration = new DataStorageConfiguration().setDefaultDataRegionConfiguration(persistence);

//Persistence location config
dataStorageConfiguration.setWalPath(STORAGE_LOCATION + "/wal")
        .setWalArchivePath(STORAGE_LOCATION + "/wal-arc")
        .setStoragePath(STORAGE_LOCATION + "/store");

igniteConfiguration.setDataStorageConfiguration(dataStorageConfiguration);

ignite = Ignition.getOrStart(igniteConfiguration);
ignite.cluster().active(true);

store = ignite.getOrCreateCache(new CacheConfiguration<String, Set<Model>>()
        .setDataRegionName(PERSISTENT_REGION_NAME)
        .setCacheMode(CacheMode.REPLICATED)
        .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL)
        .setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC)
        .setName("store")
        .setIndexedTypes(String.class, Set.class)
);
dmagda :

It looks like IGNITE_HOME directory refers to a volume/folder that is cleared on restarts. Please set that variable to a path that is not changed over restarts the way you did for the storage and WAL.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=154331&siteId=1