[
https://issues.apache.org/jira/browse/GEODE-7491?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16979747#comment-16979747
]
Dan Smith commented on GEODE-7491:
----------------------------------
Steps to reproduce:
Clone this repo https://github.com/upthewaterspout/spring-session-data-geode
and check out the branch feature/demonstrate-GEODE-7491.
Run the integration test:
{noformat}
./gradlew spring-session-data-geode:integrationTest --tests
SessionSerializationWithPdxRequiresNoServerConfigurationIntegrationTests
{noformat}
It reports the following failure
{noformat}
org.springframework.dao.DataAccessResourceFailureException: remote server on
10.118.19.28(SpringBasedCacheClientApplication:16789:loner):63897:0497a590:SpringBasedCacheClientApplication:
: While performing a remote put; nested exception is
org.apache.geode.cache.client.ServerOperationException: remote server on
10.118.19.28(SpringBasedCacheClientApplication:16789:loner):63897:0497a590:SpringBasedCacheClientApplication:
: While performing a remote put
at
org.springframework.data.gemfire.GemfireCacheUtils.convertGemfireAccessException(GemfireCacheUtils.java:235)
at
org.springframework.data.gemfire.GemfireAccessor.convertGemFireAccessException(GemfireAccessor.java:93)
at
org.springframework.data.gemfire.GemfireTemplate.put(GemfireTemplate.java:197)
at
org.springframework.session.data.gemfire.GemFireOperationsSessionRepository.doSave(GemFireOperationsSessionRepository.java:226)
at
org.springframework.session.data.gemfire.GemFireOperationsSessionRepository.save(GemFireOperationsSessionRepository.java:186)
at
org.springframework.session.data.gemfire.AbstractGemFireIntegrationTests.save(AbstractGemFireIntegrationTests.java:409)
at
org.springframework.session.data.gemfire.serialization.pdx.SessionSerializationWithPdxRequiresNoServerConfigurationIntegrationTests.operationsOnSessionContainingApplicationDomainModelObjectIsSuccessful(SessionSerializationWithPdxRequiresNoServerConfigurationIntegrationTests.java:221)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at
org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)
at
org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at
org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
at
org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
at
org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at
org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at
org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
at
org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
at
org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
at
org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
at
org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62)
at
org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
at
org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at
org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
at
org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
at
org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:118)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
at
org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at
org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
at
org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
at
org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:412)
at
org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at
org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at
org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.geode.cache.client.ServerOperationException: remote
server on
10.118.19.28(SpringBasedCacheClientApplication:16789:loner):63897:0497a590:SpringBasedCacheClientApplication:
: While performing a remote put
at
org.apache.geode.cache.client.internal.PutOp$PutOpImpl.processAck(PutOp.java:389)
at
org.apache.geode.cache.client.internal.PutOp$PutOpImpl.processResponse(PutOp.java:313)
at
org.apache.geode.cache.client.internal.PutOp$PutOpImpl.attemptReadResponse(PutOp.java:454)
at
org.apache.geode.cache.client.internal.AbstractOp.attempt(AbstractOp.java:387)
at
org.apache.geode.cache.client.internal.ConnectionImpl.execute(ConnectionImpl.java:289)
at
org.apache.geode.cache.client.internal.pooling.PooledConnection.execute(PooledConnection.java:338)
at
org.apache.geode.cache.client.internal.OpExecutorImpl.executeWithPossibleReAuthentication(OpExecutorImpl.java:912)
at
org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:174)
at
org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:130)
at
org.apache.geode.cache.client.internal.PoolImpl.execute(PoolImpl.java:792)
at org.apache.geode.cache.client.internal.PutOp.execute(PutOp.java:90)
at
org.apache.geode.cache.client.internal.ServerRegionProxy.put(ServerRegionProxy.java:155)
at
org.apache.geode.internal.cache.LocalRegion.serverPut(LocalRegion.java:3061)
at
org.apache.geode.internal.cache.LocalRegion.cacheWriteBeforePut(LocalRegion.java:3176)
at
org.apache.geode.internal.cache.ProxyRegionMap.basicPut(ProxyRegionMap.java:238)
at
org.apache.geode.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5691)
at
org.apache.geode.internal.cache.LocalRegionDataView.putEntry(LocalRegionDataView.java:162)
at
org.apache.geode.internal.cache.LocalRegion.basicPut(LocalRegion.java:5119)
at
org.apache.geode.internal.cache.LocalRegion.validatedPut(LocalRegion.java:1661)
at
org.apache.geode.internal.cache.LocalRegion.put(LocalRegion.java:1648)
at
org.apache.geode.internal.cache.AbstractRegion.put(AbstractRegion.java:421)
at
org.springframework.data.gemfire.GemfireTemplate.put(GemfireTemplate.java:194)
... 62 more
Caused by: org.apache.geode.cache.query.IndexMaintenanceException:
org.apache.geode.cache.query.internal.index.IMQException, caused by
org.apache.geode.cache.query.internal.index.IMQException
at
org.apache.geode.internal.cache.EntryEventImpl.setNewValueInRegion(EntryEventImpl.java:1736)
at
org.apache.geode.internal.cache.EntryEventImpl.putExistingEntry(EntryEventImpl.java:1614)
at
org.apache.geode.internal.cache.map.RegionMapPut.updateEntry(RegionMapPut.java:485)
at
org.apache.geode.internal.cache.map.RegionMapPut.createOrUpdateEntry(RegionMapPut.java:256)
at
org.apache.geode.internal.cache.map.AbstractRegionMapPut.doPutAndDeliverEvent(AbstractRegionMapPut.java:300)
at
org.apache.geode.internal.cache.map.AbstractRegionMapPut.runWithIndexUpdatingInProgress(AbstractRegionMapPut.java:308)
at
org.apache.geode.internal.cache.map.AbstractRegionMapPut.doPutIfPreconditionsSatisified(AbstractRegionMapPut.java:296)
at
org.apache.geode.internal.cache.map.AbstractRegionMapPut.doPutOnSynchronizedRegionEntry(AbstractRegionMapPut.java:282)
at
org.apache.geode.internal.cache.map.AbstractRegionMapPut.doPutOnRegionEntryInMap(AbstractRegionMapPut.java:273)
at
org.apache.geode.internal.cache.map.AbstractRegionMapPut.addRegionEntryToMapAndDoPut(AbstractRegionMapPut.java:251)
at
org.apache.geode.internal.cache.map.AbstractRegionMapPut.doPutRetryingIfNeeded(AbstractRegionMapPut.java:216)
at
org.apache.geode.internal.cache.map.AbstractRegionMapPut.doWithIndexInUpdateMode(AbstractRegionMapPut.java:193)
at
org.apache.geode.internal.cache.map.AbstractRegionMapPut.doPut(AbstractRegionMapPut.java:180)
at
org.apache.geode.internal.cache.map.AbstractRegionMapPut.runWhileLockedForCacheModification(AbstractRegionMapPut.java:119)
at
org.apache.geode.internal.cache.map.RegionMapPut.runWhileLockedForCacheModification(RegionMapPut.java:161)
at
org.apache.geode.internal.cache.map.AbstractRegionMapPut.put(AbstractRegionMapPut.java:169)
at
org.apache.geode.internal.cache.AbstractRegionMap.basicPut(AbstractRegionMap.java:2044)
at
org.apache.geode.internal.cache.BucketRegion.virtualPut(BucketRegion.java:532)
at
org.apache.geode.internal.cache.PartitionedRegionDataStore.putLocally(PartitionedRegionDataStore.java:1204)
at
org.apache.geode.internal.cache.PartitionedRegion.putInBucket(PartitionedRegion.java:2887)
at
org.apache.geode.internal.cache.PartitionedRegion.virtualPut(PartitionedRegion.java:2097)
at
org.apache.geode.internal.cache.LocalRegionDataView.putEntry(LocalRegionDataView.java:162)
at
org.apache.geode.internal.cache.LocalRegion.basicUpdate(LocalRegion.java:5671)
at
org.apache.geode.internal.cache.LocalRegion.basicBridgePut(LocalRegion.java:5308)
at
org.apache.geode.internal.cache.tier.sockets.command.Put65.cmdExecute(Put65.java:393)
at
org.apache.geode.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:183)
at
org.apache.geode.internal.cache.tier.sockets.ServerConnection.doNormalMessage(ServerConnection.java:851)
at
org.apache.geode.internal.cache.tier.sockets.OriginalServerConnection.doOneMessage(OriginalServerConnection.java:75)
at
org.apache.geode.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1227)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at
org.apache.geode.internal.cache.tier.sockets.AcceptorImpl.lambda$initializeServerConnectionThreadPool$3(AcceptorImpl.java:616)
at
org.apache.geode.internal.logging.LoggingThreadFactory.lambda$newThread$0(LoggingThreadFactory.java:121)
... 1 more
Caused by: org.apache.geode.cache.query.internal.index.IMQException
at
org.apache.geode.cache.query.internal.index.CompactRangeIndex$IMQEvaluator.evaluate(CompactRangeIndex.java:1411)
at
org.apache.geode.cache.query.internal.index.CompactRangeIndex.removeMapping(CompactRangeIndex.java:162)
at
org.apache.geode.cache.query.internal.index.AbstractIndex.removeIndexMapping(AbstractIndex.java:509)
at
org.apache.geode.cache.query.internal.index.IndexManager.processAction(IndexManager.java:1132)
at
org.apache.geode.cache.query.internal.index.IndexManager.updateIndexes(IndexManager.java:987)
at
org.apache.geode.cache.query.internal.index.IndexManager.updateIndexes(IndexManager.java:962)
at
org.apache.geode.internal.cache.EntryEventImpl.setNewValueInRegion(EntryEventImpl.java:1733)
... 33 more
Caused by: org.apache.geode.pdx.PdxSerializationException: Class not found
deserializing a PDX field
at
org.apache.geode.pdx.internal.PdxInputStream.readObject(PdxInputStream.java:252)
at
org.apache.geode.pdx.internal.PdxInputStream.readObject(PdxInputStream.java:93)
at
org.apache.geode.pdx.internal.PdxReaderImpl.readObject(PdxReaderImpl.java:366)
at
org.apache.geode.pdx.internal.PdxInstanceImpl.readObject(PdxInstanceImpl.java:554)
at
org.apache.geode.pdx.internal.PdxInstanceImpl.hashCode(PdxInstanceImpl.java:300)
at
org.apache.geode.cache.query.internal.ObjectIntHashMap$IntHashMapStrategy.hashCode(ObjectIntHashMap.java:1076)
at
org.apache.geode.cache.query.internal.ObjectIntHashMap.get(ObjectIntHashMap.java:306)
at
org.apache.geode.cache.query.internal.ResultsBag.mapGet(ResultsBag.java:200)
at org.apache.geode.cache.query.internal.Bag.add(Bag.java:223)
at
org.apache.geode.cache.query.internal.index.DummyQRegion.getValues(DummyQRegion.java:183)
at
org.apache.geode.cache.query.internal.index.DummyQRegion.values(DummyQRegion.java:110)
at
org.apache.geode.cache.query.internal.index.DummyQRegion.iterator(DummyQRegion.java:226)
at
org.apache.geode.cache.query.internal.index.CompactRangeIndex$IMQEvaluator.doNestedIterations(CompactRangeIndex.java:1540)
at
org.apache.geode.cache.query.internal.index.CompactRangeIndex$IMQEvaluator.evaluate(CompactRangeIndex.java:1396)
... 39 more
Caused by: java.lang.ClassNotFoundException:
org.springframework.security.authentication.UsernamePasswordAuthenticationToken
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:686)
at
org.apache.geode.internal.InternalDataSerializer$DSObjectInputStream.resolveClass(InternalDataSerializer.java:3818)
at
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1868)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751)
at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
at
org.apache.geode.internal.InternalDataSerializer.readSerializable(InternalDataSerializer.java:2970)
at
org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2914)
at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2978)
at org.apache.geode.DataSerializer.readHashMap(DataSerializer.java:2374)
at
org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2862)
at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2978)
at
org.apache.geode.pdx.internal.PdxInputStream.readObject(PdxInputStream.java:248)
... 52 more
{noformat}
> Index triggers deserialization of objects embedded in a PDX object
> ------------------------------------------------------------------
>
> Key: GEODE-7491
> URL: https://issues.apache.org/jira/browse/GEODE-7491
> Project: Geode
> Issue Type: Bug
> Components: querying
> Reporter: Dan Smith
> Priority: Major
>
> Objects that are serialized using PDX are supposed to be indexable even if
> the classes for those objects are not present on the server. However, in
> certain cases, having an index triggers deserialization of objects embedded
> in the PDX object, even if those embedded objects are not indexed. Here's the
> use case:
> 1. a PDX object with a String field (eg "name") and a nested java
> serializable object (eg "Customer")
> 2. The class for the java serializable object is not on the classpath of the
> server
> 3. An index on the string field.
> 4. Performing an update on the object will result in a
> IndexMaintenanceException caused by a ClassNotFoundException
> The reason seems to be that the CompactRangeIndex.removeMapping method that
> gets called to remove the old index mapping for the old value adds the old
> region value to a HashSet. This requires computing the hashCode of the
> PDXInstance. By default, PDXInstance.hashCode computes the hashcode of all of
> the fields. The "Customer" Field in the example above cannot be deserialized
> for a hashCode.
> Setting the identity fields of the PDX using PdxWriter.markIdentityField can
> work around the issue, but PDX objects should probably be indexable without
> this.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)