64
64
package com.eucalyptus.ws.client;
66
66
import java.security.GeneralSecurityException;
67
import java.util.Collection;
68
import java.util.Comparator;
71
import java.util.SortedMap;
72
import java.util.Map.Entry;
67
import java.util.List;
73
68
import java.util.concurrent.ConcurrentMap;
74
69
import java.util.concurrent.Executors;
76
70
import org.apache.log4j.Logger;
77
71
import org.jboss.netty.channel.ChannelDownstreamHandler;
78
72
import org.jboss.netty.channel.ChannelEvent;
88
82
import org.jboss.netty.handler.codec.http.HttpRequestEncoder;
89
83
import org.jboss.netty.handler.codec.http.HttpResponseDecoder;
90
84
import org.jboss.netty.handler.stream.ChunkedWriteHandler;
85
import com.eucalyptus.binding.BindingManager;
86
import com.eucalyptus.bootstrap.Bootstrap;
92
87
import com.eucalyptus.bootstrap.Bootstrapper;
93
88
import com.eucalyptus.bootstrap.Component;
94
import com.eucalyptus.bootstrap.Depends;
89
import com.eucalyptus.bootstrap.DependsLocal;
95
90
import com.eucalyptus.bootstrap.Provides;
96
import com.eucalyptus.bootstrap.Resource;
91
import com.eucalyptus.bootstrap.RunDuring;
92
import com.eucalyptus.bootstrap.Bootstrap.Stage;
93
import com.eucalyptus.component.ServiceConfiguration;
94
import com.eucalyptus.component.event.LifecycleEvent;
95
import com.eucalyptus.component.event.StartComponentEvent;
96
import com.eucalyptus.component.event.StopComponentEvent;
97
97
import com.eucalyptus.config.ComponentConfiguration;
98
import com.eucalyptus.config.Configuration;
98
99
import com.eucalyptus.event.ClockTick;
99
import com.eucalyptus.event.ComponentEvent;
100
100
import com.eucalyptus.event.Event;
101
101
import com.eucalyptus.event.EventListener;
102
import com.eucalyptus.event.StartComponentEvent;
103
import com.eucalyptus.event.StopComponentEvent;
104
102
import com.eucalyptus.util.LogUtil;
105
103
import com.eucalyptus.util.NetworkUtil;
106
import com.eucalyptus.ws.binding.BindingManager;
107
import com.eucalyptus.ws.client.pipeline.NioClientPipeline;
108
104
import com.eucalyptus.ws.handlers.BindingHandler;
109
105
import com.eucalyptus.ws.handlers.SoapMarshallingHandler;
110
106
import com.eucalyptus.ws.handlers.soap.AddressingHandler;
111
107
import com.eucalyptus.ws.handlers.soap.SoapHandler;
112
108
import com.eucalyptus.ws.handlers.wssecurity.InternalWsSecHandler;
109
import com.google.common.collect.Lists;
113
110
import com.google.common.collect.Maps;
114
111
import com.google.common.collect.Multimap;
115
112
import com.google.common.collect.Multimaps;
117
import edu.emory.mathcs.backport.java.util.NavigableMap;
118
import edu.emory.mathcs.backport.java.util.NavigableSet;
119
import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentSkipListMap;
120
import edu.ucsb.eucalyptus.StartupChecks;
122
@Provides( resource = Resource.RemoteConfiguration )
123
@Depends( resources = Resource.Database, local = Component.eucalyptus )
114
@Provides(Component.eucalyptus)
115
@RunDuring(Bootstrap.Stage.RemoteConfiguration)
116
@DependsLocal(Component.eucalyptus)
124
117
public class RemoteBootstrapperClient extends Bootstrapper implements ChannelPipelineFactory, EventListener {
125
118
private static Logger LOG = Logger.getLogger( RemoteBootstrapperClient.class );
126
119
private ConcurrentMap<String, HeartbeatClient> heartbeatMap;
127
private Multimap<String, ComponentConfiguration> componentMap;
120
private Multimap<String, ServiceConfiguration> componentMap;
128
121
private NioBootstrap clientBootstrap;
129
122
private ChannelFactory channelFactory;
130
123
private static RemoteBootstrapperClient client = new RemoteBootstrapperClient( );
188
public boolean load( Resource current ) throws Exception {
181
public boolean load( Stage current ) throws Exception {
193
186
public boolean start( ) throws Exception {
187
List<ServiceConfiguration> configs = Lists.newArrayList( );
188
configs.addAll( Configuration.getStorageControllerConfigurations( ) );
189
configs.addAll( Configuration.getWalrusConfigurations( ) );
190
for( ServiceConfiguration c : configs ) {
191
if( !c.isLocal( ) ) {
192
this.addRemoteComponent( c );
193
this.fireRemoteStartEvent( c );
201
203
public void fireEvent( Event event ) {
202
if ( event instanceof ComponentEvent ) {
203
ComponentEvent e = ( ComponentEvent ) event;
204
if ( !Component.walrus.equals( e.getComponent( ) ) && !Component.storage.equals( e.getComponent( ) ) ) {
204
if ( event instanceof LifecycleEvent ) {
205
LifecycleEvent e = ( LifecycleEvent ) event;
206
if ( !Component.walrus.equals( e.getPeer( ) ) && !Component.storage.equals( e.getPeer( ) ) ) {
206
208
} else if ( e.getConfiguration( ).getPort( ) < 0 ) {
209
ComponentConfiguration config = e.getConfiguration( );
211
ServiceConfiguration config = e.getConfiguration( );
210
212
if ( event instanceof StartComponentEvent ) {
211
213
if( !NetworkUtil.testLocal( e.getConfiguration( ).getHostName( ) ) ) {
212
214
this.addRemoteComponent( config );