Migration tool show "ISPN000242: Missing foreign externalizer with id=1100" if JDBC store should migrated

Solution Verified - Updated

Environment

  • Red Hat JBoss Data Grid (JDG)
    • 6.x

Issue

  • If the migration tool is used to migrate a database store used with JDG6.1 it fails with the error below, but we did not use a custom externalizer. What is wrong?
Error: ISPN000242: Missing foreign externalizer with id=1100, either externalizer was not configured by client, or module lifecycle implementation adding externalizer was not loaded properly
org.infinispan.commons.CacheException: ISPN000242: Missing foreign externalizer with id=1100, either externalizer was not configured by client, or module lifecycle implementation adding externalizer was not loaded properly
        at org.infinispan.marshall.core.ExternalizerTable.readObject(ExternalizerTable.java:224)
        at org.infinispan.marshall.core.JBossMarshaller$ExternalizerTableProxy.readObject(JBossMarshaller.java:149)
        at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:354)
        at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
        at org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:41)
        at org.infinispan.container.entries.MortalCacheValue$Externalizer.readObject(MortalCacheValue.java:119)
        at org.infinispan.container.entries.MortalCacheValue$Externalizer.readObject(MortalCacheValue.java:109)
        at org.infinispan.marshall.core.ExternalizerTable$ExternalizerAdapter.readObject(ExternalizerTable.java:442)
        at org.infinispan.marshall.core.ExternalizerTable.readObject(ExternalizerTable.java:230)
        at org.infinispan.marshall.core.JBossMarshaller$ExternalizerTableProxy.readObject(JBossMarshaller.java:149)
        at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:354)
        at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
        at org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:41)
        at org.infinispan.commons.marshall.jboss.AbstractJBossMarshaller.objectFromObjectStream(AbstractJBossMarshaller.java:135)
        at org.infinispan.marshall.core.VersionAwareMarshaller.objectFromByteBuffer(VersionAwareMarshaller.java:106)
        at org.infinispan.commons.marshall.AbstractMarshaller.objectFromInputStream(AbstractMarshaller.java:104)
        at org.infinispan.commons.marshall.AbstractDelegatingMarshaller.objectFromInputStream(AbstractDelegatingMarshaller.java:60)
        at org.infinispan.loaders.jdbc.JdbcUtil.unmarshall(JdbcUtil.java:88)
        at org.infinispan.loaders.jdbc.stringbased.JdbcStringBasedCacheStore.readStoredEntry(JdbcStringBasedCacheStore.java:410)
        at org.infinispan.loaders.jdbc.stringbased.JdbcStringBasedCacheStore.loadLockSafe(JdbcStringBasedCacheStore.java:342)
        at org.infinispan.loaders.jdbc.stringbased.JdbcStringBasedCacheStore.loadLockSafe(JdbcStringBasedCacheStore.java:86)
        at org.infinispan.loaders.LockSupportCacheStore.load(LockSupportCacheStore.java:142)
        at org.infinispan.persistence.migrator.jdbc.JdbcUpgradeTool.run(JdbcUpgradeTool.java:173)
        at org.infinispan.persistence.migrator.jdbc.JdbcUpgradeTool.main(JdbcUpgradeTool.java:193)

Resolution

The migration tool need to handle the different JDBC store in embedded or Client-Server mode.
The issue is tracked by This content is not included.Bugzilla 1391044

Please don't hesitate to open a case and refer to this article if you plan to use the tool, current the fix is not public on the portal for download

Root Cause

If JDG 6.1 is used in Client-Server mode the Value is wrapped with org.infinispan.server.core.CacheValue object that contains the byte[] and a version number for the entry. The externalizer for CacheValue has id 1100.
Later JDG does not use CacheValue anymore so when reading something persisted with JDG 6.1 server cannot unmarshall CacheValue objects.

Product(s)
Category

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.