[jboss-svn-commits] JBL Code SVN: r32289 - in labs/jbossrules/trunk: drools-compiler/src/test/resources/org/drools/integrationtests and 5 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Mar 29 19:46:35 EDT 2010


Author: tirelli
Date: 2010-03-29 19:46:34 -0400 (Mon, 29 Mar 2010)
New Revision: 32289

Added:
   labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/dump_tuples.mvel
   labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/simpletopten.mvel
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/OutOfMemoryTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_MemoryLeak.drl
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/LeftTupleIndexHashTable.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/debug/SessionInspector.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
   labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/reports.mvel
Log:
JBRULES-2340: JBRULES-2339: working on fixing memory leak in true modify

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/OutOfMemoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/OutOfMemoryTest.java	2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/OutOfMemoryTest.java	2010-03-29 23:46:34 UTC (rev 32289)
@@ -16,8 +16,10 @@
  * limitations under the License.
  */
 
+import java.io.FileWriter;
 import java.io.InputStreamReader;
 import java.util.Collection;
+import java.util.HashMap;
 
 import junit.framework.TestCase;
 
@@ -36,6 +38,8 @@
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.ResourceType;
 import org.drools.compiler.PackageBuilder;
+import org.drools.core.util.debug.SessionInspector;
+import org.drools.core.util.debug.SessionReporter;
 import org.drools.io.ResourceFactory;
 import org.drools.rule.Package;
 import org.drools.runtime.ObjectFilter;
@@ -105,43 +109,71 @@
 
     public void testMemoryLeak() {
         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add( ResourceFactory.newClassPathResource( "test_memoryLeak.drl", OutOfMemoryTest.class ),
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_memoryLeak.drl",
+                                                            OutOfMemoryTest.class ),
                       ResourceType.DRL );
-        assertFalse( kbuilder.getErrors().toString(), kbuilder.hasErrors() );
-        
+        assertFalse( kbuilder.getErrors().toString(),
+                     kbuilder.hasErrors() );
+
         final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-        
+
         final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
-        
+
         final int pcount = 2;
         Person[] persons = new Person[pcount];
         FactHandle[] pHandles = new FactHandle[pcount];
-        for( int i = 0; i < persons.length; i++ ) {
-            persons[i] = new Person( "person"+i );
+        for ( int i = 0; i < persons.length; i++ ) {
+            persons[i] = new Person( "person-0-" + i );
             pHandles[i] = ksession.insert( persons[i] );
         }
-        
-        ksession.fireAllRules() ;
-        Collection< ? > logicals = getLogicallyInserted( ksession );
-        assertEquals( pcount, logicals.size() );
-        
-        for(int i = 0; i < pcount; i++ ) {
-            persons[i].setName( "personA"+i );
-            ksession.update( pHandles[i], persons[i] );
+
+        Cheese[] cheeses = new Cheese[pcount];
+        FactHandle[] cHandles = new FactHandle[pcount];
+        for ( int i = 0; i < cheeses.length; i++ ) {
+            cheeses[i] = new Cheese( "cheese-0-" + i );
+            cHandles[i] = ksession.insert( cheeses[i] );
         }
-        
-        ksession.fireAllRules() ;
-        logicals = getLogicallyInserted( ksession );
-        assertEquals( pcount, logicals.size() );
+
+        ksession.fireAllRules();
+
+        for ( int j = 1; j <= 1; j++ ) {
+            for ( int i = 0; i < pcount; i++ ) {
+                cheeses[i].setType( "cheese-" + j + "-" + i );
+                ksession.update( cHandles[i],
+                                 cheeses[i] );
+                persons[i].setName( "person-" + j + "-" + i );
+                ksession.update( pHandles[i],
+                                 persons[i] );
+            }
+            ksession.fireAllRules();
+            System.out.println( "DONE" );
+        }
+
+        SessionInspector inspector = new SessionInspector( ksession );
+        SessionReporter.addNamedTemplate( "dump_tuples",
+                                          getClass().getResourceAsStream( "/org/drools/core/util/debug/dump_tuples.mvel" ) );
+        String report = SessionReporter.generateReport( "dump_tuples",
+                                                        inspector.getSessionInfo(),
+                                                        new HashMap<String, Object>() );
+        try {
+            FileWriter out = new FileWriter( "tupleDump.txt" );
+            out.write( report );
+            out.close();
+            System.out.println( report );
+        } catch ( Exception e ) {
+            e.printStackTrace();
+        }
+        //        logicals = getLogicallyInserted( ksession );
+        //        assertEquals( pcount, logicals.size() );
     }
 
     private Collection< ? > getLogicallyInserted(final StatefulKnowledgeSession ksession) {
-        Collection<?> logicals = ksession.getObjects( new ObjectFilter() {
+        Collection< ? > logicals = ksession.getObjects( new ObjectFilter() {
             public boolean accept(Object object) {
                 return object.getClass().getSimpleName().equals( "PersonName" );
             }
-        });
+        } );
         return logicals;
     }
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_MemoryLeak.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_MemoryLeak.drl	2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_MemoryLeak.drl	2010-03-29 23:46:34 UTC (rev 32289)
@@ -4,11 +4,11 @@
    name : String @key
 end
 
+
 rule "Rule 1"
-    when
-        $p: Person()
-    then
-        PersonName pn = new PersonName();
-        pn.setName( $p.getName() );
-        insertLogical( pn ); 
+        when
+                // forcing a join
+                $p: Person(  )
+                $c: Cheese(  )
+        then
 end

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java	2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java	2010-03-29 23:46:34 UTC (rev 32289)
@@ -321,4 +321,8 @@
         }
         return Collections.unmodifiableCollection( list );
     }
