[
https://issues.jboss.org/browse/DROOLS-1362?page=com.atlassian.jira.plugi...
]
Mario Fusco resolved DROOLS-1362.
---------------------------------
Resolution: Incomplete Description
I tried different scenario (see the test cases I'm pasting below) but couldn't
find any relevant problem.
Please try with a newer version of drools and if you think that the problem is still there
feel free to reopen this ticket attaching a more complete reproducer.
{code}
@Test
public void testManyInsertWithAccumulate() throws InterruptedException {
final String drl = "package org.drools.compiler\n" +
"import " + StockTick.class.getCanonicalName() + ";\n"
+
"global java.util.List results;\n" +
"\n" +
"declare StockTick \n" +
" @role( event )\n" +
" @expires( 1m )\n" +
"end\n" +
"\n" +
"rule R when\n" +
" accumulate( StockTick( company == \"ACME\", $price :
price ) over window:time( 30s ); $avg : average($price) )\n" +
"then\n" +
" results.add( $avg );\n" +
"end\n";
final KieBase kbase =
KieBaseUtil.getKieBaseFromKieModuleFromDrl("cep-esp-test",
kieBaseTestConfiguration, drl);
final KieSession ksession = kbase.newKieSession(); //
KieSessionTestConfiguration.STATEFUL_PSEUDO.getKieSessionConfiguration(), null);
try {
List<Number> results = new ArrayList<>();
ksession.setGlobal( "results", results );
long counter = 0;
long start = System.currentTimeMillis();
while (System.currentTimeMillis() - start < 30_000L) {
ksession.insert( new StockTick( counter, "ACME", counter++ ) );
Thread.sleep( 1L );
}
long beforeFire = System.currentTimeMillis();
ksession.fireAllRules();
System.out.println("firing took " + (System.currentTimeMillis() -
beforeFire) + " msecs");
System.out.println(results);
} finally {
ksession.dispose();
}
}
@Test
public void testManyInsertWithAccumulate2() throws InterruptedException {
final String drl = "package org.drools.compiler\n" +
"import " + StockTick.class.getCanonicalName() + ";\n"
+
"global java.util.List results;\n" +
"\n" +
"declare StockTick \n" +
" @role( event )\n" +
" @expires( 1m )\n" +
"end\n" +
"\n" +
"rule R when\n" +
" accumulate( StockTick( company == \"ACME\", $price :
price ) over window:time( 30s ); $avg : average($price) )\n" +
"then\n" +
" results.add( $avg );\n" +
"end\n";
final KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl(
"some-test", KieBaseTestConfiguration.STREAM_IDENTITY, drl );
final KieSession ksession = kbase.newKieSession(); //
KieSessionTestConfiguration.STATEFUL_PSEUDO.getKieSessionConfiguration(), null);
try {
final List<Number> results = new ArrayList<>();
ksession.setGlobal( "results", results );
final ExecutorService executorService = Executors.newSingleThreadExecutor();
// executorService.submit((Runnable) ksession::fireUntilHalt);
try {
long counter = 0;
final long start = System.currentTimeMillis();
while (System.currentTimeMillis() - start < 50_000L) {
final long beforeInsert = System.currentTimeMillis();
ksession.insert( new StockTick( counter, "ACME", counter++ )
);
Thread.sleep( 1L );
final long insertTime = System.currentTimeMillis() - beforeInsert;
if ( insertTime > 2 ) {
System.out.println( "insert took " + insertTime + "
msecs" );
}
}
} finally {
// ksession.halt();
executorService.shutdownNow();
}
} finally {
ksession.dispose();
}
}
{code}
accumulate and over window:time usage will stuck drools for a while
(from minutes to hours according to number of facts)
------------------------------------------------------------------------------------------------------------------------
Key: DROOLS-1362
URL:
https://issues.jboss.org/browse/DROOLS-1362
Project: Drools
Issue Type: Bug
Affects Versions: 6.5.0.Final
Reporter: Ertugrul Akbas
Assignee: Mario Fusco
Priority: Major
Attachments: Droolslog.zip
We are testing a simple rule. The rule is:
import com.anet.correlation.*;
import java.util.*;
import com.anet.ntLog.collector.*;
import com.anet.alarm.*;
import com.anet.util.*;
import com.anet.correlation.operators.*;
import com.anet.correlation.utils.*;
declare EPSObject
@role(event)
end
rule "test"
when
Number( ) from accumulate(
generalcorrelationobject1:EPSObject(name=='ert', $temp :avg_snmptrapeps)
over window:time( 3m ),
average( $temp ) )
then
end
we are inserting facts continuously and after 3 minutes - the time which is given as
"over window:time( 3m )" -
drools stuck and then after minutes , starts to conitinue.
Not: When we test with "over window:time( 30m )" stuck 30 minutes later or When
we test with "over window:time( 10m )" stuck 10 minutes later
Any comment?
--
This message was sent by Atlassian Jira
(v7.12.1#712002)