[infinispan-issues] [JBoss JIRA] (ISPN-11022) Remote exception stack traces are not serialized
Dan Berindei (Jira)
issues at jboss.org
Mon Dec 9 08:56:00 EST 2019
[ https://issues.redhat.com/browse/ISPN-11022?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13822770#comment-13822770 ]
Dan Berindei commented on ISPN-11022:
-------------------------------------
Exception stack traces are pretty big, apparently big enough to make a bad situation worse:
https://stackoverflow.com/questions/59236742/communicating-infinispan-remote-exceptions-generates-excessive-network-traffic
With the triangle algorithm there shouldn't be any cases where the originator talks to the primary owner, which waits for acks from all the backups before replying to the primary. That being said, if there are still any O->P->B->P->O situations, we're almost certainly using the same timeout for both RPCs, and it doesn't make sense for P to send a stack trace to O because O's RPC is timing out at the same time.
Maybe we should skip sending the stack trace for all exceptions and instead of adding a fake stace in {{ThrowableExternalizer}} change the exception message to something like {{"Please look up the full remote stack trace in the log of %s"}}
> Remote exception stack traces are not serialized
> ------------------------------------------------
>
> Key: ISPN-11022
> URL: https://issues.redhat.com/browse/ISPN-11022
> Project: Infinispan
> Issue Type: Bug
> Components: Core
> Affects Versions: 10.0.0.Final, 10.1.0.Beta1
> Reporter: Dan Berindei
> Priority: Major
> Fix For: 10.1.0.Final
>
>
> Since ISPN-10345, we have an externalizer for all the exceptions we use internally, but it does not serialize the stack trace, so the exception created on the originator has the wrong stack trace:
> {noformat}
> Caused by: org.infinispan.remoting.RemoteException: ISPN000217: Received exception from NonIndexedPojoQueryTest-NodeB-14679, see cause for remote stack trace
> at org.infinispan.remoting.transport.ResponseCollectors.wrapRemoteException(ResponseCollectors.java:26)
> at org.infinispan.remoting.transport.ValidSingleResponseCollector.withException(ValidSingleResponseCollector.java:37)
> at org.infinispan.remoting.transport.ValidSingleResponseCollector.addResponse(ValidSingleResponseCollector.java:21)
> at org.infinispan.remoting.transport.impl.SingleTargetRequest.addResponse(SingleTargetRequest.java:72)
> at org.infinispan.remoting.transport.impl.SingleTargetRequest.onResponse(SingleTargetRequest.java:42)
> ... 24 more
> Caused by: org.infinispan.commons.CacheConfigurationException: Unable to inject dependencies for component class org.infinispan.query.dsl.embedded.impl.IckleFilterAndConverter, path null
> at org.infinispan.marshall.exts.ThrowableExternalizer.readObject(ThrowableExternalizer.java:177)
> at org.infinispan.marshall.exts.ThrowableExternalizer.readObject(ThrowableExternalizer.java:42)
> at org.infinispan.marshall.core.GlobalMarshaller.readWithExternalizer(GlobalMarshaller.java:728)
> at org.infinispan.marshall.core.GlobalMarshaller.readNonNullableObject(GlobalMarshaller.java:709)
> at org.infinispan.marshall.core.GlobalMarshaller.readNullableObject(GlobalMarshaller.java:358)
> at org.infinispan.marshall.core.BytesObjectInput.readObject(BytesObjectInput.java:32)
> at org.infinispan.remoting.responses.ExceptionResponse$Externalizer.readObject(ExceptionResponse.java:49)
> at org.infinispan.remoting.responses.ExceptionResponse$Externalizer.readObject(ExceptionResponse.java:41)
> at org.infinispan.marshall.core.GlobalMarshaller.readWithExternalizer(GlobalMarshaller.java:728)
> at org.infinispan.marshall.core.GlobalMarshaller.readNonNullableObject(GlobalMarshaller.java:709)
> at org.infinispan.marshall.core.GlobalMarshaller.readNullableObject(GlobalMarshaller.java:358)
> at org.infinispan.marshall.core.GlobalMarshaller.objectFromObjectInput(GlobalMarshaller.java:192)
> at org.infinispan.marshall.core.GlobalMarshaller.objectFromByteBuffer(GlobalMarshaller.java:221)
> at org.infinispan.remoting.transport.jgroups.JGroupsTransport.processResponse(JGroupsTransport.java:1405)
> ... 22 more
> Caused by: org.infinispan.commons.CacheException: Expected component not found in registry: org.infinispan.query.remote.impl.ObjectReflectionMatcher
> at org.infinispan.marshall.exts.ThrowableExternalizer.readObject(ThrowableExternalizer.java:181)
> at org.infinispan.marshall.exts.ThrowableExternalizer.readObject(ThrowableExternalizer.java:42)
> at org.infinispan.marshall.core.GlobalMarshaller.readWithExternalizer(GlobalMarshaller.java:728)
> at org.infinispan.marshall.core.GlobalMarshaller.readNonNullableObject(GlobalMarshaller.java:709)
> at org.infinispan.marshall.core.GlobalMarshaller.readNullableObject(GlobalMarshaller.java:358)
> at org.infinispan.marshall.core.BytesObjectInput.readObject(BytesObjectInput.java:32)
> at org.infinispan.marshall.exts.ThrowableExternalizer.readObject(ThrowableExternalizer.java:176)
> ... 35 more
> {noformat}
> We should include the stack trace when serializing remote exceptions, and use {{Throwable.setStackTrace()}} to restore it on the originator.
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
More information about the infinispan-issues
mailing list