+    
+    public String toExternalForm() {
+        return "[ "+this.getRule().getName()+" active="+this.activated+ " ]";
+    }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java	2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java	2010-03-29 23:46:34 UTC (rev 32289)
@@ -16,6 +16,8 @@
  * limitations under the License.
  */
 
+import java.util.Arrays;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
@@ -262,4 +264,22 @@
         clone.objectHashCode = this.objectHashCode;
         return clone;
     }
+
+    public String toTupleTree(int indent) {
+        StringBuilder buf = new StringBuilder();
+        char[] spaces = new char[indent];
+        Arrays.fill( spaces, ' ' );
+        String istr = new String( spaces );
+        buf.append( istr );
+        buf.append( this.toExternalString() );
+        buf.append( "\n" );
+        for( LeftTuple leftTuple = this.firstLeftTuple; leftTuple != null; leftTuple = leftTuple.getLeftParentNext() ) {
+            buf.append( leftTuple.toTupleTree( indent+4 ) );
+        }
+        return buf.toString();
+    }
+
+    private Object toExternalString() {
+        return "[F:"+this.getId()+" first="+System.identityHashCode( firstLeftTuple )+" last="+System.identityHashCode( lastLeftTuple )+" ]";
+    }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java	2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java	2010-03-29 23:46:34 UTC (rev 32289)
@@ -170,4 +170,8 @@
         throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
     }
 
+    public String toTupleTree(int indent) {
+        return null;
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java	2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java	2010-03-29 23:46:34 UTC (rev 32289)
@@ -79,4 +79,6 @@
     
     public String toExternalForm();
     
+    public String toTupleTree( int indent );
+    
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/LeftTupleIndexHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/LeftTupleIndexHashTable.java	2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/LeftTupleIndexHashTable.java	2010-03-29 23:46:34 UTC (rev 32289)
@@ -6,6 +6,7 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.util.Arrays;
 
 import org.drools.reteoo.LeftTuple;
 import org.drools.reteoo.LeftTupleMemory;
@@ -359,4 +360,5 @@
 
         return builder.toString();
     }
