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


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/3f2b771e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/3f2b771e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/3f2b771e

Branch: refs/heads/master
Commit: 3f2b771e072592535e9a71788635e11c264c461a
Parents: 333dd81
Author: Kelven Yang <[email protected]>
Authored: Tue Feb 26 11:51:03 2013 -0800
Committer: Kelven Yang <[email protected]>
Committed: Tue Mar 5 19:03:30 2013 -0500

----------------------------------------------------------------------
 .../consoleproxy/ConsoleProxyResource.java         |   25 ++++++++++++-
 .../src/com/cloud/cluster/ClusterManagerImpl.java  |    5 ++-
 .../ExternalLoadBalancerDeviceManagerImpl.java     |    3 +-
 .../src/com/cloud/network/NetworkManagerImpl.java  |   17 +++++----
 server/src/com/cloud/network/NetworkModelImpl.java |    7 ++--
 .../src/com/cloud/network/NetworkServiceImpl.java  |   21 ++---------
 .../src/com/cloud/consoleproxy/ConsoleProxy.java   |   29 ++++++++++-----
 .../src/com/cloud/utils/component/AdapterBase.java |    2 +-
 .../cloud/utils/component/ComponentContext.java    |    2 +-
 9 files changed, 66 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3f2b771e/agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java
----------------------------------------------------------------------
diff --git 
a/agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java 
b/agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java
index 8a3a271..516430b 100644
--- a/agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java
+++ b/agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java
@@ -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) {
+       }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3f2b771e/server/src/com/cloud/cluster/ClusterManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/cluster/ClusterManagerImpl.java 
b/server/src/com/cloud/cluster/ClusterManagerImpl.java
index 45d9dca..27e0e03 100755
--- a/server/src/com/cloud/cluster/ClusterManagerImpl.java
+++ b/server/src/com/cloud/cluster/ClusterManagerImpl.java
@@ -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) {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3f2b771e/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java 
b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
index bcefccc..8856881 100644
--- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
+++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
@@ -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;
         }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3f2b771e/server/src/com/cloud/network/NetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java 
b/server/src/com/cloud/network/NetworkManagerImpl.java
index a575183..ba5ab5d 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -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) {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3f2b771e/server/src/com/cloud/network/NetworkModelImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkModelImpl.java 
b/server/src/com/cloud/network/NetworkModelImpl.java
index 0525888..e83c0d2 100644
--- a/server/src/com/cloud/network/NetworkModelImpl.java
+++ b/server/src/com/cloud/network/NetworkModelImpl.java
@@ -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() + "!");
                }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3f2b771e/server/src/com/cloud/network/NetworkServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java 
b/server/src/com/cloud/network/NetworkServiceImpl.java
index 8792037..821aa6d 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -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;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3f2b771e/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxy.java
----------------------------------------------------------------------
diff --git 
a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxy.java 
b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxy.java
index a722d83..b5c2989 100644
--- a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxy.java
+++ b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxy.java
@@ -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();

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3f2b771e/utils/src/com/cloud/utils/component/AdapterBase.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/AdapterBase.java 
b/utils/src/com/cloud/utils/component/AdapterBase.java
index 405762d..a8f4f46 100644
--- a/utils/src/com/cloud/utils/component/AdapterBase.java
+++ b/utils/src/com/cloud/utils/component/AdapterBase.java
@@ -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;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3f2b771e/utils/src/com/cloud/utils/component/ComponentContext.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/ComponentContext.java 
b/utils/src/com/cloud/utils/component/ComponentContext.java
index e598b85..82fe90d 100644
--- a/utils/src/com/cloud/utils/component/ComponentContext.java
+++ b/utils/src/com/cloud/utils/component/ComponentContext.java
@@ -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;

Reply via email to