[rules-users] Protobuf Marshaller Question (ScheduledActivation Persistence)

Philipp Herzig pherzig at gmail.com
Tue Oct 2 02:36:57 EDT 2012


Thanks Edson for your reply. I am really looking forward to work on a
solution for this.

What you write also makes absolutely sense to me. As far as I can see,
the ScheduledActivation is unmarshalled correctly to the Agenda.
Moreover, after unmarshalling the agenda my logger says that there is
one active and one scheduled activation (interestingly, the agendaSize
equals zero, but anyway).

logger.info("agenda size: "+agenda.agendaSize());
logger.info("activations: "+agenda.getActivations().length);
logger.info("scheduledActivations: "+agenda.getScheduledActivations().length);
logger.info("activeActivations: "+agenda.getActiveActivations() );
logger.info("dormantActivations: "+agenda.getDormantActivations());

Since the ProtobufOutputMarshaller seems to use the scheduled job
instances (Timers _timers = writeTimers(
context.wm.getTimerService().getTimerJobInstances(), context ); I
tried to look what's in these list. However, in all cases the list of
job instances is empty.

logger.info("timer service2: "+((StatefulKnowledgeSessionImpl)
this.session).getTimerService());
logger.info("timer service2: "+((StatefulKnowledgeSessionImpl)
this.session).getTimerService().getTimerJobInstances());
		
logger.info("timer service wm: "+((InternalWorkingMemory)
((StatefulKnowledgeSessionImpl)
this.session).session).getTimerService());
logger.info("timer service wm: "+((InternalWorkingMemory)
((StatefulKnowledgeSessionImpl)
this.session).session).getTimerService().getTimerJobInstances());


As suggested by you, I simply switched to the current 5.5.0.Beta1 deps
from nexus (because I don't know where I can get the branch builds
from beyond version 5.4.0.Final). However, a quick test run tells me
that the problem persists.
Therefore, I'm gonna write a self-contained test and file a JIRA
accordingly. I keep you updated.

Thanks a lot,

Philipp


2012/10/1 Edson Tirelli <ed.tirelli at gmail.com>:
>
>    Phillip,
>
>    Thanks for investigating this. There are few developers that know this
> area of the code, and so it is indeed a bit hard to get extra information.
>
>    Here is a quick recap: although the serialization change on Drools 5.3
> involved a move to use protobuf as the serialization framework, Protobuf is
> nothing more than a way to easily handle the actual data persistence. The
> whole logic is one layer up in the scale and there is where the
> investigation should focus. So, lets forget Protobuf for the moment.
>
>    Before 5.3, we used to serialize all the data structures and intermediate
> data inside a session using custom data structures. That was a big problem
> because, for instance, if a session was serialized with one version of
> Drools, and then someone tried to use any other version of Drools to
> deserialize the session, it would not work. Even a simple bug fix could
> affect the internal data structures and make a session impossible to
> deserialize. To avoid that, from 5.3 and forward, we no longer serialize
> everything, but instead we serialize only the necessary raw data that allows
> us to reconstruct a session.
>
>     To be more clear, lets imagine that we have a session and a fact A1 in
> there, and an activation of rule R1 for fact A1. When the session is
> serialized, we will basically serialize fact A1 and a record that R1 was
> active for fact A1. When we deserialize the session, we will re-propagate A1
> through the engine, recreating all the data structures and then correlate
> the new activation of R1 with the serialized activation of R1.
>
>     Having said that, even scheduled activations should be properly
> serialized/deserialized. I think there was a bug fixed related to timer
> serialization, so the first thing I would like to suggest is to check your
> use case against the 5.4.x branch where fixed bugs are committed. If you
> still see the problem there, then please open a JIRA with a self-contained
> test showing the problem, and I will take a look as soon as I can.
>
>     Thanks,
>         Edson
>
>
> On Mon, Oct 1, 2012 at 1:04 PM, Philipp Herzig <pherzig at gmail.com> wrote:
>>
>> Dear developers,
>>
>> Unfortunately, I was not able to solve this problem yet. However, I
>> found another issue that seems to be related.
>> More precisely, when I try to delete the rules that led to the
>> ScheduledActivations (which are not fired after unmarshalling, i.e.,
>> there are "orphan" activations on the agenda) I get the following
>> trace:
>>
>> java.lang.NullPointerException
>>         at
>> org.drools.time.impl.JDKTimerService.removeJob(JDKTimerService.java:134)
>>         at
>> org.drools.reteoo.RuleTerminalNode$RTNCleanupAdapter.cleanUp(RuleTerminalNode.java:524)
>>         at org.drools.reteoo.BetaNode.doRemove(BetaNode.java:454)
>>         at org.drools.common.BaseNode.remove(BaseNode.java:106)
>>         at
>> org.drools.reteoo.RuleTerminalNode.doRemove(RuleTerminalNode.java:410)
>>         at org.drools.common.BaseNode.remove(BaseNode.java:106)
>>         at
>> org.drools.reteoo.ReteooBuilder.removeRule(ReteooBuilder.java:261)
>>         at
>> org.drools.reteoo.ReteooRuleBase.removeRule(ReteooRuleBase.java:459)
>>         at
>> org.drools.common.AbstractRuleBase.removeRule(AbstractRuleBase.java:1106)
>>         at
>> org.drools.common.AbstractRuleBase.removeRule(AbstractRuleBase.java:1084)
>>         at
>> org.drools.impl.KnowledgeBaseImpl.removeRule(KnowledgeBaseImpl.java:208)
>>
>> Obviously, there is still a connection between the unfired activations
>> and the rule.
>>
>> Since some time ago I've successfully used the JPAKnowledgeService, I
>> looked into the code and found a line in initKSession which looks
>> promising:
>>
>>
>> ((AcceptsTimerJobFactoryManager) ((InternalKnowledgeRuntime)
>>
>> ksession).getTimerService()).getTimerJobFactoryManager().setCommandService(
>> this );
>>
>>
>> I kindly wanted to ask, if somebody can explain the implications of
>> this codeline with regards to the ScheduledActivations.
>>
>>
>> I would be still happy, if someone could help me.
>>
>> Thanks,
>>
>> Philipp
>>
>>
>> 2012/9/3 Philipp Herzig <pherzig at gmail.com>:
>> > Alright, one step further.
>> >
>> > I retrieved the current agenda via
>> >
>> > InternalAgenda agenda = ((AgendaImpl)session.getAgenda()).getAgenda();
>> >
>> > before marshalling and after unmarshalling.
>> > Now its great, all my example ScheduledActivations are successfully
>> > unmarshalled to the agenda. However, they are not fired for some
>> > reason?
>> > I call fireAllRules after recreating the session.
>> >
>> > Sorry for spaming but I hope this helps someone to get me into the
>> > right direction.
>> >
>> > Thanks again,
>> >
>> > Philipp
>> >
>> >
>> >
>> > ---------- Forwarded message ----------
>> > From: Philipp Herzig <pherzig at gmail.com>
>> > Date: 2012/9/3
>> > Subject: Re: Protobuf Marshaller Question (ScheduledActivation
>> > Persistence)
>> > To: Rules Users List <rules-users at lists.jboss.org>
>> >
>> >
>> > Maybe one addition to that. Currently I am working on 5.4.0.CR1 but
>> > same applies to me for all versions until 5.3.2.Final including
>> > 5.4.0.Final (since obviously the protobuf impl has been introduced in
>> > 5.3.2).
>> >
>> > Thanks again,
>> >
>> > Philipp
>> >
>> > 2012/9/3 Philipp Herzig <pherzig at gmail.com>:
>> >> Dear developers,
>> >>
>> >> I believe this is a question for Edson.
>> >>
>> >> I wonder if ScheduledActivations are added to the Agenda when
>> >> unmarshalling an existing session and fired as well, e.g., non-expired
>> >> timers.
>> >>
>> >> I guess that this worked with the DefaultMarshaller implementation (at
>> >> least I can see LOCs in the InputMarshaller where normal or scheduled
>> >> activations are added to the newly created agenda). I cannot find
>> >> similar code in the ProtobufMarshaller or, more precisely, the
>> >> ProtobufInputMarshaller.
>> >>
>> >> I also tried to override MarshallerProvider in order to use the
>> >> DefaultMarshaller but that is obviously not-consistent
>> >> (ClassCastException) with the current codebase anymore.
>> >>
>> >> Hopefully, I am doing/understanding sth. completely wrong here.
>> >>
>> >> Thanks for any help regarding this issue,
>> >>
>> >> Philipp
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
> --
>   Edson Tirelli
>   JBoss Drools Core Development
>   JBoss by Red Hat @ www.jboss.com
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>


More information about the rules-users mailing list