+    
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/debug/SessionInspector.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/debug/SessionInspector.java	2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/debug/SessionInspector.java	2010-03-29 23:46:34 UTC (rev 32289)
@@ -21,6 +21,7 @@
 import java.util.Set;
 import java.util.Stack;
 
+import org.drools.WorkingMemory;
 import org.drools.common.NetworkNode;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
 import org.drools.reteoo.AccumulateNode;
@@ -54,23 +55,23 @@
  */
 public class SessionInspector {
 
-    private StatefulKnowledgeSession                               session;
+    private ReteooWorkingMemory                                    session;
     private Map<Class< ? extends NetworkNode>, NetworkNodeVisitor> visitors;
 
-    public SessionInspector(StatefulKnowledgeSession session) {
-        this.session = session;
+    // default initializer
+    {
         this.visitors = new HashMap<Class< ? extends NetworkNode>, NetworkNodeVisitor>();
-        
+
         // terminal nodes
         this.visitors.put( RuleTerminalNode.class,
                            RuleTerminalNodeVisitor.INSTANCE );
         this.visitors.put( QueryTerminalNode.class,
                            QueryTerminalNodeVisitor.INSTANCE );
-        
+
         // root node
         this.visitors.put( Rete.class,
                            DefaultNetworkNodeVisitor.INSTANCE );
-        
+
         // object source nodes
         this.visitors.put( EntryPointNode.class,
                            DefaultNetworkNodeVisitor.INSTANCE );
@@ -82,7 +83,7 @@
                            RightInputAdapterNodeVisitor.INSTANCE );
         this.visitors.put( PropagationQueuingNode.class,
                            PropagationQueueingNodeVisitor.INSTANCE );
-        
+
         // left tuple source nodes
         this.visitors.put( JoinNode.class,
                            BetaNodeVisitor.INSTANCE );
@@ -100,15 +101,21 @@
                            FromNodeVisitor.INSTANCE );
         this.visitors.put( LeftInputAdapterNode.class,
                            LeftInputAdapterNodeVisitor.INSTANCE );
-        
     }
+    
+    public SessionInspector(StatefulKnowledgeSession session) {
+        this.session = ((StatefulKnowledgeSessionImpl) session).session;
+    }
 
+    public SessionInspector(WorkingMemory session) {
+        this.session = (ReteooWorkingMemory) session;
+    }
+
     public StatefulKnowledgeSessionInfo getSessionInfo() {
         StatefulKnowledgeSessionInfo info = new StatefulKnowledgeSessionInfo();
-        ReteooWorkingMemory wm = ((StatefulKnowledgeSessionImpl) this.session).session;
-        ReteooRuleBase rulebase = (ReteooRuleBase) wm.getRuleBase();
+        ReteooRuleBase rulebase = (ReteooRuleBase) session.getRuleBase();
 
-        info.setSession( wm );
+        info.setSession( session );
 
         Stack<NetworkNode> nodeStack = new Stack<NetworkNode>();
         gatherNodeInfo( rulebase.getRete(),

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2010-03-29 23:46:34 UTC (rev 32289)
@@ -820,7 +820,7 @@
                                            accctx,
                                            false );
         for ( LeftTuple match = matchings[0]; match != null; match = match.getLeftParentNext() ) {
-            // no need to unlink from the left parent as the left parent is being wiped out
+            match.unlinkFromLeftParent();
             match.unlinkFromRightParent();
         }
         // since there are no more matches, the following call will just re-initialize the accumulation

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java	2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java	2010-03-29 23:46:34 UTC (rev 32289)
@@ -1,5 +1,8 @@
 package org.drools.reteoo;
 
+import java.util.Arrays;
+
+import org.drools.common.AgendaItem;
 import org.drools.common.InternalFactHandle;
 import org.drools.core.util.Entry;
 import org.drools.core.util.LeftTupleList;
@@ -531,4 +534,37 @@
     public LeftTuple getParent() {
         return parent;
     }
+    
+    public String toTupleTree(int indent) {
+        StringBuilder buf = new StringBuilder();
+        char[] spaces = new char[indent];
+        Arrays.fill( spaces, ' ' );
+        String istr = new String( spaces );
+        buf.append( istr );
+        buf.append( this.toExternalString() );
+        buf.append( "\n" );
+        for( LeftTuple leftTuple = this.firstChild; leftTuple != null; leftTuple = leftTuple.getLeftParentNext() ) {
+            buf.append( leftTuple.toTupleTree( indent+4 ) );
+        }
+        return buf.toString();
+    }
+
+    private String toExternalString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append( String.format( "%08X", System.identityHashCode( this ) ) ).append( ":" );
+        int[] ids = new int[this.index+1];
+        LeftTuple entry = this;
+        while( entry != null ) {
+            ids[entry.index] = entry.getLastHandle().getId();
+            entry = entry.parent;
+        }
+        builder.append( Arrays.toString( ids ) )
+               .append( " activation=" )
+               .append( this.activation != null ? ((AgendaItem)this.activation).toExternalForm() : "null" )
+               .append( " sink=" )
+               .append( this.sink.getClass().getSimpleName() )
+               .append( "(" ).append( sink.getId() ).append( ")" );
+        return  builder.toString();
+    }
+    
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java	2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java	2010-03-29 23:46:34 UTC (rev 32289)
@@ -317,9 +317,9 @@
             agenda.scheduleItem( (ScheduledAgendaItem) item,
                                  workingMemory );
             item.setActivated( true );
