Bug 1200514

Summary: Persistent Store containing a Map written by JDG <=6.3 can not read with JDG 6.4.0
Product: [JBoss] JBoss Data Grid 6 Reporter: wfink
Component: InfinispanAssignee: Tristan Tarrant <ttarrant>
Status: CLOSED CURRENTRELEASE QA Contact: Martin Gencur <mgencur>
Severity: unspecified Docs Contact:
Priority: urgent    
Version: 6.4.0CC: chuffman, dberinde, dstahl, jdg-bugs, wburns
Target Milestone: ER2   
Target Release: 6.4.1   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
After upgrading from Red Hat JBoss Data Grid 6.3 to version 6.4.0 users were unable to load data where a Map was used as a key or value. This issue has been addressed by updating Map serialization to support both the 6.3 and the 6.4.0 method, allowing maps from either version to be read successfully.
Story Points: ---
Clone Of:
: 1200525 (view as bug list) Environment:
Last Closed: 2015-04-02 12:14:05 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1200525    

Description wfink 2015-03-10 17:43:57 UTC
Description of problem:
A SingleFilestore which was created by a JDG version pre 6.4 will have issues if Externalizing is use and it is read after upgrade to 6.4.

The following stacktrace will be shown:

14:41:42,766 ERROR [org.infinispan.persistence.file.SingleFileStore] (ServerService Thread Pool -- 39) ISPN000252: Error executing parallel store task: org.infinispan.persistence.spi.PersistenceException: java.lang.IllegalStateException: Unexpected byte encountered0
	at org.infinispan.marshall.core.MarshalledEntryImpl.unmarshall(MarshalledEntryImpl.java:116) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.marshall.core.MarshalledEntryImpl.getValue(MarshalledEntryImpl.java:61) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.persistence.manager.PersistenceManagerImpl$1.processEntry(PersistenceManagerImpl.java:224) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.persistence.file.SingleFileStore$1.call(SingleFileStore.java:519) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.persistence.file.SingleFileStore$1.call(SingleFileStore.java:513) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at java.util.concurrent.FutureTask.run(FutureTask.java:262) [rt.jar:1.7.0_75]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [rt.jar:1.7.0_75]
	at java.util.concurrent.FutureTask.run(FutureTask.java:262) [rt.jar:1.7.0_75]
	at org.infinispan.util.concurrent.WithinThreadExecutor.execute(WithinThreadExecutor.java:22) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at java.util.concurrent.ExecutorCompletionService.submit(ExecutorCompletionService.java:181) [rt.jar:1.7.0_75]
	at org.infinispan.executors.ExecutorAllCompletionService.submit(ExecutorAllCompletionService.java:31) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.persistence.file.SingleFileStore.process(SingleFileStore.java:513) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.persistence.manager.PersistenceManagerImpl.preload(PersistenceManagerImpl.java:216) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_75]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_75]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_75]
	at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_75]
	at org.infinispan.commons.util.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:168) [infinispan-commons-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.factories.AbstractComponentRegistry$PrioritizedMethod.invoke(AbstractComponentRegistry.java:869) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.factories.AbstractComponentRegistry.invokeStartMethods(AbstractComponentRegistry.java:638) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.factories.AbstractComponentRegistry.internalStart(AbstractComponentRegistry.java:627) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.factories.AbstractComponentRegistry.start(AbstractComponentRegistry.java:530) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.factories.ComponentRegistry.start(ComponentRegistry.java:216) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.CacheImpl.start(CacheImpl.java:756) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.manager.DefaultCacheManager.wireAndStartCache(DefaultCacheManager.java:581) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.manager.DefaultCacheManager.createCache(DefaultCacheManager.java:536) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:414) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at com.services.cache.CacheProvider.<init>(CacheProvider.java:42) [test.jar:]
	at com.services.cache.CacheProvider.getInstance(CacheProvider.java:116) [test.jar:]
	at com.services.listener.ContextListener.contextInitialized(ContextListener.java:50) [classes:]
	at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3339) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4]
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:3777) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4]
	at org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:161) [jboss-as-web-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19]
	at org.jboss.as.web.deployment.WebDeploymentService.access$000(WebDeploymentService.java:59) [jboss-as-web-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19]
	at org.jboss.as.web.deployment.WebDeploymentService$1.run(WebDeploymentService.java:94) [jboss-as-web-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [rt.jar:1.7.0_75]
	at java.util.concurrent.FutureTask.run(FutureTask.java:262) [rt.jar:1.7.0_75]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_75]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_75]
	at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_75]
	at org.jboss.threads.JBossThread.run(JBossThread.java:122)
Caused by: java.lang.IllegalStateException: Unexpected byte encountered0
	at org.infinispan.commons.marshall.InstanceReusingAdvancedExternalizer.readObject(InstanceReusingAdvancedExternalizer.java:116) [infinispan-commons-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.marshall.core.ExternalizerTable$ExternalizerAdapter.readObject(ExternalizerTable.java:427) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.marshall.core.ExternalizerTable.readObject(ExternalizerTable.java:223) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.marshall.core.JBossMarshaller$ExternalizerTableProxy.readObject(JBossMarshaller.java:149) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:355)
	at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:224)
	at org.jboss.marshalling.river.RiverUnmarshaller.readFields(RiverUnmarshaller.java:1746)
	at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1659)
	at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1607)
	at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1286)
	at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:276)
	at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:224)
	at org.jboss.marshalling.river.RiverUnmarshaller.readFields(RiverUnmarshaller.java:1746)
	at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1659)
	at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1286)
	at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:276)
	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) [infinispan-commons-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.marshall.core.VersionAwareMarshaller.objectFromByteBuffer(VersionAwareMarshaller.java:101) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.commons.marshall.AbstractDelegatingMarshaller.objectFromByteBuffer(AbstractDelegatingMarshaller.java:80) [infinispan-commons-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	at org.infinispan.marshall.core.MarshalledEntryImpl.unmarshall(MarshalledEntryImpl.java:114) [infinispan-core-6.2.0.Final-redhat-4.jar:6.2.0.Final-redhat-4]
	... 40 more
Caused by: an exception which occurred:
	in field storedSnapshot
	in object of type org.hibernate.collection.internal.PersistentSet
	in field characteristicList
	in object of type com.services.bean.ProductBean

Comment 3 William Burns 2015-03-10 18:19:24 UTC
PR: https://github.com/infinispan/jdg/pull/550

Comment 4 William Burns 2015-03-18 18:15:03 UTC
Additional PR: https://github.com/infinispan/jdg/pull/577

Note that this fix only works for loaders that use the Marshaller method objectFromByteBuffer.  If they use objectFromObjectStream method it will only use the JDG 6.3 / 6.4.1 / 6.5 serialization method.