This issue has been resolved by https://issues.jboss.org/browse/DROOLS-516 (a 
discussion in the comments in https://issues.jboss.org/browse/DROOLS-498 is 
relevant, as this issue was originally reported as related to DROOLS-498).


On Jul 14, 2014, at 6:11 PM, Davide Sottara <dso...@gmail.com> wrote:

> Thanks, we'll look at it tomorrow
> Davide
> 
> On 07/15/2014 02:09 AM, Kent Anderson wrote:
>> https://github.com/droolsjbpm/drools/pull/358
>> 
>> Per your advice, this pull request sets up the memory leak, but it cannot 
>> verify that it exists without diving into internal drools structures. 
>> 
>> Please let me know what else we can do to facilitate fixing this issue.
>> 
>> 
>> On Jul 14, 2014, at 2:09 PM, Davide Sottara <dso...@gmail.com> wrote:
>> 
>>> I'd need to check, but if you can put together the basics of the test case 
>>> - the combination of rules and facts that causes the leak,
>>> we'll add the checks to ensure it's solved. Mark should have given you 
>>> enough pointers to the style we use for test cases.
>>> We really appreciate your collaboration, and since this is a critical bug 
>>> we'll fix it asap
>>> Thanks!!
>>> Davide
>>> 
>>> On 07/14/2014 08:33 PM, Kent Anderson wrote:
>>>> Is there a reliable way to find an EventFactHandle instance buried within 
>>>> the TupleEntryQueue’s and the PhreakPropagationContext’s?
>>>> 
>>>> The multiple containers of interface/impl’s makes it nearly impossible to 
>>>> write a “good” test that can peak under the hood where this memory leak is 
>>>> being held.  If there is a recommended way to do it, I’d be happy to do so.
>>>> 
>>>> 
>>>> <Mail Attachment.png>
>>>> 
>>>> 
>>>> On Jul 13, 2014, at 7:31 PM, Mark Proctor <mproc...@codehaus.org> wrote:
>>>> 
>>>>> Could you submit a unit test as a pull request?
>>>>> http://docs.jboss.org/drools/release/5.5.0.Final/droolsjbpm-introduction-docs/html/gettingstarted.html
>>>>> 
>>>>> Add it to here, and follow existing conventions:
>>>>> https://github.com/droolsjbpm/drools/blob/master/drools-compiler/src/test/java/org/drools/compiler/integrationtests/CepEspTest.java
>>>>> 
>>>>> Mark
>>>>> On 11 Jul 2014, at 20:38, Kent Anderson <kent.ander...@psware.com> 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> 
>>>>>> 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> 
>>>>>>> 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
>>>>>>>> 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
>>>>> 
>>>>> _______________________________________________
>>>>> 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
>>> 
>>> _______________________________________________
>>> 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
> 
> _______________________________________________
> 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

Reply via email to