[ https://issues.apache.org/jira/browse/GEODE-7763?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17039238#comment-17039238 ]
Barrett Oglesby commented on GEODE-7763: ---------------------------------------- The number of DeltaCapableGemFireSession instances created during the test is double in master vs 2.2.2.RELEASE:The number of DeltaCapableGemFireSession instances created during the test is double in master vs 2.2.2.RELEASE: 2.2.2.RELEASE:\{noformat}[Test worker]2020-02-14 11:38:31,563 WARN ionRepository$DeltaCapableGemFireSession: 708 - XXX DeltaCapableGemFireSession instantiations=20731\{noformat}master:\{noformat}[Test worker]2020-02-14 11:30:27,886 WARN ionRepository$DeltaCapableGemFireSession: 708 - XXX DeltaCapableGemFireSession instantiations=40005\{noformat}2.2.2.RELEASE shows 2 DeltaCapableGemFireSession instances created for each workload task. The first during the get here:\{noformat}2020-02-12 14:46:34,366 WARN org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$DeltaCapableGemFireSession [Session Thread 10] XXX DeltaCapableGemFireSession instantiatedjava.lang.Exception: null at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$DeltaCapableGemFireSession.<init>(AbstractGemFireOperationsSessionRepository.java:704) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSession.copy(AbstractGemFireOperationsSessionRepository.java:772) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSession.from(AbstractGemFireOperationsSessionRepository.java:787) at org.springframework.session.data.gemfire.serialization.data.provider.DataSerializableSessionSerializer.deserialize(DataSerializableSessionSerializer.java:122) at org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests$SpyingDataSerializableSessionSerializer.deserialize(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:474) at org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests$SpyingDataSerializableSessionSerializer.deserialize(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:439) at org.springframework.session.data.gemfire.serialization.data.AbstractDataSerializableSessionSerializer.fromData(AbstractDataSerializableSessionSerializer.java:107) at org.apache.geode.internal.InternalDataSerializer.readUserObject(InternalDataSerializer.java:1786) at org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2878) at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2978) at org.apache.geode.CopyHelper.doDeepCopy(CopyHelper.java:242) at org.apache.geode.CopyHelper.copy(CopyHelper.java:190) at org.apache.geode.internal.cache.LocalRegion.conditionalCopy(LocalRegion.java:1606) at org.apache.geode.internal.cache.LocalRegion.nonTxnFindObject(LocalRegion.java:1519) at org.apache.geode.internal.cache.LocalRegionDataView.findObject(LocalRegionDataView.java:188) at org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1443) at org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1377) at org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1362) at org.apache.geode.internal.cache.AbstractRegion.get(AbstractRegion.java:416) at org.springframework.data.gemfire.GemfireTemplate.get(GemfireTemplate.java:166) at org.springframework.session.data.gemfire.GemFireOperationsSessionRepository.findById(GemFireOperationsSessionRepository.java:95) at org.springframework.session.data.gemfire.AbstractGemFireIntegrationTests.get(AbstractGemFireIntegrationTests.java:405) at org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.lambda$newAddSessionAttributeTask$2(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:219)\{noformat}The second during the put in the SessionEventHandlerCacheListenerAdapter here:\{noformat}2020-02-12 14:46:34,381 WARN org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$DeltaCapableGemFireSession [Session Thread 10] XXX DeltaCapableGemFireSession instantiatedjava.lang.Exception: null at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$DeltaCapableGemFireSession.<init>(AbstractGemFireOperationsSessionRepository.java:704) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSession.copy(AbstractGemFireOperationsSessionRepository.java:772) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSession.from(AbstractGemFireOperationsSessionRepository.java:787) at org.springframework.session.data.gemfire.serialization.data.provider.DataSerializableSessionSerializer.deserialize(DataSerializableSessionSerializer.java:122) at org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests$SpyingDataSerializableSessionSerializer.deserialize(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:474) at org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests$SpyingDataSerializableSessionSerializer.deserialize(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:439) at org.springframework.session.data.gemfire.serialization.data.AbstractDataSerializableSessionSerializer.fromData(AbstractDataSerializableSessionSerializer.java:107) at org.apache.geode.internal.InternalDataSerializer.readUserObject(InternalDataSerializer.java:1786) at org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2878) at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2978) at org.apache.geode.CopyHelper.doDeepCopy(CopyHelper.java:242) at org.apache.geode.CopyHelper.copy(CopyHelper.java:190) at org.apache.geode.internal.cache.EntryEventImpl.getNewValue(EntryEventImpl.java:1063) at java.util.Optional.map(Optional.java:215) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$SessionEventHandlerCacheListenerAdapter.isSession(AbstractGemFireOperationsSessionRepository.java:1732) at java.util.Optional.filter(Optional.java:178) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$SessionEventHandlerCacheListenerAdapter.remember(AbstractGemFireOperationsSessionRepository.java:1699) at java.util.Optional.filter(Optional.java:178) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$SessionEventHandlerCacheListenerAdapter.afterCreate(AbstractGemFireOperationsSessionRepository.java:1481) at org.apache.geode.internal.cache.EnumListenerEvent$AFTER_CREATE.dispatchEvent(EnumListenerEvent.java:130) at org.apache.geode.internal.cache.LocalRegion.dispatchEvent(LocalRegion.java:8485) at org.apache.geode.internal.cache.LocalRegion.dispatchListenerEvent(LocalRegion.java:7049) at org.apache.geode.internal.cache.LocalRegion.invokePutCallbacks(LocalRegion.java:6013) at org.apache.geode.internal.cache.EntryEventImpl.invokeCallbacks(EntryEventImpl.java:2402) at org.apache.geode.internal.cache.ProxyRegionMap$ProxyRegionEntry.dispatchListenerEvents(ProxyRegionMap.java:615) at org.apache.geode.internal.cache.LocalRegion.basicPutPart2(LocalRegion.java:5869) at org.apache.geode.internal.cache.ProxyRegionMap.basicPut(ProxyRegionMap.java:244) 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) 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.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.lambda$newAddSessionAttributeTask$2(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:237)\{noformat}master shows 4 DeltaCapableGemFireSession instances created for each workload task. The first during the get here:\{noformat}2020-02-12 14:11:07,083 WARN org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$DeltaCapableGemFireSession [Session Thread 88] XXX DeltaCapableGemFireSession.DeltaCapableGemFireSession 3java.lang.Exception: null at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$DeltaCapableGemFireSession.<init>(AbstractGemFireOperationsSessionRepository.java:704) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSession.copy(AbstractGemFireOperationsSessionRepository.java:772) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSession.from(AbstractGemFireOperationsSessionRepository.java:787) at org.springframework.session.data.gemfire.serialization.data.provider.DataSerializableSessionSerializer.deserialize(DataSerializableSessionSerializer.java:122) at org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests$SpyingDataSerializableSessionSerializer.deserialize(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:476) at org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests$SpyingDataSerializableSessionSerializer.deserialize(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:440) at org.springframework.session.data.gemfire.serialization.data.AbstractDataSerializableSessionSerializer.fromData(AbstractDataSerializableSessionSerializer.java:107) at org.apache.geode.internal.InternalDataSerializer.readUserObject(InternalDataSerializer.java:1724) at org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2719) at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2864) at org.apache.geode.internal.util.BlobHelper.deserializeBlob(BlobHelper.java:99) at org.apache.geode.internal.cache.tier.sockets.CacheServerHelper.deserialize(CacheServerHelper.java:73) at org.apache.geode.internal.cache.tier.sockets.Part.getObject(Part.java:351) at org.apache.geode.internal.cache.tier.sockets.Part.getObject(Part.java:359) at org.apache.geode.cache.client.internal.AbstractOp.processObjResponse(AbstractOp.java:282) at org.apache.geode.cache.client.internal.GetOp$GetOpImpl.processResponse(GetOp.java:143) at org.apache.geode.cache.client.internal.AbstractOp.attemptReadResponse(AbstractOp.java:207) at org.apache.geode.cache.client.internal.AbstractOp.attempt(AbstractOp.java:382) at org.apache.geode.cache.client.internal.ConnectionImpl.execute(ConnectionImpl.java:263) at org.apache.geode.cache.client.internal.pooling.PooledConnection.execute(PooledConnection.java:353) at org.apache.geode.cache.client.internal.OpExecutorImpl.executeWithPossibleReAuthentication(OpExecutorImpl.java:750) at org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:138) at org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:108) at org.apache.geode.cache.client.internal.PoolImpl.execute(PoolImpl.java:772) at org.apache.geode.cache.client.internal.GetOp.execute(GetOp.java:91) at org.apache.geode.cache.client.internal.ServerRegionProxy.get(ServerRegionProxy.java:116) at org.apache.geode.internal.cache.LocalRegion.findObjectInSystem(LocalRegion.java:2793) at org.apache.geode.internal.cache.LocalRegion.getObject(LocalRegion.java:1470) at org.apache.geode.internal.cache.LocalRegion.nonTxnFindObject(LocalRegion.java:1443) at org.apache.geode.internal.cache.LocalRegionDataView.findObject(LocalRegionDataView.java:188) at org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1380) at org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1319) at org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1304) at org.apache.geode.internal.cache.AbstractRegion.get(AbstractRegion.java:436) at org.springframework.data.gemfire.GemfireTemplate.get(GemfireTemplate.java:169) at org.springframework.session.data.gemfire.GemFireOperationsSessionRepository.findById(GemFireOperationsSessionRepository.java:95) at org.springframework.session.data.gemfire.AbstractGemFireIntegrationTests.get(AbstractGemFireIntegrationTests.java:405) at org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.lambda$newAddSessionAttributeTask$2(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:221)\{noformat}The second during the get here:\{noformat}2020-02-12 14:11:07,110 WARN org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$DeltaCapableGemFireSession [Session Thread 88] XXX DeltaCapableGemFireSession.DeltaCapableGemFireSession 3java.lang.Exception: null at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$DeltaCapableGemFireSession.<init>(AbstractGemFireOperationsSessionRepository.java:704) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSession.copy(AbstractGemFireOperationsSessionRepository.java:772) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSession.from(AbstractGemFireOperationsSessionRepository.java:787) at org.springframework.session.data.gemfire.serialization.data.provider.DataSerializableSessionSerializer.deserialize(DataSerializableSessionSerializer.java:122) at org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests$SpyingDataSerializableSessionSerializer.deserialize(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:476) at org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests$SpyingDataSerializableSessionSerializer.deserialize(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:440) at org.springframework.session.data.gemfire.serialization.data.AbstractDataSerializableSessionSerializer.fromData(AbstractDataSerializableSessionSerializer.java:107) at org.apache.geode.internal.InternalDataSerializer.readUserObject(InternalDataSerializer.java:1724) at org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2719) at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2864) at org.apache.geode.CopyHelper.doDeepCopy(CopyHelper.java:242) at org.apache.geode.CopyHelper.copy(CopyHelper.java:190) at org.apache.geode.internal.cache.LocalRegion.conditionalCopy(LocalRegion.java:1581) at org.apache.geode.internal.cache.LocalRegion.getObject(LocalRegion.java:1488) at org.apache.geode.internal.cache.LocalRegion.nonTxnFindObject(LocalRegion.java:1443) at org.apache.geode.internal.cache.LocalRegionDataView.findObject(LocalRegionDataView.java:188) at org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1380) at org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1319) at org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1304) at org.apache.geode.internal.cache.AbstractRegion.get(AbstractRegion.java:436) at org.springframework.data.gemfire.GemfireTemplate.get(GemfireTemplate.java:169) at org.springframework.session.data.gemfire.GemFireOperationsSessionRepository.findById(GemFireOperationsSessionRepository.java:95) at org.springframework.session.data.gemfire.AbstractGemFireIntegrationTests.get(AbstractGemFireIntegrationTests.java:405) at org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.lambda$newAddSessionAttributeTask$2(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:221)\{noformat}The third during the get in the SessionEventHandlerCacheListenerAdapter here:\{noformat}2020-02-12 14:11:07,097 WARN org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$DeltaCapableGemFireSession [Session Thread 88] XXX DeltaCapableGemFireSession.DeltaCapableGemFireSession 3java.lang.Exception: null at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$DeltaCapableGemFireSession.<init>(AbstractGemFireOperationsSessionRepository.java:704) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSession.copy(AbstractGemFireOperationsSessionRepository.java:772) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSession.from(AbstractGemFireOperationsSessionRepository.java:787) at org.springframework.session.data.gemfire.serialization.data.provider.DataSerializableSessionSerializer.deserialize(DataSerializableSessionSerializer.java:122) at org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests$SpyingDataSerializableSessionSerializer.deserialize(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:476) at org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests$SpyingDataSerializableSessionSerializer.deserialize(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:440) at org.springframework.session.data.gemfire.serialization.data.AbstractDataSerializableSessionSerializer.fromData(AbstractDataSerializableSessionSerializer.java:107) at org.apache.geode.internal.InternalDataSerializer.readUserObject(InternalDataSerializer.java:1724) at org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2719) at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2864) at org.apache.geode.CopyHelper.doDeepCopy(CopyHelper.java:242) at org.apache.geode.CopyHelper.copy(CopyHelper.java:190) at org.apache.geode.internal.cache.EntryEventImpl.getNewValue(EntryEventImpl.java:1089) at java.util.Optional.map(Optional.java:215) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$SessionEventHandlerCacheListenerAdapter.isSession(AbstractGemFireOperationsSessionRepository.java:1732) at java.util.Optional.filter(Optional.java:178) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$SessionEventHandlerCacheListenerAdapter.remember(AbstractGemFireOperationsSessionRepository.java:1699) at java.util.Optional.filter(Optional.java:178) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$SessionEventHandlerCacheListenerAdapter.afterCreate(AbstractGemFireOperationsSessionRepository.java:1481) at org.apache.geode.internal.cache.EnumListenerEvent$AFTER_CREATE.dispatchEvent(EnumListenerEvent.java:130) at org.apache.geode.internal.cache.LocalRegion.dispatchEvent(LocalRegion.java:8214) at org.apache.geode.internal.cache.LocalRegion.dispatchListenerEvent(LocalRegion.java:6924) at org.apache.geode.internal.cache.LocalRegion.invokePutCallbacks(LocalRegion.java:5898) at org.apache.geode.internal.cache.EntryEventImpl.invokeCallbacks(EntryEventImpl.java:2440) at org.apache.geode.internal.cache.ProxyRegionMap$ProxyRegionEntry.dispatchListenerEvents(ProxyRegionMap.java:615) at org.apache.geode.internal.cache.LocalRegion.basicPutPart2(LocalRegion.java:5756) at org.apache.geode.internal.cache.ProxyRegionMap.basicPut(ProxyRegionMap.java:244) at org.apache.geode.internal.cache.LocalRegion.basicPutEntry(LocalRegion.java:5690) at org.apache.geode.internal.cache.LocalRegion.findObjectInSystem(LocalRegion.java:2861) at org.apache.geode.internal.cache.LocalRegion.getObject(LocalRegion.java:1470) at org.apache.geode.internal.cache.LocalRegion.nonTxnFindObject(LocalRegion.java:1443) at org.apache.geode.internal.cache.LocalRegionDataView.findObject(LocalRegionDataView.java:188) at org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1380) at org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1319) at org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1304) at org.apache.geode.internal.cache.AbstractRegion.get(AbstractRegion.java:436) at org.springframework.data.gemfire.GemfireTemplate.get(GemfireTemplate.java:169) at org.springframework.session.data.gemfire.GemFireOperationsSessionRepository.findById(GemFireOperationsSessionRepository.java:95) at org.springframework.session.data.gemfire.AbstractGemFireIntegrationTests.get(AbstractGemFireIntegrationTests.java:405) at org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.lambda$newAddSessionAttributeTask$2(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:221)\{noformat}The fourth during the put in the SessionEventHandlerCacheListenerAdapter here:\{noformat}2020-02-12 14:11:07,133 WARN org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$DeltaCapableGemFireSession [Session Thread 88] XXX DeltaCapableGemFireSession.DeltaCapableGemFireSession 3java.lang.Exception: null at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$DeltaCapableGemFireSession.<init>(AbstractGemFireOperationsSessionRepository.java:704) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSession.copy(AbstractGemFireOperationsSessionRepository.java:772) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSession.from(AbstractGemFireOperationsSessionRepository.java:787) at org.springframework.session.data.gemfire.serialization.data.provider.DataSerializableSessionSerializer.deserialize(DataSerializableSessionSerializer.java:122) at org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests$SpyingDataSerializableSessionSerializer.deserialize(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:476) at org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests$SpyingDataSerializableSessionSerializer.deserialize(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:440) at org.springframework.session.data.gemfire.serialization.data.AbstractDataSerializableSessionSerializer.fromData(AbstractDataSerializableSessionSerializer.java:107) at org.apache.geode.internal.InternalDataSerializer.readUserObject(InternalDataSerializer.java:1724) at org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2719) at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2864) at org.apache.geode.CopyHelper.doDeepCopy(CopyHelper.java:242) at org.apache.geode.CopyHelper.copy(CopyHelper.java:190) at org.apache.geode.internal.cache.EntryEventImpl.getNewValue(EntryEventImpl.java:1089) at java.util.Optional.map(Optional.java:215) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$SessionEventHandlerCacheListenerAdapter.isSession(AbstractGemFireOperationsSessionRepository.java:1732) at java.util.Optional.filter(Optional.java:178) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$SessionEventHandlerCacheListenerAdapter.remember(AbstractGemFireOperationsSessionRepository.java:1699) at java.util.Optional.filter(Optional.java:178) at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$SessionEventHandlerCacheListenerAdapter.afterCreate(AbstractGemFireOperationsSessionRepository.java:1481) at org.apache.geode.internal.cache.EnumListenerEvent$AFTER_CREATE.dispatchEvent(EnumListenerEvent.java:130) at org.apache.geode.internal.cache.LocalRegion.dispatchEvent(LocalRegion.java:8214) at org.apache.geode.internal.cache.LocalRegion.dispatchListenerEvent(LocalRegion.java:6924) at org.apache.geode.internal.cache.LocalRegion.invokePutCallbacks(LocalRegion.java:5898) at org.apache.geode.internal.cache.EntryEventImpl.invokeCallbacks(EntryEventImpl.java:2440) at org.apache.geode.internal.cache.ProxyRegionMap$ProxyRegionEntry.dispatchListenerEvents(ProxyRegionMap.java:615) at org.apache.geode.internal.cache.LocalRegion.basicPutPart2(LocalRegion.java:5756) at org.apache.geode.internal.cache.ProxyRegionMap.basicPut(ProxyRegionMap.java:244) at org.apache.geode.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5580) at org.apache.geode.internal.cache.LocalRegionDataView.putEntry(LocalRegionDataView.java:162) at org.apache.geode.internal.cache.LocalRegion.basicPut(LocalRegion.java:5036) at org.apache.geode.internal.cache.LocalRegion.validatedPut(LocalRegion.java:1635) at org.apache.geode.internal.cache.LocalRegion.put(LocalRegion.java:1622) at org.apache.geode.internal.cache.AbstractRegion.put(AbstractRegion.java:442) 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.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.lambda$newAddSessionAttributeTask$2(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:239)\{noformat}I think the second one created during the get operation is not necessary. It is created in LocalRegion.getObject here:\{noformat}if (!disableCopyOnRead) \{ result = conditionalCopy(result);}{noformat}Since this is a proxy region, the value is already a copy retrieved from the server. I don't think it needs to be copied again. I made this change to see the difference in behavior:\{noformat}if (!disableCopyOnRead && !isProxy()) \{ result = conditionalCopy(result);}{noformat}The third one created during the get is a LOCAL_LOAD_CREATE event. I'm not sure, but I don't think this one is necessary either. I made this change to SessionEventHandlerCacheListenerAdapter afterCreate to see the difference in behavior:\{noformat}public void afterCreate(EntryEvent<Object, Session> event) \{ if (!event.getOperation().isLocalLoad()) { Optional.ofNullable(event) .filter(this::remember) .ifPresent(it -> getSessionRepository() .publishEvent(newSessionCreatedEvent(toSession(it.getNewValue(), it.getKey())))); }}\{noformat}After these changes, the number of DeltaCapableGemFireSession instances created during the test in master is actually < the number created in 2.2.2.RELEASE:\{noformat}[Session Thread 15]2020-02-14 12:00:09,258 WARN ionRepository$DeltaCapableGemFireSession: 708 - XXX DeltaCapableGemFireSession instantiations=20003\{noformat}Thats because the SessionEventHandlerCacheListenerAdapter was also processing LOCAL_LOAD_EVENTS in 2.2.2.RELEASE, just not as many as in master (before these changes). > Apache Geode 1.11 severely and negatively impacts performance and resource > utilization > -------------------------------------------------------------------------------------- > > Key: GEODE-7763 > URL: https://issues.apache.org/jira/browse/GEODE-7763 > Project: Geode > Issue Type: Bug > Components: client/server > Affects Versions: 1.10.0, 1.11.0 > Reporter: John Blum > Priority: Critical > Labels: performance > Attachments: 1.11-client-stats.gfs, 1.11-server-stats.gfs, > 1.11_thread_dumps.rtf, 1.9-client-stats.gfs, 1.9-server-stats.gfs, 1.9.log, > apache-geode-1.10-client-server-interaction-output.txt, > apache-geode-1.10-client-server-startup-output.txt, > apache-geode-1.11-client-server-interaction-output.txt, > apache-geode-1.11-client-server-startup-output.txt > > > This problem was first observed in Apache Geode 1.11.0. The problem was not > present in Apache Geode 1.9.2. This problem is an issue for Apache Geode > 1.10 as well! > After upgrading _Spring Session for Apache Geode_ (SSDG) 2.3 to _Spring Data > for Apache Geode_ (SDG) Neumann/2.3, which is based on Apache Geode 1.11, > this problem with SSDG's test suite started occurring. > _Spring Session for Apache Geode_ (SSDG) 2.2, which is based on _Spring Data > for Apache Geode_ (SDG) Moore/2.2, pulls in Apache Geode 1.9.2. This problem > did not occur in SSDG 2.2. with Apache Geode 1.9.2. > Out of curiosity, I wondered whether this problem affects (i.e. was actually > introduced in) Apache Geode 1.10.0. So, I configured SSDG 2.3 to pull in SDG > Moore/2.2 but run with Apache Geode 1.10. The problem occurred with Apache > Geode 1.10 as well! > The SSDG test class in question, affected by Geode's deficiencies, is the > [MultiThreadedHighlyConcurrentClientServerSessionOperationsIntegrationTests|https://github.com/spring-projects/spring-session-data-geode/blob/2.2.2.RELEASE/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java]. > The test class was modeled after a customer UC, who were using Spring Session > and Apache Geode/Pivotal GemFire as the HTTP Session state management > provider, therefore it simulates their highly concurrent environment. > The test class has 2 primary parameters: [Thread > Count|https://github.com/spring-projects/spring-session-data-geode/blob/2.2.2.RELEASE/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java#L90] > and the [Workload > Size|https://github.com/spring-projects/spring-session-data-geode/blob/2.2.2.RELEASE/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java#L91]. > The "_Workload Size_" should not be confused with the "_Payload Size_" of the > individual objects passed to the Geode data access operations (i.e. {{gets}}, > {{puts}}, {{removes}}). The "_Workload Size_" merely determines the number > of {{get}}, {{put}} or {{remove}} operations performed on the (Session) > Region over the duration of the test run. Certain operations are "favored" > over others, therefore the number of {{gets}}, {{puts}} and {{removes}} is > weighted. > The "_Payload_" in this case is a (HTTP) {{Session}} object and the "size" is > directly proportional to the number of Session attributes stored in the > Session. > As you can see from the [test class > configuration|https://github.com/spring-projects/spring-session-data-geode/blob/2.2.2.RELEASE/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java#L90-L91] > in *SSDG* {{2.2}}, the *Thread Count* was set to *180* and the *Workload > Size* (or number of Region operations) was set to *10,000*. > This had to be significantly adjusted in SSDG 2.3 using Apache Geode 1.11 > (and, as it turns out, Apache Geode 1.10 as well), as can be seen in the > {{2.3.0.M1}} release bits source, > [here|https://github.com/spring-projects/spring-session-data-geode/blob/2.3.0.M1/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java#L94-L95]. > It turns out different combinations of the Thread Count (number of workers, > or "concurrent Sessions") and Workload Size ultimately determine whether this > test class passes or not. > In other words, if I increase the Thread Count, then the Workload Size must > decrease, otherwise the test fails! If I increase the Workload Size, then > the Thread Count must decrease, otherwise again the test fails! > I tried with different combinations of Thread Count and Workload Size until > the test passed. More often than not 180 Threads with 3000 Regions > operations worked, but was right on the cusp of failing, therefore, I settled > on 180 Threads (which nearly matches the customers environment of 200 > concurrent client Sessions) and 2000 concurrent Region operations. > The point of the test class is to assert the state of the Session is > consistent at the end of the test run. > However, before this test can even finish, the client, as in the > {{ClientCache}} instance, starts failing with Exceptions, specifically: > {code:java} > java.lang.RuntimeException: Session Access Task Failed > at > org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.safeFutureGet(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:298) > at > java.util.stream.ReferencePipeline$4$1.accept(ReferencePipeline.java:210) > at > java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382) > at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) > at > java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) > at > java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) > at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) > at java.util.stream.IntPipeline.reduce(IntPipeline.java:456) > at java.util.stream.IntPipeline.sum(IntPipeline.java:414) > at > org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.runSessionWorkload(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:313) > at > org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.concurrentSessionAccessIsCorrect(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:324) > 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.junit.runner.JUnitCore.run(JUnitCore.java:137) > at > com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) > at > com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) > at > com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230) > at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58) > Caused by: java.util.concurrent.ExecutionException: > org.springframework.dao.DataAccessResourceFailureException: Pool unexpected > socket timed out on client connection=Pooled Connection to localhost:60964: > Connection[DESTROYED]). Server unreachable: could not connect after 1 > attempts; nested exception is > org.apache.geode.cache.client.ServerConnectivityException: Pool unexpected > socket timed out on client connection=Pooled Connection to localhost:60964: > Connection[DESTROYED]). Server unreachable: could not connect after 1 attempts > at java.util.concurrent.FutureTask.report(FutureTask.java:122) > at java.util.concurrent.FutureTask.get(FutureTask.java:192) > at > org.springframework.session.data.gemfire.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.safeFutureGet(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:295) > ... 43 more > Caused by: org.springframework.dao.DataAccessResourceFailureException: Pool > unexpected socket timed out on client connection=Pooled Connection to > localhost:60964: Connection[DESTROYED]). Server unreachable: could not > connect after 1 attempts; nested exception is > org.apache.geode.cache.client.ServerConnectivityException: Pool unexpected > socket timed out on client connection=Pooled Connection to localhost:60964: > Connection[DESTROYED]). Server unreachable: could not connect after 1 attempts > 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:200) > 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.MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.lambda$newAddSessionAttributeTask$2(MultiThreadedHighlyConcurrentClientServerHttpSessionAccessIntegrationTests.java:216) > at java.util.concurrent.FutureTask.run(FutureTask.java:266) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) > at java.lang.Thread.run(Thread.java:748) > Caused by: org.apache.geode.cache.client.ServerConnectivityException: Pool > unexpected socket timed out on client connection=Pooled Connection to > localhost:60964: Connection[DESTROYED]). Server unreachable: could not > connect after 1 attempts > at > org.apache.geode.cache.client.internal.OpExecutorImpl.handleException(OpExecutorImpl.java:659) > at > org.apache.geode.cache.client.internal.OpExecutorImpl.handleException(OpExecutorImpl.java:501) > at > org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:153) > at > org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:108) > at > org.apache.geode.cache.client.internal.PoolImpl.execute(PoolImpl.java:772) > at org.apache.geode.cache.client.internal.PutOp.execute(PutOp.java:89) > at > org.apache.geode.cache.client.internal.ServerRegionProxy.put(ServerRegionProxy.java:159) > at > org.apache.geode.internal.cache.LocalRegion.serverPut(LocalRegion.java:3035) > at > org.apache.geode.internal.cache.LocalRegion.cacheWriteBeforePut(LocalRegion.java:3152) > at > org.apache.geode.internal.cache.ProxyRegionMap.basicPut(ProxyRegionMap.java:238) > at > org.apache.geode.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5580) > at > org.apache.geode.internal.cache.LocalRegionDataView.putEntry(LocalRegionDataView.java:162) > at > org.apache.geode.internal.cache.LocalRegion.basicPut(LocalRegion.java:5036) > at > org.apache.geode.internal.cache.LocalRegion.validatedPut(LocalRegion.java:1635) > at > org.apache.geode.internal.cache.LocalRegion.put(LocalRegion.java:1622) > at > org.apache.geode.internal.cache.AbstractRegion.put(AbstractRegion.java:442) > at > org.springframework.data.gemfire.GemfireTemplate.put(GemfireTemplate.java:197) > ... 8 more > {code} > Attached to this issue are log output files from each of my runs using Apache > Geode 1.10 and 1.11. > The log files serve 2 purposes: 1) to show the version of Apache Geode used > and 2) the errors occurs on the client and server during the run. > Any lines in the log output prefixed with "{{[FORK]}}" originates from the > cache server. The other lines come from the client. There is only a single > client and server in this test case. > It takes a bit of initial time during the run for the failures to start > occurring, which is why this seems like a resource utilization problem. > After first, I suspected issues with the client Pool configuration, or > {{CacheServer}} configuration, adjusting timeouts and so on. I even > suspected memory being an issue for the client and server processes, upping > each to 2 GB+. However, it turns out none of the changes made a bit of > difference. And the truth of the matter is, this (existing) configuration > worked seamlessly until I upgraded to Apache Geode 1.10+ (specifically, 1.11). -- This message was sent by Atlassian Jira (v8.3.4#803005)