Thanks for reporting, we'll investigate both this and 498 Davide On 07/11/2014 08:38 PM, Kent Anderson wrote: > We have found a workaround that eliminates the leftover event (gone > from Working Memory, but not from the JVM memory): > > The rule "forget it ever happened" (seen below) causes the problem. > Re-writing it to remove the check for RAISE in the LHS eliminated the > memory leak. Of course, our application requires the check for RAISE, > so it can be accomplished by manually querying working memory from the > RHS. It's ugly, but it resolved the issue. > > query existsRaise($id) > $raise : MyEvent( eventState == EventState.RAISE, eventId == $id ) > end > > rule"process clear" > no-loop > when > $clear : MyEvent(eventState == EventState.CLEAR, $clearId : eventId) > then > QueryResults results = kcontext.getKieRuntime().getQueryResults( > "existsRaise", $clearId ); > if (results.size() == 0) { > System.out.println( "Forwarding CLEAR(" + $clearId + ")" ); > } else { > System.out.println("Forgetting RAISE/CLEAR(" + $clearId + ")"); > for (QueryResultsRow row : results){ > MyEvent raise = (MyEvent) row.get ("$raise"); > delete(raise); > } > } > delete($clear); > end > > This appears to be a similar situation > to https://issues.jboss.org/browse/DROOLS-498. > > > > On Jul 10, 2014, at 3:54 PM, Kent Anderson <kent.ander...@psware.com > <mailto:kent.ander...@psware.com>> wrote: > >> Correction: The original post did not include another rule that >> exists in the stream. The memory leak does not appear unless both >> rules are active in the stream. >> >> declare MyEvent >> @role(event) >> @timestamp(timestamp) >> end >> >> /* If a RAISE is buffered for N seconds, send it out */ >> rule"forward raise" >> no-loop >> duration(3s) >> when >> $raise : MyEvent(eventState == EventState.RAISE, $raiseId : eventId) >> then >> System.out.println("Forwarding RAISE(" + $raiseId + ")"); >> delete($raise); >> end >> >> /* When CLEAR, and buffered, clear them both out */ >> rule"forget it ever happened" >> no-loop >> when >> $clear : MyEvent(eventState == EventState.CLEAR, $clearId : eventId) >> $raise : MyEvent(eventState == EventState.RAISE, eventId == $clearId) >> then >> System.out.println("Forgetting RAISE/CLEAR(" + $clearId + ")"); >> delete($clear); >> delete($raise); >> end >> >> >> On Jul 10, 2014, at 2:50 PM, Kent Anderson <kent.ander...@psware.com >> <mailto:kent.ander...@psware.com>> wrote: >> >>> The following rule produces a memory leak in Drools 6.1.0-SNAPSHOT: >>> >>> (Stream mode) >>> >>> declare MyEvent >>> @role(event) >>> @timestamp(timestamp) >>> end >>> >>> /* If a RAISE is buffered for N seconds, send it out */ >>> rule"forward raise" >>> no-loop >>> duration(3s) >>> when >>> $raise : MyEvent(eventState == EventState.RAISE, $raiseId : eventId) >>> then >>> System.out.println("Forwarding RAISE(" + $raiseId + ")"); >>> delete($raise); >>> end >>> >>> >>> I see the rule fire as expected, printing out the message 3 seconds >>> after the event is added into the session. While the event is >>> waiting, I see a FactCount of 1 in the session. After the rule >>> fires, the fact count goes to 0. However, using JVisualVm, querying >>> the heap dump shows 1 instance of MyEvent, referenced by an >>> EventFactHandle and several other Drools objects. >>> >>> Is this a bug, or is there a better way to write this rule so >>> Drools' internals let go of the object after it is no longer a fact? >>> >>> <PastedGraphic-1.png> >>> >>> <PastedGraphic-2.png> >>> _______________________________________________ >>> rules-users mailing list >>> rules-users@lists.jboss.org <mailto:rules-users@lists.jboss.org> >>> https://lists.jboss.org/mailman/listinfo/rules-users >> >> _______________________________________________ >> rules-users mailing list >> rules-users@lists.jboss.org <mailto:rules-users@lists.jboss.org> >> https://lists.jboss.org/mailman/listinfo/rules-users > > > > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users