-            workingMemory.removeLogicalDependencies( item,
-                                                     context,
-                                                     this.rule );
+//            workingMemory.removeLogicalDependencies( item,
+//                                                     context,
+//                                                     this.rule );
 
             ((EventSupport) workingMemory).getAgendaEventSupport().fireActivationCreated( item,
                                                                                           workingMemory );
@@ -343,9 +343,9 @@
             item.setActivated( added );
 
             if ( added ) {
-                workingMemory.removeLogicalDependencies( item,
-                                                         context,
-                                                         this.rule );
+//                workingMemory.removeLogicalDependencies( item,
+//                                                         context,
+//                                                         this.rule );
                 ((EventSupport) workingMemory).getAgendaEventSupport().fireActivationCreated( item,
                                                                                               workingMemory );
             }

Added: labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/dump_tuples.mvel
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/dump_tuples.mvel	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/dump_tuples.mvel	2010-03-29 23:46:34 UTC (rev 32289)
@@ -0,0 +1,43 @@
+ at declare{"dump_tuples"}
+********************************************************************************************
+                          Report for Knowledge Session
+********************************************************************************************
+Next node id      : @{session.nodeCount}
+User facts count  : @{session.externalFactCount}
+
+============== Deployed Packages ===========
+ at foreach{ pkg : session.packages }Package: @{pkg.name}    rules: @{pkg.rules.length} 
+ at end{}
+
+============== Nodes Info ==================
+    @foreach{node : session.nodeInfos}Node: @{node.node}
+            @if{node.memoryEnabled == "true"}Memory: @if{node.factMemorySize!="-1"}facts: @{node.factMemorySize}   @end{}@if{node.tupleMemorySize!="-1"}tuples: @{node.tupleMemorySize}   @end{}@if{node.createdFactHandles!="-1"}created handles: @{node.createdFactHandles}@end{}@if{node.actionQueueSize!="-1"}action queue: @{node.actionQueueSize}@end{}@else{}Node memory disabled at end{}
+ at if{node.sinkList.empty == "false"}            Connects to nodes: 
+                @foreach{child : node.sinkList}@{child}
+                @end{}
+ at end{}            Rules:
+                @foreach{ rule : node.rules }rule : @{rule.name}
+                @end{}
+    @end{}    
+
+============== Execution Log ==================
+    @foreach{msg : session.log}@{msg}
+    @end{}                          
+
+============== Memory Data Info ==================
+ at code{
+    java.util.Iterator it = session.session.objectStore.iterateFactHandles();
+    buffer = new StringBuilder();
+    for( int i = 0; i < 150 && it.hasNext(); i++ ) {
+        ifh = it.next();
+        buffer.append( i );
+        buffer.append( ". " );
+        buffer.append( ifh.toTupleTree(4) );
+        buffer.append( "\n" );
+    }
+}
+@{buffer.toString()} 
+
+==============       End        ==================
+ at end{}
+    
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/dump_tuples.mvel
___________________________________________________________________
Name: svn:executable
   + *

