You are viewing a plain text version of this content. The canonical link for it is here.
Posted to droids-commits@incubator.apache.org by ry...@apache.org on 2009/01/16 06:19:50 UTC
svn commit: r734918 - in /incubator/droids/trunk:
droids-core/src/main/java/org/apache/droids/api/
droids-core/src/main/java/org/apache/droids/impl/ droids-wicket/
droids-wicket/src/main/java/org/apache/droids/wicket/component/
Author: ryan
Date: Thu Jan 15 22:19:50 2009
New Revision: 734918
URL: http://svn.apache.org/viewvc?rev=734918&view=rev
Log:
use the pool for completedTasks and currentTasks rather then keeping a parallel Map
Modified:
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/api/TaskMaster.java
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/impl/MultiThreadedTaskMaster.java
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/impl/SequentialTaskMaster.java
incubator/droids/trunk/droids-wicket/pom.xml
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.html
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.java
Modified: incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/api/TaskMaster.java
URL: http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/api/TaskMaster.java?rev=734918&r1=734917&r2=734918&view=diff
==============================================================================
--- incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/api/TaskMaster.java (original)
+++ incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/api/TaskMaster.java Thu Jan 15 22:19:50 2009
@@ -43,7 +43,7 @@
ExecutionState getExecutionState();
- int getCompletedTasks();
+ long getCompletedTasks();
T getLastCompletedTask();
Modified: incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/impl/MultiThreadedTaskMaster.java
URL: http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/impl/MultiThreadedTaskMaster.java?rev=734918&r1=734917&r2=734918&view=diff
==============================================================================
--- incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/impl/MultiThreadedTaskMaster.java (original)
+++ incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/impl/MultiThreadedTaskMaster.java Thu Jan 15 22:19:50 2009
@@ -18,8 +18,8 @@
import java.util.Date;
import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
@@ -41,7 +41,6 @@
private static final long KEEP_ALIVE = 50000L;
private PausableThreadPoolExecutor pool = null;
- private ConcurrentHashMap<Long, WorkerRunner> runningWorker = null;
private int maxThreads = 0;
private TaskQueue<T> queue = null;
private Droid<T> droid = null;
@@ -49,7 +48,6 @@
private Date startedWorking = null;
private Date finishedWorking = null;
- private int completedTask = 0;
private T lastCompletedTask = null;
private ExecutionState state = ExecutionState.INITALIZED;
@@ -73,7 +71,6 @@
// start the pool
this.pool = new PausableThreadPoolExecutor(n, n, KEEP_ALIVE,
TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>() );
- this.runningWorker = new ConcurrentHashMap<Long, WorkerRunner>();
startWorkers();
log.info("Finshed invocation, waiting for workers to finish.");
@@ -83,16 +80,10 @@
private void finishedWorker(WorkerRunner worker)
{
synchronized (this) {
- long id = worker.getId();
- if( runningWorker.remove(id) == null ) {
- throw new RuntimeException("should remove something!");
- }
lastCompletedTask = worker.task;
-
- //int y = worker.getDepth() + 1;
pool.remove(worker);
if (log.isDebugEnabled()) {
- log.debug("Worker '" + id + "' has finished.");
+ log.debug("Worker '" + worker.task.getId() + "' has finished.");
}
boolean terminate = false;
@@ -114,7 +105,7 @@
}
}
- if (terminate || (runningWorker.size() == 0 & !queue.hasNext())) {
+ if (terminate || (pool.getActiveCount() == 0 && !queue.hasNext()) ) {
shutdownAndAwaitTermination();
long elapsed = System.currentTimeMillis() - startedWorking.getTime();
@@ -127,7 +118,6 @@
} else if (queue.hasNext()) {
startWorkers();
}
- completedTask++;
}
}
@@ -138,23 +128,27 @@
*/
private void startWorkers(){
- while( queue.hasNext() ) {
- // The getActiveCount is often wrong for only a single thread!
- // the javadocs say the number is approxiate, so in the case we only
- // see one active worker, we will assume there are none...
- int activeWorkers = pool.getActiveCount();
- if( activeWorkers == 1 && runningWorker.isEmpty() ) {
- activeWorkers = 0;
- }
- if( activeWorkers >= getMaxThreads() ) {
- return; // don't make a new runner...
- }
- WorkerRunner runner = new WorkerRunner();
- runningWorker.put(runner.getId(), runner);
- if (log.isDebugEnabled()) {
- log.debug("Starting worker '" + runner.getId() + "'");
+ try {
+ while( queue.hasNext() ) {
+ // The getActiveCount is often wrong for only a single thread!
+ // the javadocs say the number is approxiate, so in the case we only
+ // see one active worker, we will assume there are none...
+ int activeWorkers = pool.getActiveCount();
+ if( activeWorkers == 1 ) { //&& runningWorker.isEmpty() ) {
+ activeWorkers = 0;
+ }
+ if( activeWorkers >= getMaxThreads() ) {
+ return; // don't make a new runner...
+ }
+ WorkerRunner runner = new WorkerRunner();
+ if (log.isDebugEnabled()) {
+ log.debug("Starting worker '" + runner + "'");
+ }
+ pool.execute(runner);
}
- pool.execute(runner);
+ }
+ catch( RejectedExecutionException ex ) {
+ log.info( "humm", ex );
}
}
@@ -179,8 +173,8 @@
*/
public void setMaxThreads(int maxThreads) {
if( pool != null && maxThreads != this.maxThreads ) {
+ pool.setMaximumPoolSize( maxThreads );
pool.setCorePoolSize( maxThreads );
-
if( state == ExecutionState.RUNNING ) {
startWorkers(); // fill up the queue with new workers...
}
@@ -231,7 +225,7 @@
/**
* Wrapper to call finishedWorker() after
*/
- class WorkerRunner extends Thread {
+ class WorkerRunner implements Runnable {
Date startTime;
T task;
@@ -278,8 +272,8 @@
}
}
- public int getCompletedTasks() {
- return completedTask;
+ public long getCompletedTasks() {
+ return (pool==null) ? 0 : pool.getCompletedTaskCount();
}
public Date getFinishedWorking() {
@@ -298,7 +292,7 @@
pool.awaitTermination(timeout, unit);
}
-
+
/**
* "pause" support
*/
@@ -315,6 +309,7 @@
super( corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue );
}
+ @Override
protected void beforeExecute(Thread t, Runnable r) {
super.beforeExecute(t, r);
pauseLock.lock();
Modified: incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/impl/SequentialTaskMaster.java
URL: http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/impl/SequentialTaskMaster.java?rev=734918&r1=734917&r2=734918&view=diff
==============================================================================
--- incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/impl/SequentialTaskMaster.java (original)
+++ incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/impl/SequentialTaskMaster.java Thu Jan 15 22:19:50 2009
@@ -130,7 +130,7 @@
}
- public int getCompletedTasks() {
+ public long getCompletedTasks() {
return completedTask;
}
Modified: incubator/droids/trunk/droids-wicket/pom.xml
URL: http://svn.apache.org/viewvc/incubator/droids/trunk/droids-wicket/pom.xml?rev=734918&r1=734917&r2=734918&view=diff
==============================================================================
--- incubator/droids/trunk/droids-wicket/pom.xml (original)
+++ incubator/droids/trunk/droids-wicket/pom.xml Thu Jan 15 22:19:50 2009
@@ -51,6 +51,12 @@
<dependency>
<groupId>org.apache.wicket</groupId>
+ <artifactId>wicket-extensions</artifactId>
+ <version>${wicket.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.wicket</groupId>
<artifactId>wicket-spring</artifactId>
<version>${wicket.version}</version>
<type>jar</type>
Modified: incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.html
URL: http://svn.apache.org/viewvc/incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.html?rev=734918&r1=734917&r2=734918&view=diff
==============================================================================
--- incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.html (original)
+++ incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.html Thu Jan 15 22:19:50 2009
@@ -18,6 +18,22 @@
</ul>
+<div wicket:id="taskMaster">
+ <h3>Workers:</h3>
+ <!--
+ <ul wicket:id="workers">
+ <li wicket:id="task">
+ [<span wicket:id="time">00,00,10.xx</span>]
+ <span wicket:id="text">Task 1 todo</span>
+ <a href="#">[watch]</a>
+ </li>
+ </ul>
+ -->
+ <p wicket:id="threads">
+ Concurrent threads: <span wicket:id="count">count</span>
+ </p>
+</div>
+
<h3>Queue:</h3>
<ul wicket:id="queue">
Modified: incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.java
URL: http://svn.apache.org/viewvc/incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.java?rev=734918&r1=734917&r2=734918&view=diff
==============================================================================
--- incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.java (original)
+++ incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.java Thu Jan 15 22:19:50 2009
@@ -18,6 +18,7 @@
import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
@@ -27,8 +28,10 @@
import org.apache.droids.api.Task;
import org.apache.droids.api.TaskMaster;
import org.apache.droids.api.TaskQueue;
+import org.apache.droids.impl.MultiThreadedTaskMaster;
import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableChoiceLabel;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
@@ -36,6 +39,7 @@
import org.apache.wicket.markup.repeater.RefreshingView;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.util.lang.Bytes;
import org.apache.wicket.util.time.Duration;
@@ -51,7 +55,7 @@
TaskQueue taskQueue;
@SpringBean( name="taskMaster" )
- TaskMaster taskMaster;
+ MultiThreadedTaskMaster taskMaster;
public DroidPanel(String id) {
super(id);
@@ -86,9 +90,9 @@
}
}));
- info.add( new Label( "completedTasks", new AbstractReadOnlyModel<Integer>() {
+ info.add( new Label( "completedTasks", new AbstractReadOnlyModel<Long>() {
@Override
- public Integer getObject() {
+ public Long getObject() {
return droid.getTaskMaster().getCompletedTasks();
}
}));
@@ -122,9 +126,18 @@
classinfo.add( new Label( "taskMaster", taskMaster.toString() ) );
add( classinfo );
- // QUEUE
+ // TASK MASTER
+ WebMarkupContainer tmDIV = new WebMarkupContainer( "taskMaster" );
+ WebMarkupContainer threads = new WebMarkupContainer( "threads" );
+ threads.add( new AjaxEditableChoiceLabel<Integer>("count",
+ new PropertyModel<Integer>( taskMaster, "maxThreads" )
+ , Arrays.asList( 1,2,3,4,5,6,7,8 ) ) );
+ tmDIV.add( threads );
+ add( tmDIV );
-
+
+
+ // QUEUE
final WebMarkupContainer queueDIV = new WebMarkupContainer( "queue" );
queueDIV.add( new RefreshingView<Task>("task")
{