You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by gi...@apache.org on 2004/11/06 23:43:55 UTC
svn commit: rev 56783 - cocoon/trunk/src/java/org/apache/cocoon/components/thread
Author: giacomo
Date: Sat Nov 6 14:43:55 2004
New Revision: 56783
Modified:
cocoon/trunk/src/java/org/apache/cocoon/components/thread/DefaultRunnableManager.java
cocoon/trunk/src/java/org/apache/cocoon/components/thread/DefaultThreadPool.java
Log:
first bug fixes
Modified: cocoon/trunk/src/java/org/apache/cocoon/components/thread/DefaultRunnableManager.java
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/thread/DefaultRunnableManager.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/thread/DefaultRunnableManager.java Sat Nov 6 14:43:55 2004
@@ -112,7 +112,7 @@
* Sorted set of <code>ExecutionInfo</code> instances, based on their next
* execution time.
*/
- protected SortedSet m_executionInfo = new TreeSet( );
+ protected SortedSet m_commandStack = new TreeSet( );
/** The managed thread pools */
final Map m_pools = new HashMap( );
@@ -146,44 +146,11 @@
}
final Configuration [] threadpools =
- config.getChildren( "thread-pools" );
+ config.getChild( "thread-pools" ).getChildren( "thread-pool" );
for( int i = 0; i < threadpools.length; i++ )
{
final DefaultThreadPool pool = configThreadPool( threadpools[ i ] );
-
- if( getLogger( ).isInfoEnabled( ) )
- {
- if( pool.isQueued( ) )
- {
- final StringBuffer msg = new StringBuffer( );
- msg.append( "ThreadPool named \"" ).append( pool.getName( ) );
- msg.append( "\" created with queue-size=" );
- msg.append( pool.getQueueSize( ) );
- msg.append( ",max-pool-size=" ).append( pool.getMaximumPoolSize( ) );
- msg.append( ",min-pool-size=" ).append( pool.getMinimumPoolSize( ) );
- msg.append( ",priority=" ).append( pool.getPriority( ) );
- msg.append( ",isDaemon=" ).append( ( (ThreadFactory)pool.getThreadFactory( ) ).isDaemon( ) );
- msg.append( ",keep-alive-time-ms=" ).append( pool.getKeepAliveTime( ) );
- msg.append( ",block-policy=\"" ).append( pool.getBlockPolicy( ) );
- msg.append( "\",shutdown-wait-time-ms=" ).append( pool.getShutdownWaitTimeMs( ) );
- getLogger( ).info( msg.toString( ) );
- }
- else
- {
- final StringBuffer msg = new StringBuffer( );
- msg.append( "ThreadPool named \"" ).append( pool.getName( ) );
- msg.append( "\" created with no queue,max-pool-size=" )
- .append( pool.getMaximumPoolSize( ) );
- msg.append( ",min-pool-size=" ).append( pool.getMinimumPoolSize( ) );
- msg.append( ",priority=" ).append( pool.getPriority( ) );
- msg.append( ",isDaemon=" ).append( ( (ThreadFactory)pool.getThreadFactory( ) ).isDaemon( ) );
- msg.append( ",keep-alive-time-ms=" ).append( pool.getKeepAliveTime( ) );
- msg.append( ",block-policy=" ).append( pool.getBlockPolicy( ) );
- msg.append( ",shutdown-wait-time-ms=" ).append( pool.getShutdownWaitTimeMs( ) );
- getLogger( ).info( msg.toString( ) );
- }
- }
}
// Check if a "default" pool has been created
@@ -436,20 +403,20 @@
while( m_keepRunning )
{
- synchronized( m_executionInfo )
+ synchronized( m_commandStack )
{
try
{
- if( m_executionInfo.size( ) > 0 )
+ if( m_commandStack.size( ) > 0 )
{
final ExecutionInfo info =
- (ExecutionInfo)m_executionInfo.first( );
+ (ExecutionInfo)m_commandStack.first( );
final long delay =
info.m_nextRun - System.currentTimeMillis( );
if( delay > 0 )
{
- m_executionInfo.wait( delay );
+ m_commandStack.wait( delay );
}
}
else
@@ -459,7 +426,7 @@
getLogger( ).debug( "No commands available. Will just wait for one" );
}
- m_executionInfo.wait( );
+ m_commandStack.wait( );
}
}
catch( final InterruptedException ie )
@@ -472,14 +439,17 @@
if( m_keepRunning )
{
- final ExecutionInfo info =
- (ExecutionInfo)m_executionInfo.first( );
- final long delay =
- info.m_nextRun - System.currentTimeMillis( );
-
- if( delay < 0 )
+ if( m_commandStack.size( ) > 0 )
{
- info.execute( );
+ final ExecutionInfo info =
+ (ExecutionInfo)m_commandStack.first( );
+ final long delay =
+ info.m_nextRun - System.currentTimeMillis( );
+
+ if( delay < 0 )
+ {
+ info.execute( );
+ }
}
}
}
@@ -518,9 +488,9 @@
{
m_keepRunning = false;
- synchronized( m_executionInfo )
+ synchronized( m_commandStack )
{
- m_executionInfo.notifyAll( );
+ m_commandStack.notifyAll( );
}
}
@@ -547,6 +517,9 @@
}
else
{
+ getLogger( ).warn( "Unknown thread priority \"" + priority +
+ "\". Set to \"NORM\"." );
+
return Thread.NORM_PRIORITY;
}
}
@@ -566,8 +539,14 @@
final String name = config.getChild( "name" ).getValue( );
final int queueSize =
config.getChild( "queue-size" ).getValueAsInteger( DEFAULT_QUEUE_SIZE );
- final int maxPoolSize =
+ int maxPoolSize =
config.getChild( "max-pool-size" ).getValueAsInteger( DEFAULT_MAX_POOL_SIZE );
+
+ if( maxPoolSize < 0 )
+ {
+ maxPoolSize = Integer.MAX_VALUE;
+ }
+
int minPoolSize =
config.getChild( "min-pool-size" ).getValueAsInteger( DEFAULT_MIN_POOL_SIZE );
@@ -578,13 +557,27 @@
{
minPoolSize = DEFAULT_MIN_POOL_SIZE;
}
+ else if( minPoolSize < 1 )
+ {
+ getLogger( ).warn( "Config element min-pool-size < 1 for pool \"" +
+ name + "\". Set to 1" );
+ minPoolSize = 1;
+ }
final String priority =
config.getChild( "priority" ).getValue( DEFAULT_THREAD_PRIORITY );
final boolean isDaemon =
config.getChild( "daemon" ).getValueAsBoolean( DEFAULT_DAEMON_MODE );
- final long keepAliveTime =
+ long keepAliveTime =
config.getChild( "keep-alive-time-ms" ).getValueAsLong( DEFAULT_KEEP_ALIVE_TIME );
+
+ if( keepAliveTime < 0 )
+ {
+ getLogger( ).warn( "Config element keep-alive-time-ms < 0 for pool \"" +
+ name + "\". Set to 1000" );
+ keepAliveTime = 1000;
+ }
+
final String blockPolicy =
config.getChild( "block-policy" ).getValue( DefaultThreadPool.POLICY_DEFAULT );
final boolean shutdownGraceful =
@@ -668,9 +661,51 @@
m_pools.put( name, pool );
}
+ printPoolInfo( pool );
+
return pool;
}
+ /**
+ * DOCUMENT ME!
+ *
+ * @param pool DOCUMENT ME!
+ */
+ private void printPoolInfo( final DefaultThreadPool pool )
+ {
+ if( getLogger( ).isInfoEnabled( ) )
+ {
+ if( pool.isQueued( ) )
+ {
+ final StringBuffer msg = new StringBuffer( );
+ msg.append( "ThreadPool named \"" ).append( pool.getName( ) );
+ msg.append( "\" created with maximum queue-size=" );
+ msg.append( pool.getMaxQueueSize( ) );
+ msg.append( ",max-pool-size=" ).append( pool.getMaximumPoolSize( ) );
+ msg.append( ",min-pool-size=" ).append( pool.getMinimumPoolSize( ) );
+ msg.append( ",priority=" ).append( pool.getPriority( ) );
+ msg.append( ",isDaemon=" ).append( ( (ThreadFactory)pool.getThreadFactory( ) ).isDaemon( ) );
+ msg.append( ",keep-alive-time-ms=" ).append( pool.getKeepAliveTime( ) );
+ msg.append( ",block-policy=\"" ).append( pool.getBlockPolicy( ) );
+ msg.append( "\",shutdown-wait-time-ms=" ).append( pool.getShutdownWaitTimeMs( ) );
+ getLogger( ).info( msg.toString( ) );
+ }
+ else
+ {
+ final StringBuffer msg = new StringBuffer( );
+ msg.append( "ThreadPool named \"" ).append( pool.getName( ) );
+ msg.append( "\" created with no queue,max-pool-size=" ).append( pool.getMaximumPoolSize( ) );
+ msg.append( ",min-pool-size=" ).append( pool.getMinimumPoolSize( ) );
+ msg.append( ",priority=" ).append( pool.getPriority( ) );
+ msg.append( ",isDaemon=" ).append( ( (ThreadFactory)pool.getThreadFactory( ) ).isDaemon( ) );
+ msg.append( ",keep-alive-time-ms=" ).append( pool.getKeepAliveTime( ) );
+ msg.append( ",block-policy=" ).append( pool.getBlockPolicy( ) );
+ msg.append( ",shutdown-wait-time-ms=" ).append( pool.getShutdownWaitTimeMs( ) );
+ getLogger( ).info( msg.toString( ) );
+ }
+ }
+ }
+
//~ Inner Classes ----------------------------------------------------------
/**
@@ -726,10 +761,10 @@
m_logger = logger;
m_nextRun = System.currentTimeMillis( ) + delay;
- synchronized( m_executionInfo )
+ synchronized( m_commandStack )
{
- m_executionInfo.add( this );
- m_executionInfo.notifyAll( );
+ m_commandStack.add( this );
+ m_commandStack.notifyAll( );
}
}
@@ -762,16 +797,16 @@
",interval=" + m_interval );
}
- synchronized( m_executionInfo )
+ synchronized( m_commandStack )
{
- m_executionInfo.remove( this );
+ m_commandStack.remove( this );
m_nextRun = ( ( m_interval > 0 )
? ( System.currentTimeMillis( ) + m_interval ) : 0 );
if( m_nextRun > 0 )
{
- m_executionInfo.add( this );
- m_executionInfo.notifyAll( );
+ m_commandStack.add( this );
+ m_commandStack.notifyAll( );
}
}
Modified: cocoon/trunk/src/java/org/apache/cocoon/components/thread/DefaultThreadPool.java
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/thread/DefaultThreadPool.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/thread/DefaultThreadPool.java Sat Nov 6 14:43:55 2004
@@ -27,7 +27,7 @@
* configuration into the <code>configure</code> method.
*
* @author <a href="mailto:giacomo.at.apache.org">Giacomo Pati</a>
- * @version CVS $Id: DefaultThreadPool.java,v 1.5 2004/06/23 20:25:43 giacomo Exp $
+ * @version CVS $Id$
*/
public class DefaultThreadPool
extends PooledExecutor
@@ -103,6 +103,18 @@
/**
* DOCUMENT ME!
*
+ * @return maximum size of the queue (0 if isQueued() == false)
+ *
+ * @see org.apache.cocoon.components.thread.ThreadPool#getQueueSize()
+ */
+ public int getMaxQueueSize( )
+ {
+ return ( ( m_queueSize < 0 ) ? Integer.MAX_VALUE : m_queueSize );
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
* @return size of queue (0 if isQueued() == false)
*
* @see org.apache.cocoon.components.thread.ThreadPool#getQueueSize()
@@ -123,8 +135,8 @@
/**
* Get hte priority used to create Threads
*
- * @return {@link Thread#MIN_PRIORITY}, {@link
- * Thread#NORM_PRIORITY}, or {@link Thread#MAX_PRIORITY}
+ * @return {@link Thread#MIN_PRIORITY}, {@link Thread#NORM_PRIORITY}, or
+ * {@link Thread#MAX_PRIORITY}
*/
public int getPriority( )
{
@@ -134,7 +146,7 @@
/**
* DOCUMENT ME!
*
- * @return size of queue (0 if isQueued() == false)
+ * @return current size of the queue (0 if isQueued() == false)
*
* @see org.apache.cocoon.components.thread.ThreadPool#getQueueSize()
*/
@@ -210,6 +222,8 @@
*/
void setBlockPolicy( final String blockPolicy )
{
+ m_blockPolicy = blockPolicy;
+
if( POLICY_ABORT.equalsIgnoreCase( blockPolicy ) )
{
abortWhenBlocked( );
@@ -259,6 +273,16 @@
/**
* DOCUMENT ME!
*
+ * @param priority The priority to set.
+ */
+ void setPriority( final int priority )
+ {
+ m_priority = priority;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
* @param queueSize DOCUMENT ME!
*/
void setQueue( final int queueSize )
@@ -331,13 +355,5 @@
private Logger getLogger( )
{
return m_logger;
- }
-
- /**
- * @param priority The priority to set.
- */
- void setPriority( final int priority )
- {
- m_priority = priority;
}
}