Details
-
Bug
-
Resolution: Done
-
Major
-
6.2.0.Beta1
-
None
-
None
Description
With the following conditions:
- A persisted ksession
- RETEOO engine
- ksession is disposed while a timer is activated
- ksession is loaded with a new kbase which doesn't have a rule which associated with the timer
ActivationTimerInputMarshaller.deserialize() throws a NullPointerException so failed to load the ksession.
java.lang.RuntimeException: Unable to load session snapshot at org.drools.persistence.SessionMarshallingHelper.loadSnapshot(SessionMarshallingHelper.java:88) ~[classes/:na] at org.drools.persistence.SingleSessionCommandService.initExistingKnowledgeSession(SingleSessionCommandService.java:239) ~[classes/:na] at org.drools.persistence.SingleSessionCommandService.<init>(SingleSessionCommandService.java:172) ~[classes/:na] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [na:1.7.0_67] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) [na:1.7.0_67] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [na:1.7.0_67] at java.lang.reflect.Constructor.newInstance(Constructor.java:526) [na:1.7.0_67] at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.buildCommandService(KnowledgeStoreServiceImpl.java:122) [classes/:na] at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.loadKieSession(KnowledgeStoreServiceImpl.java:90) [classes/:na] at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.loadKieSession(KnowledgeStoreServiceImpl.java:39) [classes/:na] at org.kie.internal.persistence.jpa.JPAKnowledgeService.loadStatefulKnowledgeSession(JPAKnowledgeService.java:130) [kie-internal-6.2.0-SNAPSHOT.jar:6.2.0-SNAPSHOT] at org.drools.persistence.timer.integrationtests.TimerAndCalendarTest.testTimerWithRemovingRule(TimerAndCalendarTest.java:340) [test-classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_67] ... Caused by: java.lang.NullPointerException: null at org.drools.core.common.Scheduler$ActivationTimerInputMarshaller.deserialize(Scheduler.java:216) ~[drools-core-6.2.0-SNAPSHOT.jar:6.2.0-SNAPSHOT] at org.drools.core.marshalling.impl.ProtobufInputMarshaller.readTimer(ProtobufInputMarshaller.java:700) ~[drools-core-6.2.0-SNAPSHOT.jar:6.2.0-SNAPSHOT] at org.drools.core.marshalling.impl.ProtobufInputMarshaller.readSession(ProtobufInputMarshaller.java:282) ~[drools-core-6.2.0-SNAPSHOT.jar:6.2.0-SNAPSHOT] at org.drools.core.marshalling.impl.ProtobufInputMarshaller.readSession(ProtobufInputMarshaller.java:155) ~[drools-core-6.2.0-SNAPSHOT.jar:6.2.0-SNAPSHOT] at org.drools.core.marshalling.impl.ProtobufMarshaller.unmarshall(ProtobufMarshaller.java:110) ~[drools-core-6.2.0-SNAPSHOT.jar:6.2.0-SNAPSHOT] at org.drools.core.marshalling.impl.ProtobufMarshaller.unmarshall(ProtobufMarshaller.java:54) ~[drools-core-6.2.0-SNAPSHOT.jar:6.2.0-SNAPSHOT] at org.drools.persistence.SessionMarshallingHelper.loadSnapshot(SessionMarshallingHelper.java:83) ~[classes/:na] ... 44 common frames omitted
Probably we may silently ignore the timer when leftTuple is not found.