No, for a CEP engine this is one of the most serious types of problems. It's possible for an engine to be overloaded, but if this is the behavior, a sporadic event burst could be used to blow up the execution. I suspect slower CPUs may incur this problem at much lower insertion/expiration rates, I'll raise a killer JIRA and request a more graceful fail mechanism in 5.x. Good news is, 6.x may be able to deal with these issues much better. Thanks!
On 05/04/2013 09:59 AM, Jason Barto wrote: > Wolfgang, > I'd agree with you although I will continue to research further. If > it is as you suggest - a race condition - I would think a more > appropriate reaction of the system would be to emit a warning that > events are expiring before they can be considered by the rules engine, > although I would think that this is a use case which does not see much > real life execution. Thank you very much for your time and input into > this matter, it's been educational. > > Sincerely, > Jason > > On Saturday, May 4, 2013, Wolfgang Laun wrote: > > I can confirm that (using 5.5.0) this NPE occurs predictably with a > limit of 500000. > > It looks like a race condition to me - at least that is what line > DefaultAgenda.java:1319 suggests. Possibly it is due to automatic > retraction "overtaking" rule firing, since the latter tends to take > much, much longer than the ~10sec the mere insertion of 500K events > takes on my system. > > 500,000 inserted in 10s means 50,000/s, and that, in turn, implies > 50,000 retractions per second. 30s after the last insertion, only > ~90,000 firings have taken place. (I added a printout of the counter's > total after the Thread.sleep().) > > It's interesting to experiment with the @expires value: Everything > else remaining the same, a setting of @expires(10s) will let the > firings complete without a NPE. > > So, I'm back to my surmise: a race condition, due to expiry being cut > too short to cope with the system load. I'd still classify this as a > Drools bug: it should notice that it is being overtaxed and/or > destabilizing itself. > > -W > > > On 04/05/2013, Jason Barto <[email protected]> wrote: > > Wolfgang, > > thank you for your prompt reply. After further work with my > code I think > > the culprit may have either been the setting of the event > expiration time > > to 1s OR that I was using session.update to insert a new counter > object; > > but maybe not. I cleaned up my code in order to send it out. > In doing so > > I also downloaded the official Drools 5.5 distribution (in the > previous > > example I was using the libraries packaged with BRMS). Between > the code > > cleanup and the use of the official distro I'm no longer > experiencing a > > Consequence Exception. > > > > That being said I am still experiencing a NPE when a high > iteration count. > > If you take a look at Drools5FusionEval.java, around line 51 > you'll see a > > variable 'eventLimit'. If set to 500000 it seems to pretty > reliably kick > > out the following NPE: > > > > Exception in thread "Thread-1" java.lang.NullPointerException > > at > > > org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1319) > > at > > > org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1221) > > at > > > org.drools.common.DefaultAgenda.fireUntilHalt(DefaultAgenda.java:1434) > > at > > > > org.drools.common.AbstractWorkingMemory.fireUntilHalt(AbstractWorkingMemory.java:755) > > at > > > > org.drools.common.AbstractWorkingMemory.fireUntilHalt(AbstractWorkingMemory.java:731) > > at > > > > org.drools.impl.StatefulKnowledgeSessionImpl.fireUntilHalt(StatefulKnowledgeSessionImpl.java:247) > > at > drools5fusioneval.Drools5FusionEval$1.run(Drools5FusionEval.java:47) > > > > As I've said I'm still very new to Drools and trying to > understand better > > how it does what it does - any information that anyone can > provide to help > > me understand why the above error is being experienced would be > greatly > > appreciated. > > > > Source code and rules are attached. > > > > Sincerely, > > Jason > > > > > > On Sat, May 4, 2013 at 7:58 AM, Wolfgang Laun > > <[email protected]>wrote: > > > >> Works for me (5.5.0, 5.4.0) - at least based on the code you've > posted > >> which (apart from the omitted getters and setters) isn't the > one you've > >> been running, and so you may have changed or omitted something > >> that's essential. > >> > >> The full stack dump might shed some more light on this, and the > full and > >> true code of the rule RHS whre the NPE is caused. > >> > >> -W > >> > >> On 04/05/2013, Jason Barto <[email protected]> wrote: > >> > I am new to Drools (Expert and Fusion) and have been reading > through > >> > the > >> > materials over the last few days. After going through some > of the > >> tutorial > >> > code I wrote a very quick and dirty to perform a base > assessment of the > >> > speed of Fusion / Expert. My code is below. The strange > thing I'm > >> > currently receiving is, if I insert 100k events the test > completes > >> > successfully, if I insert 150k events, I receive a > ConsequenceException > >> > caused by an NPE. Being new to Drools I must be doing > something wrong, > >> can > >> > anyone please provide some guidance? > >> > > >> > (Main function) > >> > Counter cc = new Counter (); > >> > session.insert (cc); > >> > for (int i = 0; i < 150000; i++) { > >> > entryPoint01.insert (new MyEvent ()); > >> > } > >> > > >> > (Counter Class) > >> > public class Counter { > >> > private long total = 0; > >> > // get / set total > >> > public void addValue (int val) { > >> > total += val; > >> > } > >> > } > >> > > >> > (MyEvent Class) > >> > public class MyEvent { > >> > private int value = 1; > >> > // get / set value > >> > } > > > > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
