Author: degenaro
Date: Sun Nov 2 12:33:54 2014
New Revision: 1636121
URL: http://svn.apache.org/r1636121
Log:
UIMA-4069 Redesign of JD toward the main goal of classpath separation for
container (system) code.
Provide JUnit tests for preemption events.
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestDispatcher.java
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestWiFsm.java
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestDispatcher.java
URL:
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestDispatcher.java?rev=1636121&r1=1636120&r2=1636121&view=diff
==============================================================================
---
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestDispatcher.java
(original)
+++
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestDispatcher.java
Sun Nov 2 12:33:54 2014
@@ -23,10 +23,13 @@ import static org.junit.Assert.fail;
import java.io.File;
import java.net.URL;
+import java.util.Random;
import org.apache.uima.ducc.container.jd.JobDriverCommon;
import org.apache.uima.ducc.container.jd.dispatch.Dispatcher;
import org.apache.uima.ducc.container.jd.mh.iface.IOperatingInfo;
+import org.apache.uima.ducc.container.jd.mh.iface.IProcessInfo;
+import org.apache.uima.ducc.container.jd.mh.impl.ProcessInfo;
import org.apache.uima.ducc.container.jd.test.helper.ThreadInfo;
import org.apache.uima.ducc.container.jd.test.helper.ThreadInfoFactory;
import org.apache.uima.ducc.container.net.iface.IMetaCas;
@@ -99,13 +102,15 @@ public class TestDispatcher {
dispatcher.handleMetaCasTransation(trans);
IMetaCas metaCas = trans.getMetaCas();
if(metaCas != null) {
- String seqNo = ""+reqNo;
- debug("system key:"+metaCas.getSystemKey());
- assertTrue(metaCas.getSystemKey().equals(seqNo));
- asExpected("system key == "+seqNo);
- debug("user key:"+metaCas.getUserKey());
- assertTrue(metaCas.getUserKey().equals(seqNo));
- asExpected("user key == "+seqNo);
+ if(reqNo > 0) {
+ String seqNo = ""+reqNo;
+ debug("system key:"+metaCas.getSystemKey());
+
assertTrue(metaCas.getSystemKey().equals(seqNo));
+ asExpected("system key == "+seqNo);
+ debug("user key:"+metaCas.getUserKey());
+ assertTrue(metaCas.getUserKey().equals(seqNo));
+ asExpected("user key == "+seqNo);
+ }
}
else {
debug("metaCas is null");
@@ -142,6 +147,8 @@ public class TestDispatcher {
"/xstream-1.3.1.jar"
};
+ // single node:pid:tid
+
@Test
public void test_01() {
try {
@@ -180,6 +187,8 @@ public class TestDispatcher {
}
}
+ // multiple node:pid:tid
+
@Test
public void test_02() {
try {
@@ -219,4 +228,66 @@ public class TestDispatcher {
fail("Exception");
}
}
+
+ // multiple node:pid:tid with preemptions
+
+ @Test
+ public void test_03() {
+ try {
+ URL urlXml = this.getClass().getResource("/CR100.xml");
+ File file = new File(urlXml.getFile());
+ String crXml = file.getAbsolutePath();
+ String crCfg = null;
+ JobDriverCommon.setInstance(jarList260, crXml, crCfg);
+ int size =
JobDriverCommon.getInstance().getMap().size();
+ debug("map size:"+size);
+ Dispatcher dispatcher = new Dispatcher();
+ ThreadInfoFactory tif = new ThreadInfoFactory(2,2,2);
+ ThreadInfo ti = tif.getRandom();
+ debug("random:"+ti.toKey());
+ int casNo = -1;
+ IMetaCas metaCasPrevious = null;
+ IMetaCas metaCas =
transGet(dispatcher,ti.getNode(),ti.getPid(),ti.getTid(),casNo);
+ assertTrue(metaCas != null);
+ while(metaCas != null) {
+ randomPreempt(dispatcher,ti);
+
transAck(dispatcher,ti.getNode(),ti.getPid(),ti.getTid(),casNo);
+ randomPreempt(dispatcher,ti);
+
transEnd(dispatcher,ti.getNode(),ti.getPid(),ti.getTid(),casNo);
+ randomPreempt(dispatcher,ti);
+ casNo--;
+ metaCasPrevious = metaCas;
+ assertTrue(metaCasPrevious != null);
+ ti = tif.getRandom();
+ debug("random:"+ti.toKey());
+ metaCas =
transGet(dispatcher,ti.getNode(),ti.getPid(),ti.getTid(),casNo);
+ }
+
assertTrue(metaCasPrevious.getSystemKey().equals("100"));
+ asExpected("CASes processed count == 100");
+ IOperatingInfo oi = dispatcher.handleGetOperatingInfo();
+ assertTrue(oi.getWorkItemCrFetches() == 100);
+ asExpected("CASes fetched count == 100");
+ assertTrue(oi.getWorkItemPreemptions() ==
expectedPremptionsTest03);
+ asExpected("CASes preempted count ==
"+expectedPremptionsTest03);
+ }
+ catch(Exception e) {
+ e.printStackTrace();
+ fail("Exception");
+ }
+ }
+
+ private long seedTest03 = 1;
+ private Random randomTest03 = new Random(seedTest03);
+ private long pctTest03 = 15;
+
+ private long expectedPremptionsTest03 = 52;
+
+ private void randomPreempt(Dispatcher dispatcher, ThreadInfo ti) {
+ int n = randomTest03.nextInt(100);
+ if(n < pctTest03) {
+ IProcessInfo processInfo = new
ProcessInfo(ti.getNode(),ti.getPid());
+ dispatcher.handlePreemptProcess(processInfo);
+ }
+
+ }
}
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java
URL:
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java?rev=1636121&r1=1636120&r2=1636121&view=diff
==============================================================================
---
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java
(original)
+++
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java
Sun Nov 2 12:33:54 2014
@@ -24,11 +24,13 @@ import static org.junit.Assert.fail;
import java.io.File;
import java.net.URL;
+import org.apache.uima.ducc.container.jd.CasManagerStats.RetryReason;
import org.apache.uima.ducc.container.jd.JobDriverCasManager;
import org.apache.uima.ducc.container.jd.JobDriverException;
import org.apache.uima.ducc.container.jd.classload.JobDriverCollectionReader;
import org.apache.uima.ducc.container.jd.dispatch.RemoteWorkerIdentity;
import org.apache.uima.ducc.container.jd.mh.impl.OperatingInfo;
+import org.apache.uima.ducc.container.net.iface.IMetaCas;
import org.apache.uima.ducc.container.net.impl.MetaCas;
import org.junit.After;
import org.junit.AfterClass;
@@ -348,11 +350,11 @@ public class TestSuite {
JobDriverCasManager jdcm = new
JobDriverCasManager(jarList, crXml, crCfg);
int total = jdcm.getCasManagerStats().getCrTotal();
assertTrue(total == 100);
- MetaCas metaCas = jdcm.getMetaCas();
+ IMetaCas metaCas = jdcm.getMetaCas();
int retrys = 3;
while(metaCas != null) {
if(jdcm.getCasManagerStats().getRetryQueuePuts() < retrys) {
- jdcm.putMetaCas(metaCas);
+ jdcm.putMetaCas(metaCas,
RetryReason.ProcessPreempt);
}
metaCas = jdcm.getMetaCas();
}
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestWiFsm.java
URL:
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestWiFsm.java?rev=1636121&r1=1636120&r2=1636121&view=diff
==============================================================================
---
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestWiFsm.java
(original)
+++
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestWiFsm.java
Sun Nov 2 12:33:54 2014
@@ -225,4 +225,64 @@ public class TestWiFsm {
fail("Exception");
}
}
+
+
+ @Test
+ public void test_06() {
+ try {
+ WiFsm wiFsm = new WiFsm();
+ Object actionData = null;
+
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Start.getName()));
+ asExpected("state == "+WiFsm.Start.getName());
+ wiFsm.transition(WiFsm.Process_Preempt, actionData);
+
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Start.getName()));
+ //
+ wiFsm.transition(WiFsm.Get_Request, actionData);
+
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Get_Pending.getName()));
+ wiFsm.transition(WiFsm.Process_Preempt, actionData);
+
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Start.getName()));
+ //
+ wiFsm.transition(WiFsm.Get_Request, actionData);
+
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Get_Pending.getName()));
+ asExpected("state == "+WiFsm.Get_Pending.getName());
+ wiFsm.transition(WiFsm.CAS_Available, actionData);
+
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.CAS_Send.getName()));
+ asExpected("state == "+WiFsm.CAS_Send.getName());
+ wiFsm.transition(WiFsm.Process_Preempt, actionData);
+
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Start.getName()));
+ //
+ wiFsm.transition(WiFsm.Get_Request, actionData);
+
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Get_Pending.getName()));
+ asExpected("state == "+WiFsm.Get_Pending.getName());
+ wiFsm.transition(WiFsm.CAS_Available, actionData);
+
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.CAS_Send.getName()));
+ asExpected("state == "+WiFsm.CAS_Send.getName());
+ wiFsm.transition(WiFsm.Ack_Request, actionData);
+
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.CAS_Active.getName()));
+ asExpected("state == "+WiFsm.CAS_Active.getName());
+ wiFsm.transition(WiFsm.Process_Preempt, actionData);
+
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Start.getName()));
+ //
+
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Start.getName()));
+ asExpected("state == "+WiFsm.Start.getName());
+ wiFsm.transition(WiFsm.Get_Request, actionData);
+
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Get_Pending.getName()));
+ asExpected("state == "+WiFsm.Get_Pending.getName());
+ wiFsm.transition(WiFsm.CAS_Available, actionData);
+
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.CAS_Send.getName()));
+ asExpected("state == "+WiFsm.CAS_Send.getName());
+ wiFsm.transition(WiFsm.Ack_Request, actionData);
+
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.CAS_Active.getName()));
+ asExpected("state == "+WiFsm.CAS_Active.getName());
+ wiFsm.transition(WiFsm.End_Request, actionData);
+
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Start.getName()));
+ asExpected("state == "+WiFsm.Start.getName());
+ wiFsm.transition(WiFsm.Process_Preempt, actionData);
+
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Start.getName()));
+ }
+ catch(Exception e) {
+ e.printStackTrace();
+ fail("Exception");
+ }
+ }
}