CLOUDSTACK-1173: fix the regression caused by life-cycle management changes

This commit is contained in:
Kelven Yang 2013-02-26 11:51:03 -08:00
parent 333dd810d2
commit 3f2b771e07
9 changed files with 66 additions and 45 deletions

View File

@ -26,6 +26,7 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
@ -77,7 +78,7 @@ import com.google.gson.Gson;
* server.
*
*/
public abstract class ConsoleProxyResource extends ServerResourceBase implements
public class ConsoleProxyResource extends ServerResourceBase implements
ServerResource {
static final Logger s_logger = Logger.getLogger(ConsoleProxyResource.class);
@ -489,4 +490,26 @@ public abstract class ConsoleProxyResource extends ServerResourceBase implements
}
}
}
@Override
public void setName(String name) {
}
@Override
public void setConfigParams(Map<String, Object> params) {
}
@Override
public Map<String, Object> getConfigParams() {
return new HashMap<String, Object>();
}
@Override
public int getRunLevel() {
return 0;
}
@Override
public void setRunLevel(int level) {
}
}

View File

@ -74,6 +74,7 @@ import com.cloud.utils.DateUtil;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.Profiler;
import com.cloud.utils.PropertiesUtil;
import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.component.ComponentLifecycle;
import com.cloud.utils.component.ManagerBase;
import com.cloud.utils.concurrency.NamedThreadFactory;
@ -364,11 +365,11 @@ public class ClusterManagerImpl extends ManagerBase implements ClusterManager {
try {
// schedule a scan task immediately
if (_agentMgr instanceof ClusteredAgentManagerImpl) {
if (ComponentContext.getTargetObject(_agentMgr) instanceof ClusteredAgentManagerImpl) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("Received notification as part of addHost command to start a host scan task");
}
ClusteredAgentManagerImpl clusteredAgentMgr = (ClusteredAgentManagerImpl)_agentMgr;
ClusteredAgentManagerImpl clusteredAgentMgr = (ClusteredAgentManagerImpl)ComponentContext.getTargetObject(_agentMgr);
clusteredAgentMgr.scheduleHostScanTask();
}
} catch (Exception e) {

View File

@ -109,6 +109,7 @@ import com.cloud.user.dao.AccountDao;
import com.cloud.user.dao.UserStatisticsDao;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.component.AdapterBase;
import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.GlobalLock;
import com.cloud.utils.db.Transaction;
@ -1102,7 +1103,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
}
NetworkElement element = _networkModel.getElementImplementingProvider(providers.get(0).getName());
if (!(element instanceof IpDeployer)) {
if (!(ComponentContext.getTargetObject(element) instanceof IpDeployer)) {
s_logger.error("The firewall provider for network " + network.getName() + " don't have ability to deploy IP address!");
return null;
}

View File

@ -129,6 +129,7 @@ import com.cloud.utils.Journal;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.Pair;
import com.cloud.utils.component.AdapterBase;
import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.component.ManagerBase;
import com.cloud.utils.concurrency.NamedThreadFactory;
import com.cloud.utils.db.*;
@ -546,10 +547,10 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
}
IpDeployer deployer = null;
NetworkElement element = _networkModel.getElementImplementingProvider(provider.getName());
if (!(element instanceof IpDeployingRequester)) {
if (!(ComponentContext.getTargetObject(element) instanceof IpDeployingRequester)) {
throw new CloudRuntimeException("Element " + element + " is not a IpDeployingRequester!");
}
deployer = ((IpDeployingRequester)element).getIpDeployer(network);
deployer = ((IpDeployingRequester)ComponentContext.getTargetObject(element)).getIpDeployer(network);
if (deployer == null) {
throw new CloudRuntimeException("Fail to get ip deployer for element: " + element);
}
@ -1529,13 +1530,13 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
if (vmProfile.getType() == Type.User && element.getProvider() != null) {
if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.Dhcp) &&
_networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, element.getProvider()) &&
(element instanceof DhcpServiceProvider)) {
(ComponentContext.getTargetObject(element) instanceof DhcpServiceProvider)) {
DhcpServiceProvider sp = (DhcpServiceProvider) element;
sp.addDhcpEntry(network, profile, vmProfile, dest, context);
}
if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.UserData) &&
_networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.UserData, element.getProvider()) &&
(element instanceof UserDataServiceProvider)) {
(ComponentContext.getTargetObject(element) instanceof UserDataServiceProvider)) {
UserDataServiceProvider sp = (UserDataServiceProvider) element;
sp.addPasswordAndUserdata(network, profile, vmProfile, dest, context);
}
@ -3622,15 +3623,15 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
@Override
public StaticNatServiceProvider getStaticNatProviderForNetwork(Network network) {
NetworkElement element = getElementForServiceInNetwork(network, Service.StaticNat);
assert element instanceof StaticNatServiceProvider;
return (StaticNatServiceProvider)element;
assert ComponentContext.getTargetObject(element) instanceof StaticNatServiceProvider;
return (StaticNatServiceProvider)ComponentContext.getTargetObject(element);
}
@Override
public LoadBalancingServiceProvider getLoadBalancingProviderForNetwork(Network network) {
NetworkElement element = getElementForServiceInNetwork(network, Service.Lb);
assert element instanceof LoadBalancingServiceProvider;
return ( LoadBalancingServiceProvider)element;
assert ComponentContext.getTargetObject(element) instanceof LoadBalancingServiceProvider;
return ( LoadBalancingServiceProvider)ComponentContext.getTargetObject(element);
}
@Override
public boolean isNetworkInlineMode(Network network) {

View File

@ -92,6 +92,7 @@ import com.cloud.user.Account;
import com.cloud.user.DomainManager;
import com.cloud.user.dao.AccountDao;
import com.cloud.utils.component.AdapterBase;
import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.component.Manager;
import com.cloud.utils.component.ManagerBase;
import com.cloud.utils.db.DB;
@ -398,9 +399,9 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel {
Network network = _networksDao.findById(networkId);
NetworkElement oldElement = getElementImplementingProvider(oldProvider.getName());
NetworkElement newElement = getElementImplementingProvider(newProvider.getName());
if (oldElement instanceof IpDeployingRequester && newElement instanceof IpDeployingRequester) {
IpDeployer oldIpDeployer = ((IpDeployingRequester)oldElement).getIpDeployer(network);
IpDeployer newIpDeployer = ((IpDeployingRequester)newElement).getIpDeployer(network);
if (ComponentContext.getTargetObject(oldElement) instanceof IpDeployingRequester && ComponentContext.getTargetObject(newElement) instanceof IpDeployingRequester) {
IpDeployer oldIpDeployer = ((IpDeployingRequester)ComponentContext.getTargetObject(oldElement)).getIpDeployer(network);
IpDeployer newIpDeployer = ((IpDeployingRequester)ComponentContext.getTargetObject(newElement)).getIpDeployer(network);
if (!oldIpDeployer.getProvider().getName().equals(newIpDeployer.getProvider().getName())) {
throw new InvalidParameterException("There would be multiple providers for IP " + publicIp.getAddress() + "!");
}

View File

@ -2175,10 +2175,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService {
addDefaultSecurityGroupProviderToPhysicalNetwork(pNetwork.getId());
// add VPCVirtualRouter as the defualt network service provider
addDefaultVpcVirtualRouterToPhysicalNetwork(pNetwork.getId());
// add baremetal pxe/dhcp provider to the physical network
addDefaultBaremetalProvidersToPhysicalNetwork(pNetwork.getId());
addDefaultVpcVirtualRouterToPhysicalNetwork(pNetwork.getId());
txn.commit();
return pNetwork;
@ -2984,22 +2981,10 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService {
throw new CloudRuntimeException("Unable to find the Network Element implementing the VirtualRouter Provider");
}
VirtualRouterElement element = ComponentContext.getTargetObject(networkElement);
VirtualRouterElement element = (VirtualRouterElement)networkElement;
element.addElement(nsp.getId(), VirtualRouterProviderType.VirtualRouter);
return nsp;
}
private PhysicalNetworkServiceProvider addDefaultBaremetalProvidersToPhysicalNetwork(long physicalNetworkId) {
PhysicalNetworkVO pvo = _physicalNetworkDao.findById(physicalNetworkId);
DataCenterVO dvo = _dcDao.findById(pvo.getDataCenterId());
if (dvo.getNetworkType() == NetworkType.Basic) {
addProviderToPhysicalNetwork(physicalNetworkId, "BaremetalDhcpProvider", null, null);
addProviderToPhysicalNetwork(physicalNetworkId, "BaremetalPxeProvider", null, null);
addProviderToPhysicalNetwork(physicalNetworkId, "BaremetaUserdataProvider", null, null);
}
return null;
}
protected PhysicalNetworkServiceProvider addDefaultVpcVirtualRouterToPhysicalNetwork(long physicalNetworkId) {
@ -3012,7 +2997,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService {
throw new CloudRuntimeException("Unable to find the Network Element implementing the VPCVirtualRouter Provider");
}
VpcVirtualRouterElement element = ComponentContext.getTargetObject(networkElement);
VpcVirtualRouterElement element = (VpcVirtualRouterElement)networkElement;
element.addElement(nsp.getId(), VirtualRouterProviderType.VPCVirtualRouter);
return nsp;

View File

@ -425,23 +425,32 @@ public class ConsoleProxy {
synchronized (connectionMap) {
ConsoleProxyClient viewer = connectionMap.get(clientKey);
if (viewer == null) {
authenticationExternally(param);
viewer = new ConsoleProxyVncClient();
viewer.initClient(param);
connectionMap.put(clientKey, viewer);
s_logger.info("Added viewer object " + viewer);
reportLoadChange = true;
} else if (!viewer.isFrontEndAlive()) {
s_logger.info("The rfb thread died, reinitializing the viewer " + viewer);
viewer.initClient(param);
} else if (!param.getClientHostPassword().equals(viewer.getClientHostPassword())) {
s_logger.warn("Bad sid detected(VNC port may be reused). sid in session: "
+ viewer.getClientHostPassword() + ", sid in request: " + param.getClientHostPassword());
viewer.initClient(param);
} else {
if(ajaxSession == null || ajaxSession.isEmpty())
} else {
// protected against malicous attack by modifying URL content
if(ajaxSession != null) {
long ajaxSessionIdFromUrl = Long.parseLong(ajaxSession);
if(ajaxSessionIdFromUrl != viewer.getAjaxSessionId())
throw new AuthenticationException ("Cannot use the existing viewer " +
viewer + ": modified AJAX session id");
}
if(param.getClientHostPassword() == null || param.getClientHostPassword().isEmpty() || !param.getClientHostPassword().equals(viewer.getClientHostPassword()))
throw new AuthenticationException ("Cannot use the existing viewer " +
viewer + ": bad sid");
if(!viewer.isFrontEndAlive()) {
authenticationExternally(param);
}
viewer.initClient(param);
reportLoadChange = true;
}
}
if(reportLoadChange) {
ConsoleProxyClientStatsCollector statsCollector = getStatsCollector();

View File

@ -27,7 +27,7 @@ public class AdapterBase extends ComponentLifecycleBase implements Adapter {
public static <T extends Adapter> T getAdapterByName(List<T> adapters, String name) {
for(T adapter : adapters) {
if(adapter.getName() != null && adapter.getName().equalsIgnoreCase(name))
return adapter;
return ComponentContext.getTargetObject(adapter);
}
return null;
}

View File

@ -214,7 +214,7 @@ public class ComponentContext implements ApplicationContextAware {
return (T)instance;
}
public static <T> T inject(Class<T> clz) {
T instance = s_appContext.getAutowireCapableBeanFactory().createBean(clz);
return instance;