"InvalidProtocolBufferException" error is thrown while loading a large stateful knowledge session in BRMS 5.3.x

Solution Verified - Updated -

Environment

  • Red Hat JBoss Enterprise Business Rules Management System (BRMS) 5.3.1

Issue

When attempting to load a large stateful knowledge session, a InvalidProtocolBufferException exception is thrown in JBoss BRMS 5.3.1 + Roll Up 5 applied:

13:17:07,927 ERROR [org.jboss.as.ejb3.invocation] (Camel (camel-4) thread #1 - JmsConsumer[queue.workflow-command]) JBAS014134: EJB Invocation failed on component CustomerOrderCommandHelper for method public org.drools.runtime.StatefulKnowledgeSession com.apd.phoenix.service.brms.impl.CustomerOrderCommandHelper.getStatefulKnowledgeSession(long) throws java.lang.Exception: javax.ejb.EJBTransactionRolledbackException: java.lang.reflect.InvocationTargetException
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleInCallerTx(CMTTxInterceptor.java:138) [jboss-as-ejb3.jar:7.2.1.Final-redhat-10]
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:228) [jboss-as-ejb3.jar:7.2.1.Final-redhat-10]
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:317) [jboss-as-ejb3.jar:7.2.1.Final-redhat-10]
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:214) [jboss-as-ejb3.jar:7.2.1.Final-redhat-10]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation.jar:1.1.2.Final-redhat-1]
...
Caused by: java.lang.RuntimeException: Unable to load session snapshot
    at org.drools.persistence.SessionMarshallingHelper.loadSnapshot(SessionMarshallingHelper.java:96) [drools-persistence-jpa-5.3.1.BRMS.jar:5.3.1.BRMS]
    at org.drools.persistence.SingleSessionCommandService.initKsession(SingleSessionCommandService.java:244) [drools-persistence-jpa-5.3.1.BRMS.jar:5.3.1.BRMS]
    at org.drools.persistence.SingleSessionCommandService.<init>(SingleSessionCommandService.java:192) [drools-persistence-jpa-5.3.1.BRMS.jar:5.3.1.BRMS]
    ... 380 more
Caused by: com.google.protobuf.InvalidProtocolBufferException: Protocol message was too large.  May be malicious.  Use CodedInputStream.setSizeLimit() to increase the size limit.
    at com.google.protobuf.InvalidProtocolBufferException.sizeLimitExceeded(InvalidProtocolBufferException.java:110) [protobuf-java-2.5.0.jar:]
    at com.google.protobuf.CodedInputStream.refillBuffer(CodedInputStream.java:755) [protobuf-java-2.5.0.jar:]
    at com.google.protobuf.CodedInputStream.isAtEnd(CodedInputStream.java:701) [protobuf-java-2.5.0.jar:]
    at com.google.protobuf.CodedInputStream.readTag(CodedInputStream.java:99) [protobuf-java-2.5.0.jar:]
    at org.drools.marshalling.impl.ProtobufMessages$Header.<init>(ProtobufMessages.java:169) [drools-core-5.3.1.BRMS-P05-temporary-patch.jar:]
    at org.drools.marshalling.impl.ProtobufMessages$Header.<init>(ProtobufMessages.java:133) [drools-core-5.3.1.BRMS-P05-temporary-patch.jar:]
    at org.drools.marshalling.impl.ProtobufMessages$Header$1.parsePartialFrom(ProtobufMessages.java:253) [drools-core-5.3.1.BRMS-P05-temporary-patch.jar:]
    at org.drools.marshalling.impl.ProtobufMessages$Header$1.parsePartialFrom(ProtobufMessages.java:248) [drools-core-5.3.1.BRMS-P05-temporary-patch.jar:]
    at com.google.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:200) [protobuf-java-2.5.0.jar:]
    at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:217) [protobuf-java-2.5.0.jar:]
    at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:49) [protobuf-java-2.5.0.jar:]
    at org.drools.marshalling.impl.ProtobufMessages$Header.parseFrom(ProtobufMessages.java:1152) [drools-core-5.3.1.BRMS-P05-temporary-patch.jar:]
    at org.drools.marshalling.impl.PersisterHelper.readFromStreamWithHeader(PersisterHelper.java:235) [drools-core-5.3.1.BRMS-P05-temporary-patch.jar:]
    at org.drools.marshalling.impl.ProtobufInputMarshaller.loadAndParseSession(ProtobufInputMarshaller.java:224) [drools-core-5.3.1.BRMS-P05-temporary-patch.jar:]
    at org.drools.marshalling.impl.ProtobufInputMarshaller.readSession(ProtobufInputMarshaller.java:155) [drools-core-5.3.1.BRMS-P05-temporary-patch.jar:]
    at org.drools.marshalling.impl.ProtobufMarshaller.unmarshall(ProtobufMarshaller.java:117) [drools-core-5.3.1.BRMS-P05-temporary-patch.jar:]
    at org.drools.persistence.SessionMarshallingHelper.loadSnapshot(SessionMarshallingHelper.java:91) [drools-persistence-jpa-5.3.1.BRMS.jar:5.3.1.BRMS]
    ... 382 more

Resolution

The issue is fixed by applying the One-Off Patch on top of Roll Up Patch 5.

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Comments