in spring-taskqueue/src/main/java/org/apache/archiva/redback/components/taskqueue/execution/ThreadedTaskQueueExecutor.java [148:208]
private void waitForTask( Task task, Future future )
throws ExecutionException
{
boolean stop = false;
while ( !stop )
{
try
{
if ( task.getMaxExecutionTime() == 0 )
{
logger.debug( "Waiting indefinitely for task to complete" );
future.get();
return;
}
else
{
logger.debug( "Waiting at most {} ms for task completion", task.getMaxExecutionTime() );
future.get( task.getMaxExecutionTime(), TimeUnit.MILLISECONDS );
logger.debug( "Task completed within {} ms", task.getMaxExecutionTime() );
return;
}
}
catch ( InterruptedException e )
{
switch ( command )
{
case SHUTDOWN:
{
logger.info( "Shutdown command received. Cancelling task." );
cancel( future );
return;
}
case CANCEL_TASK:
{
command = 0;
logger.info( "Cancelling task" );
cancel( future );
return;
}
default:
// when can this thread be interrupted, and should we ignore it if shutdown = false?
logger.warn( "Interrupted while waiting for task to complete; ignoring", e );
break;
}
}
catch ( TimeoutException e )
{
logger.warn( "Task {} didn't complete within time, cancelling it.", task );
cancel( future );
return;
}
catch ( CancellationException e )
{
logger.warn( "The task was cancelled", e );
return;
}
}
}