[
https://issues.apache.org/jira/browse/GEODE-9486?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Kirk Lund updated GEODE-9486:
-----------------------------
Description:
Serialized classes in geode-serializable fail to deserialize when
validate-serializable-objects is enabled. This bug was caught by
SessionsAndCrashesDUnitTest in geode-apis-compatible-with-redis (GEODE-9485).
Any module with a class that may be serialized must implement
DistributedSystemService to provide the list of sanctioned serializables as
defined in sanctionedDataSerializables.txt and a concrete test subclassing
AnalyzeSerializablesJUnitTestBase.
{{org.apache.geode.internal.serialization.DSFIDNotFoundException}} is in
geode-serialization which cannot depend on geode-core which owns
```DistributedSystemService```. Even if we remove the unused ```void
init(InternalDistributedSystem internalDistributedSystem)``` and move it to
geode-serialization, the implementation
```SerializationDistributedSystemService``` would implement
```getSerializationAcceptlist()``` as:
{noformat}
@Override
public Collection<String> getSerializationAcceptlist() throws IOException {
URL sanctionedSerializables =
ClassPathLoader.getLatest().getResource(getClass(),
"sanctioned-geode-gfsh-serializables.txt");
return InternalDataSerializer.loadClassNames(sanctionedSerializables);
}
{noformat}
... which uses ClassPathLoader and InternalDataSerializer which live in
geode-core.
This requires some work to detangle the geode modules.
{noformat}
> Task
> :geode-apis-compatible-with-redis:distributedTestorg.apache.geode.redis.session.SessionsAndCrashesDUnitTest
> > classMethod FAILED
java.lang.AssertionError: Suspicious strings were written to the log during
this run.
Fix the strings or use IgnoredException.addIgnoredException to ignore.
-----------------------------------------------------------------------
Found suspect string in 'dunit_suspect-vm3.log' at line 3000 [fatal
2021/08/04 13:50:57.548 UTC <GeodeRedisServer-Command-1> tid=114] Serialization
filter is rejecting class
org.apache.geode.internal.serialization.DSFIDNotFoundException
java.lang.Exception:
at
org.apache.geode.internal.ObjectInputStreamFilterWrapper.lambda$createSerializationFilter$0(ObjectInputStreamFilterWrapper.java:234)
at com.sun.proxy.$Proxy26.checkInput(Unknown Source)
at
java.base/java.io.ObjectInputStream.filterCheck(ObjectInputStream.java:1336)
at
java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2005)
at
java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1862)
at
java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2169)
at
java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1679)
at
java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2464)
at
java.base/java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:629)
at java.base/java.lang.Throwable.readObject(Throwable.java:896)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at
java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1175)
at
java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2325)
at
java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2196)
at
java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1679)
at
java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2464)
at
java.base/java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:629)
at java.base/java.lang.Throwable.readObject(Throwable.java:896)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at
java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1175)
at
java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2325)
at
java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2196)
at
java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1679)
at
java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:493)
at
java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:451)
at
org.apache.geode.internal.InternalDataSerializer.readSerializable(InternalDataSerializer.java:2689)
at
org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2633)
at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2864)
at
org.apache.geode.distributed.internal.ReplyMessage.fromData(ReplyMessage.java:314)
at
org.apache.geode.internal.serialization.internal.DSFIDSerializerImpl.invokeFromData(DSFIDSerializerImpl.java:317)
at
org.apache.geode.internal.serialization.internal.DSFIDSerializerImpl.create(DSFIDSerializerImpl.java:368)
at org.apache.geode.internal.DSFIDFactory.create(DSFIDFactory.java:1031)
at
org.apache.geode.internal.InternalDataSerializer.readDSFID(InternalDataSerializer.java:2390)
at
org.apache.geode.internal.InternalDataSerializer.readDSFID(InternalDataSerializer.java:2404)
at org.apache.geode.internal.tcp.MsgReader.readMessage(MsgReader.java:101)
at org.apache.geode.internal.tcp.Connection.readAck(Connection.java:2699)
at
org.apache.geode.distributed.internal.direct.DirectChannel.readAcks(DirectChannel.java:404)
at
org.apache.geode.distributed.internal.direct.DirectChannel.sendToMany(DirectChannel.java:354)
at
org.apache.geode.distributed.internal.direct.DirectChannel.sendToOne(DirectChannel.java:187)
at
org.apache.geode.distributed.internal.direct.DirectChannel.send(DirectChannel.java:525)
at
org.apache.geode.distributed.internal.DistributionImpl.directChannelSend(DistributionImpl.java:348)
at
org.apache.geode.distributed.internal.DistributionImpl.send(DistributionImpl.java:293)
at
org.apache.geode.distributed.internal.ClusterDistributionManager.sendViaMembershipManager(ClusterDistributionManager.java:2064)
at
org.apache.geode.distributed.internal.ClusterDistributionManager.sendOutgoing(ClusterDistributionManager.java:1991)
at
org.apache.geode.distributed.internal.ClusterDistributionManager.sendMessage(ClusterDistributionManager.java:2028)
at
org.apache.geode.distributed.internal.ClusterDistributionManager.putOutgoing(ClusterDistributionManager.java:1085)
at
org.apache.geode.internal.cache.DistributedCacheOperation._distribute(DistributedCacheOperation.java:573)
at
org.apache.geode.internal.cache.DistributedCacheOperation.startOperation(DistributedCacheOperation.java:278)
at
org.apache.geode.internal.cache.BucketRegion.basicPutPart2(BucketRegion.java:697)
at
org.apache.geode.internal.cache.map.RegionMapPut.doBeforeCompletionActions(RegionMapPut.java:282)
at
org.apache.geode.internal.cache.map.AbstractRegionMapPut.doPutAndDeliverEvent(AbstractRegionMapPut.java:301)
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:198)
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:2045)
at
org.apache.geode.internal.cache.BucketRegion.virtualPut(BucketRegion.java:533)
at
org.apache.geode.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5586)
at
org.apache.geode.internal.cache.PartitionedRegionDataStore.putLocally(PartitionedRegionDataStore.java:1215)
at
org.apache.geode.internal.cache.PartitionedRegion.putInBucket(PartitionedRegion.java:3025)
at
org.apache.geode.internal.cache.PartitionedRegion.virtualPut(PartitionedRegion.java:2237)
at
org.apache.geode.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5586)
at
org.apache.geode.internal.cache.LocalRegionDataView.putEntry(LocalRegionDataView.java:157)
at
org.apache.geode.internal.cache.LocalRegion.basicPut(LocalRegion.java:5044)
at
org.apache.geode.internal.cache.LocalRegion.validatedPut(LocalRegion.java:1645)
at org.apache.geode.internal.cache.LocalRegion.put(LocalRegion.java:1632)
at org.apache.geode.internal.cache.LocalDataSet.put(LocalDataSet.java:558)
at org.apache.geode.internal.cache.LocalDataSet.put(LocalDataSet.java:552)
at
org.apache.geode.redis.internal.data.AbstractRedisData.storeChanges(AbstractRedisData.java:251)
at
org.apache.geode.redis.internal.data.RedisString.append(RedisString.java:70)
at
org.apache.geode.redis.internal.data.RedisStringCommandsFunctionExecutor.lambda$append$0(RedisStringCommandsFunctionExecutor.java:47)
at
org.apache.geode.redis.internal.executor.SynchronizedStripedExecutor.execute(SynchronizedStripedExecutor.java:46)
at
org.apache.geode.redis.internal.RegionProvider.lambda$execute$0(RegionProvider.java:156)
at
org.apache.geode.internal.cache.PartitionedRegion.computeWithPrimaryLocked(PartitionedRegion.java:629)
at
org.apache.geode.redis.internal.RegionProvider.execute(RegionProvider.java:155)
at
org.apache.geode.redis.internal.data.RedisDataCommandsFunctionExecutor.stripedExecute(RedisDataCommandsFunctionExecutor.java:48)
at
org.apache.geode.redis.internal.data.RedisStringCommandsFunctionExecutor.append(RedisStringCommandsFunctionExecutor.java:46)
at
org.apache.geode.redis.internal.executor.string.AppendExecutor.executeCommand(AppendExecutor.java:36)
at
org.apache.geode.redis.internal.RedisCommandType.executeCommand(RedisCommandType.java:378)
at org.apache.geode.redis.internal.netty.Command.execute(Command.java:198)
at
org.apache.geode.redis.internal.netty.ExecutionHandlerContext.executeCommand(ExecutionHandlerContext.java:310)
at
org.apache.geode.redis.internal.netty.ExecutionHandlerContext.processCommandQueue(ExecutionHandlerContext.java:153)
at
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
{noformat}
was:
Serialized classes in geode-serializable fail to deserialize when
validate-serializable-objects is enabled. This bug was caught by
SessionsAndCrashesDUnitTest in geode-apis-compatible-with-redis (GEODE-9485).
Any module with a class that may be serialized must implement
DistributedSystemService to provide the list of sanctioned serializables as
defined in sanctionedDataSerializables.txt and a concrete test subclassing
AnalyzeSerializablesJUnitTestBase.
```org.apache.geode.internal.serialization.DSFIDNotFoundException``` is in
geode-serialization which cannot depend on geode-core which owns
```DistributedSystemService```. Even if we remove the unused ```void
init(InternalDistributedSystem internalDistributedSystem)``` and move it to
geode-serialization, the implementation
```SerializationDistributedSystemService``` would implement
```getSerializationAcceptlist()``` as:
{noformat}
@Override
public Collection<String> getSerializationAcceptlist() throws IOException {
URL sanctionedSerializables =
ClassPathLoader.getLatest().getResource(getClass(),
"sanctioned-geode-gfsh-serializables.txt");
return InternalDataSerializer.loadClassNames(sanctionedSerializables);
}
{noformat}
... which uses ClassPathLoader and InternalDataSerializer which live in
geode-core.
This requires some work to detangle the geode modules.
{noformat}
> Task
> :geode-apis-compatible-with-redis:distributedTestorg.apache.geode.redis.session.SessionsAndCrashesDUnitTest
> > classMethod FAILED
java.lang.AssertionError: Suspicious strings were written to the log during
this run.
Fix the strings or use IgnoredException.addIgnoredException to ignore.
-----------------------------------------------------------------------
Found suspect string in 'dunit_suspect-vm3.log' at line 3000 [fatal
2021/08/04 13:50:57.548 UTC <GeodeRedisServer-Command-1> tid=114] Serialization
filter is rejecting class
org.apache.geode.internal.serialization.DSFIDNotFoundException
java.lang.Exception:
at
org.apache.geode.internal.ObjectInputStreamFilterWrapper.lambda$createSerializationFilter$0(ObjectInputStreamFilterWrapper.java:234)
at com.sun.proxy.$Proxy26.checkInput(Unknown Source)
at
java.base/java.io.ObjectInputStream.filterCheck(ObjectInputStream.java:1336)
at
java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2005)
at
java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1862)
at
java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2169)
at
java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1679)
at
java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2464)
at
java.base/java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:629)
at java.base/java.lang.Throwable.readObject(Throwable.java:896)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at
java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1175)
at
java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2325)
at
java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2196)
at
java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1679)
at
java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2464)
at
java.base/java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:629)
at java.base/java.lang.Throwable.readObject(Throwable.java:896)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at
java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1175)
at
java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2325)
at
java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2196)
at
java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1679)
at
java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:493)
at
java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:451)
at
org.apache.geode.internal.InternalDataSerializer.readSerializable(InternalDataSerializer.java:2689)
at
org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2633)
at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2864)
at
org.apache.geode.distributed.internal.ReplyMessage.fromData(ReplyMessage.java:314)
at
org.apache.geode.internal.serialization.internal.DSFIDSerializerImpl.invokeFromData(DSFIDSerializerImpl.java:317)
at
org.apache.geode.internal.serialization.internal.DSFIDSerializerImpl.create(DSFIDSerializerImpl.java:368)
at org.apache.geode.internal.DSFIDFactory.create(DSFIDFactory.java:1031)
at
org.apache.geode.internal.InternalDataSerializer.readDSFID(InternalDataSerializer.java:2390)
at
org.apache.geode.internal.InternalDataSerializer.readDSFID(InternalDataSerializer.java:2404)
at org.apache.geode.internal.tcp.MsgReader.readMessage(MsgReader.java:101)
at org.apache.geode.internal.tcp.Connection.readAck(Connection.java:2699)
at
org.apache.geode.distributed.internal.direct.DirectChannel.readAcks(DirectChannel.java:404)
at
org.apache.geode.distributed.internal.direct.DirectChannel.sendToMany(DirectChannel.java:354)
at
org.apache.geode.distributed.internal.direct.DirectChannel.sendToOne(DirectChannel.java:187)
at
org.apache.geode.distributed.internal.direct.DirectChannel.send(DirectChannel.java:525)
at
org.apache.geode.distributed.internal.DistributionImpl.directChannelSend(DistributionImpl.java:348)
at
org.apache.geode.distributed.internal.DistributionImpl.send(DistributionImpl.java:293)
at
org.apache.geode.distributed.internal.ClusterDistributionManager.sendViaMembershipManager(ClusterDistributionManager.java:2064)
at
org.apache.geode.distributed.internal.ClusterDistributionManager.sendOutgoing(ClusterDistributionManager.java:1991)
at
org.apache.geode.distributed.internal.ClusterDistributionManager.sendMessage(ClusterDistributionManager.java:2028)
at
org.apache.geode.distributed.internal.ClusterDistributionManager.putOutgoing(ClusterDistributionManager.java:1085)
at
org.apache.geode.internal.cache.DistributedCacheOperation._distribute(DistributedCacheOperation.java:573)
at
org.apache.geode.internal.cache.DistributedCacheOperation.startOperation(DistributedCacheOperation.java:278)
at
org.apache.geode.internal.cache.BucketRegion.basicPutPart2(BucketRegion.java:697)
at
org.apache.geode.internal.cache.map.RegionMapPut.doBeforeCompletionActions(RegionMapPut.java:282)
at
org.apache.geode.internal.cache.map.AbstractRegionMapPut.doPutAndDeliverEvent(AbstractRegionMapPut.java:301)
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:198)
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:2045)
at
org.apache.geode.internal.cache.BucketRegion.virtualPut(BucketRegion.java:533)
at
org.apache.geode.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5586)
at
org.apache.geode.internal.cache.PartitionedRegionDataStore.putLocally(PartitionedRegionDataStore.java:1215)
at
org.apache.geode.internal.cache.PartitionedRegion.putInBucket(PartitionedRegion.java:3025)
at
org.apache.geode.internal.cache.PartitionedRegion.virtualPut(PartitionedRegion.java:2237)
at
org.apache.geode.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5586)
at
org.apache.geode.internal.cache.LocalRegionDataView.putEntry(LocalRegionDataView.java:157)
at
org.apache.geode.internal.cache.LocalRegion.basicPut(LocalRegion.java:5044)
at
org.apache.geode.internal.cache.LocalRegion.validatedPut(LocalRegion.java:1645)
at org.apache.geode.internal.cache.LocalRegion.put(LocalRegion.java:1632)
at org.apache.geode.internal.cache.LocalDataSet.put(LocalDataSet.java:558)
at org.apache.geode.internal.cache.LocalDataSet.put(LocalDataSet.java:552)
at
org.apache.geode.redis.internal.data.AbstractRedisData.storeChanges(AbstractRedisData.java:251)
at
org.apache.geode.redis.internal.data.RedisString.append(RedisString.java:70)
at
org.apache.geode.redis.internal.data.RedisStringCommandsFunctionExecutor.lambda$append$0(RedisStringCommandsFunctionExecutor.java:47)
at
org.apache.geode.redis.internal.executor.SynchronizedStripedExecutor.execute(SynchronizedStripedExecutor.java:46)
at
org.apache.geode.redis.internal.RegionProvider.lambda$execute$0(RegionProvider.java:156)
at
org.apache.geode.internal.cache.PartitionedRegion.computeWithPrimaryLocked(PartitionedRegion.java:629)
at
org.apache.geode.redis.internal.RegionProvider.execute(RegionProvider.java:155)
at
org.apache.geode.redis.internal.data.RedisDataCommandsFunctionExecutor.stripedExecute(RedisDataCommandsFunctionExecutor.java:48)
at
org.apache.geode.redis.internal.data.RedisStringCommandsFunctionExecutor.append(RedisStringCommandsFunctionExecutor.java:46)
at
org.apache.geode.redis.internal.executor.string.AppendExecutor.executeCommand(AppendExecutor.java:36)
at
org.apache.geode.redis.internal.RedisCommandType.executeCommand(RedisCommandType.java:378)
at org.apache.geode.redis.internal.netty.Command.execute(Command.java:198)
at
org.apache.geode.redis.internal.netty.ExecutionHandlerContext.executeCommand(ExecutionHandlerContext.java:310)
at
org.apache.geode.redis.internal.netty.ExecutionHandlerContext.processCommandQueue(ExecutionHandlerContext.java:153)
at
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
{noformat}
> Serialized classes in geode-serializable fail to deserialize when
> validate-serializable-objects is enabled
> ----------------------------------------------------------------------------------------------------------
>
> Key: GEODE-9486
> URL: https://issues.apache.org/jira/browse/GEODE-9486
> Project: Geode
> Issue Type: Bug
> Components: serialization
> Reporter: Kirk Lund
> Assignee: Kirk Lund
> Priority: Major
>
> Serialized classes in geode-serializable fail to deserialize when
> validate-serializable-objects is enabled. This bug was caught by
> SessionsAndCrashesDUnitTest in geode-apis-compatible-with-redis (GEODE-9485).
> Any module with a class that may be serialized must implement
> DistributedSystemService to provide the list of sanctioned serializables as
> defined in sanctionedDataSerializables.txt and a concrete test subclassing
> AnalyzeSerializablesJUnitTestBase.
> {{org.apache.geode.internal.serialization.DSFIDNotFoundException}} is in
> geode-serialization which cannot depend on geode-core which owns
> ```DistributedSystemService```. Even if we remove the unused ```void
> init(InternalDistributedSystem internalDistributedSystem)``` and move it to
> geode-serialization, the implementation
> ```SerializationDistributedSystemService``` would implement
> ```getSerializationAcceptlist()``` as:
> {noformat}
> @Override
> public Collection<String> getSerializationAcceptlist() throws IOException {
> URL sanctionedSerializables =
> ClassPathLoader.getLatest().getResource(getClass(),
> "sanctioned-geode-gfsh-serializables.txt");
> return InternalDataSerializer.loadClassNames(sanctionedSerializables);
> }
> {noformat}
> ... which uses ClassPathLoader and InternalDataSerializer which live in
> geode-core.
> This requires some work to detangle the geode modules.
> {noformat}
> > Task
> > :geode-apis-compatible-with-redis:distributedTestorg.apache.geode.redis.session.SessionsAndCrashesDUnitTest
> > > classMethod FAILED
> java.lang.AssertionError: Suspicious strings were written to the log
> during this run.
> Fix the strings or use IgnoredException.addIgnoredException to ignore.
> -----------------------------------------------------------------------
> Found suspect string in 'dunit_suspect-vm3.log' at line 3000 [fatal
> 2021/08/04 13:50:57.548 UTC <GeodeRedisServer-Command-1> tid=114]
> Serialization filter is rejecting class
> org.apache.geode.internal.serialization.DSFIDNotFoundException
> java.lang.Exception:
> at
> org.apache.geode.internal.ObjectInputStreamFilterWrapper.lambda$createSerializationFilter$0(ObjectInputStreamFilterWrapper.java:234)
> at com.sun.proxy.$Proxy26.checkInput(Unknown Source)
> at
> java.base/java.io.ObjectInputStream.filterCheck(ObjectInputStream.java:1336)
> at
> java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2005)
> at
> java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1862)
> at
> java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2169)
> at
> java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1679)
> at
> java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2464)
> at
> java.base/java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:629)
> at java.base/java.lang.Throwable.readObject(Throwable.java:896)
> at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.base/java.lang.reflect.Method.invoke(Method.java:566)
> at
> java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1175)
> at
> java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2325)
> at
> java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2196)
> at
> java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1679)
> at
> java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2464)
> at
> java.base/java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:629)
> at java.base/java.lang.Throwable.readObject(Throwable.java:896)
> at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.base/java.lang.reflect.Method.invoke(Method.java:566)
> at
> java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1175)
> at
> java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2325)
> at
> java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2196)
> at
> java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1679)
> at
> java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:493)
> at
> java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:451)
> at
> org.apache.geode.internal.InternalDataSerializer.readSerializable(InternalDataSerializer.java:2689)
> at
> org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2633)
> at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2864)
> at
> org.apache.geode.distributed.internal.ReplyMessage.fromData(ReplyMessage.java:314)
> at
> org.apache.geode.internal.serialization.internal.DSFIDSerializerImpl.invokeFromData(DSFIDSerializerImpl.java:317)
> at
> org.apache.geode.internal.serialization.internal.DSFIDSerializerImpl.create(DSFIDSerializerImpl.java:368)
> at org.apache.geode.internal.DSFIDFactory.create(DSFIDFactory.java:1031)
> at
> org.apache.geode.internal.InternalDataSerializer.readDSFID(InternalDataSerializer.java:2390)
> at
> org.apache.geode.internal.InternalDataSerializer.readDSFID(InternalDataSerializer.java:2404)
> at
> org.apache.geode.internal.tcp.MsgReader.readMessage(MsgReader.java:101)
> at
> org.apache.geode.internal.tcp.Connection.readAck(Connection.java:2699)
> at
> org.apache.geode.distributed.internal.direct.DirectChannel.readAcks(DirectChannel.java:404)
> at
> org.apache.geode.distributed.internal.direct.DirectChannel.sendToMany(DirectChannel.java:354)
> at
> org.apache.geode.distributed.internal.direct.DirectChannel.sendToOne(DirectChannel.java:187)
> at
> org.apache.geode.distributed.internal.direct.DirectChannel.send(DirectChannel.java:525)
> at
> org.apache.geode.distributed.internal.DistributionImpl.directChannelSend(DistributionImpl.java:348)
> at
> org.apache.geode.distributed.internal.DistributionImpl.send(DistributionImpl.java:293)
> at
> org.apache.geode.distributed.internal.ClusterDistributionManager.sendViaMembershipManager(ClusterDistributionManager.java:2064)
> at
> org.apache.geode.distributed.internal.ClusterDistributionManager.sendOutgoing(ClusterDistributionManager.java:1991)
> at
> org.apache.geode.distributed.internal.ClusterDistributionManager.sendMessage(ClusterDistributionManager.java:2028)
> at
> org.apache.geode.distributed.internal.ClusterDistributionManager.putOutgoing(ClusterDistributionManager.java:1085)
> at
> org.apache.geode.internal.cache.DistributedCacheOperation._distribute(DistributedCacheOperation.java:573)
> at
> org.apache.geode.internal.cache.DistributedCacheOperation.startOperation(DistributedCacheOperation.java:278)
> at
> org.apache.geode.internal.cache.BucketRegion.basicPutPart2(BucketRegion.java:697)
> at
> org.apache.geode.internal.cache.map.RegionMapPut.doBeforeCompletionActions(RegionMapPut.java:282)
> at
> org.apache.geode.internal.cache.map.AbstractRegionMapPut.doPutAndDeliverEvent(AbstractRegionMapPut.java:301)
> 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:198)
> 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:2045)
> at
> org.apache.geode.internal.cache.BucketRegion.virtualPut(BucketRegion.java:533)
> at
> org.apache.geode.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5586)
> at
> org.apache.geode.internal.cache.PartitionedRegionDataStore.putLocally(PartitionedRegionDataStore.java:1215)
> at
> org.apache.geode.internal.cache.PartitionedRegion.putInBucket(PartitionedRegion.java:3025)
> at
> org.apache.geode.internal.cache.PartitionedRegion.virtualPut(PartitionedRegion.java:2237)
> at
> org.apache.geode.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5586)
> at
> org.apache.geode.internal.cache.LocalRegionDataView.putEntry(LocalRegionDataView.java:157)
> at
> org.apache.geode.internal.cache.LocalRegion.basicPut(LocalRegion.java:5044)
> at
> org.apache.geode.internal.cache.LocalRegion.validatedPut(LocalRegion.java:1645)
> at
> org.apache.geode.internal.cache.LocalRegion.put(LocalRegion.java:1632)
> at
> org.apache.geode.internal.cache.LocalDataSet.put(LocalDataSet.java:558)
> at
> org.apache.geode.internal.cache.LocalDataSet.put(LocalDataSet.java:552)
> at
> org.apache.geode.redis.internal.data.AbstractRedisData.storeChanges(AbstractRedisData.java:251)
> at
> org.apache.geode.redis.internal.data.RedisString.append(RedisString.java:70)
> at
> org.apache.geode.redis.internal.data.RedisStringCommandsFunctionExecutor.lambda$append$0(RedisStringCommandsFunctionExecutor.java:47)
> at
> org.apache.geode.redis.internal.executor.SynchronizedStripedExecutor.execute(SynchronizedStripedExecutor.java:46)
> at
> org.apache.geode.redis.internal.RegionProvider.lambda$execute$0(RegionProvider.java:156)
> at
> org.apache.geode.internal.cache.PartitionedRegion.computeWithPrimaryLocked(PartitionedRegion.java:629)
> at
> org.apache.geode.redis.internal.RegionProvider.execute(RegionProvider.java:155)
> at
> org.apache.geode.redis.internal.data.RedisDataCommandsFunctionExecutor.stripedExecute(RedisDataCommandsFunctionExecutor.java:48)
> at
> org.apache.geode.redis.internal.data.RedisStringCommandsFunctionExecutor.append(RedisStringCommandsFunctionExecutor.java:46)
> at
> org.apache.geode.redis.internal.executor.string.AppendExecutor.executeCommand(AppendExecutor.java:36)
> at
> org.apache.geode.redis.internal.RedisCommandType.executeCommand(RedisCommandType.java:378)
> at
> org.apache.geode.redis.internal.netty.Command.execute(Command.java:198)
> at
> org.apache.geode.redis.internal.netty.ExecutionHandlerContext.executeCommand(ExecutionHandlerContext.java:310)
> at
> org.apache.geode.redis.internal.netty.ExecutionHandlerContext.processCommandQueue(ExecutionHandlerContext.java:153)
> at
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
> at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
> at java.base/java.lang.Thread.run(Thread.java:829)
> {noformat}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)