diff --git a/clc/modules/cluster-manager/src/main/java/com/eucalyptus/cluster/ClusterBuilder.java b/clc/modules/cluster-manager/src/main/java/com/eucalyptus/cluster/ClusterBuilder.java index 4a87f2ae670..c91201c3c56 100644 --- a/clc/modules/cluster-manager/src/main/java/com/eucalyptus/cluster/ClusterBuilder.java +++ b/clc/modules/cluster-manager/src/main/java/com/eucalyptus/cluster/ClusterBuilder.java @@ -14,6 +14,7 @@ import com.eucalyptus.component.ServiceConfiguration; import com.eucalyptus.component.ServiceConfigurations; import com.eucalyptus.component.ServiceRegistrationException; +import com.eucalyptus.component.id.ClusterController; import com.eucalyptus.component.id.Eucalyptus; import com.eucalyptus.config.ClusterConfiguration; import com.eucalyptus.config.DeregisterClusterType; @@ -28,7 +29,7 @@ import com.eucalyptus.scripting.groovy.GroovyUtil; import com.eucalyptus.system.SubDirectory; -@DiscoverableServiceBuilder( com.eucalyptus.component.id.ClusterController.class ) +@DiscoverableServiceBuilder( ClusterController.class ) @Handles( { RegisterClusterType.class, DeregisterClusterType.class, DescribeClustersType.class, ClusterConfiguration.class, ModifyClusterAttributeType.class } ) public class ClusterBuilder extends DatabaseServiceBuilder { static Logger LOG = Logger.getLogger( ClusterBuilder.class ); @@ -84,7 +85,7 @@ public ClusterConfiguration newInstance( String partition, String name, String h @Override public Component getComponent( ) { - return Components.lookup( com.eucalyptus.component.id.ClusterController.class ); + return Components.lookup( ClusterController.class ); } @Override diff --git a/clc/modules/msgs/src/main/java/com/eucalyptus/context/Contexts.java b/clc/modules/msgs/src/main/java/com/eucalyptus/context/Contexts.java index 3c887c22934..e5040faa36d 100644 --- a/clc/modules/msgs/src/main/java/com/eucalyptus/context/Contexts.java +++ b/clc/modules/msgs/src/main/java/com/eucalyptus/context/Contexts.java @@ -20,6 +20,10 @@ public class Contexts { private static ConcurrentMap uuidContexts = new ConcurrentHashMap( MAX, THRESHOLD, CONCUR ); private static ConcurrentMap channelContexts = new ConcurrentHashMap( MAX, THRESHOLD, CONCUR ); + static boolean hasOutstandingRequests( ) { + return uuidContexts.keySet( ).size( ) > 0; + } + public static Context create( MappingHttpRequest request, Channel channel ) { Context ctx = new Context( request, channel ); request.setCorrelationId( ctx.getCorrelationId( ) ); diff --git a/clc/modules/msgs/src/main/java/com/eucalyptus/context/ServiceContextManager.java b/clc/modules/msgs/src/main/java/com/eucalyptus/context/ServiceContextManager.java index 17dc65ebde0..c3ab5bc63a8 100644 --- a/clc/modules/msgs/src/main/java/com/eucalyptus/context/ServiceContextManager.java +++ b/clc/modules/msgs/src/main/java/com/eucalyptus/context/ServiceContextManager.java @@ -70,6 +70,7 @@ import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; @@ -129,7 +130,7 @@ public void fireEvent( Event event ) { doUpdate( ); } } - + private Future doUpdate( ) { if ( Bootstrap.isFinished( ) && this.canHasWrite.tryLock( ) ) { try { @@ -145,11 +146,13 @@ public void run( ) { } } } ); - } + } if ( this.shouldReload( ) ) { this.pendingCount.incrementAndGet( ); } - return ret != null ? ret : Futures.predestinedFuture( null ); + return ret != null + ? ret + : Futures.predestinedFuture( null ); } finally { this.canHasWrite.unlock( ); } @@ -171,18 +174,18 @@ private boolean shouldReload( ) { return false; } } - + public static final void restartSync( ) { singleton.pendingCount.incrementAndGet( ); try { singleton.doUpdate( ).get( ); } catch ( InterruptedException ex ) { - LOG.error( ex , ex ); + LOG.error( ex, ex ); } catch ( ExecutionException ex ) { - LOG.error( ex , ex ); + LOG.error( ex, ex ); } } - + public static final void restart( ) { singleton.pendingCount.incrementAndGet( ); } @@ -297,6 +300,13 @@ private void stop( ) { try { if ( this.context != null ) { try { + for ( int i = 0; i < 10 && Contexts.hasOutstandingRequests( ); i++ ) { + try { + TimeUnit.SECONDS.sleep( 1 ); + } catch ( InterruptedException ex ) { + Thread.currentThread( ).interrupt( ); + } + } this.context.stop( ); this.context.dispose( ); } catch ( MuleException ex ) {