Modified: labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/reports.mvel
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/reports.mvel	2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/reports.mvel	2010-03-29 23:46:34 UTC (rev 32289)
@@ -24,4 +24,3 @@
     @foreach{msg : session.log}@{msg}
     @end{}                          
 @end{}    
-    
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/simpletopten.mvel
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/simpletopten.mvel	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/simpletopten.mvel	2010-03-29 23:46:34 UTC (rev 32289)
@@ -0,0 +1,63 @@
+ at declare{"simple_topten"}
+********************************************************************************************
+                          Report for Knowledge Session
+********************************************************************************************
+Next node id      : @{session.nodeCount}
+User facts count  : @{session.externalFactCount}
+
+============== Deployed Packages ===========
+ at foreach{ pkg : session.packages }Package: @{pkg.name}    rules: @{pkg.rules.length} 
+ at end{}
+
+============== Top Ten Left Memory Sizes ======
+ at code{
+topTuples = new java.util.TreeSet(new org.drools.core.util.debug.LeftMemorySizeComparator());
+topTuples.addAll( session.nodeInfos );
+buffer = new StringBuilder();
+it = topTuples.iterator(); 
+for( int i = 0; i < 10 && it.hasNext() ; i++ ) {
+    ni = (org.drools.core.util.debug.NodeInfo) it.next();
+    buffer.append( (i+1) + ". " + ni.node );
+    buffer.append( "\n\t\tLeftTuples = ");
+    buffer.append( ni.getTupleMemorySize());
+    buffer.append( "\n");
+}
+}
+@{buffer.toString()} 
+
+============== Top Ten Right Memory Sizes ======
+ at code{
+topFacts = new java.util.TreeSet(new org.drools.core.util.debug.RightMemorySizeComparator());
+topFacts.addAll( session.nodeInfos );
+buffer = new StringBuilder();
+it = topFacts.iterator(); 
+for( int j = 0; j < 10 && it.hasNext() ; j++ ) {
+    ni = (org.drools.core.util.debug.NodeInfo) it.next();
+    buffer.append( (j+1) + ". " + ni.node );
+    buffer.append( "\n\t\tFacts = ");
+    buffer.append( ni.getFactMemorySize());
+    buffer.append( "\n");
+}
+}
+@{buffer.toString()}
+
+============== Nodes Info ==================
+    @foreach{node : session.nodeInfos}Node: @{node.node} 
+            @if{node.memoryEnabled == "true"}Memory: @if{node.factMemorySize!="-1"}facts: @{node.factMemorySize}   @end{}@if{node.tupleMemorySize!="-1"}tuples: @{node.tupleMemorySize}   @end{}@if{node.createdFactHandles!="-1"}created handles: @{node.createdFactHandles}@end{}@if{node.actionQueueSize!="-1"}action queue: @{node.actionQueueSize}@end{}@else{}Node memory disabled at end{}
+ at if{node.sinkList.empty == "false"}            Connects to nodes: 
+                @foreach{child : node.sinkList}@{child}
+                @end{}
+ at end{}            Rules:
+                @foreach{ rule : node.rules }rule : @{rule.name}
+                @end{}
+    @end{}    
+
+============== Execution Log ==================
+    @foreach{msg : session.log}@{msg}
+    @end{}                          
+ at end{}    
+    
+    
+
+
+    
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/simpletopten.mvel
___________________________________________________________________
Name: svn:executable
   + *



More information about the jboss-svn-commits mailing list