You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by se...@apache.org on 2014/05/12 09:16:38 UTC

[4/9] Squashed commits

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aded3037/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerConnectionPool.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerConnectionPool.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerConnectionPool.java
deleted file mode 100644
index ca04673..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerConnectionPool.java
+++ /dev/null
@@ -1,503 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor.xen.resource;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Queue;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLSession;
-
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-import org.apache.xmlrpc.client.XmlRpcClientException;
-
-import com.xensource.xenapi.APIVersion;
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.Pool;
-import com.xensource.xenapi.Session;
-import com.xensource.xenapi.Types;
-import com.xensource.xenapi.Types.BadServerResponse;
-import com.xensource.xenapi.Types.XenAPIException;
-
-import com.cloud.utils.NumbersUtil;
-import com.cloud.utils.PropertiesUtil;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-public class XenServerConnectionPool {
-    private static final Logger s_logger = Logger.getLogger(XenServerConnectionPool.class);
-    protected HashMap<String /* poolUuid */, XenServerConnection> _conns = new HashMap<String, XenServerConnection>();
-    protected int _retries;
-    protected int _interval;
-    protected int _connWait = 5;
-    protected static long s_sleepOnError = 10 * 1000; // in ms
-    static {
-        File file = PropertiesUtil.findConfigFile("environment.properties");
-        if (file == null) {
-            s_logger.debug("Unable to find environment.properties");
-        } else {
-            FileInputStream finputstream;
-            try {
-                finputstream = new FileInputStream(file);
-                final Properties props = new Properties();
-                props.load(finputstream);
-                finputstream.close();
-                String search = props.getProperty("sleep.interval.on.error");
-                if (search != null) {
-                    s_sleepOnError = NumbersUtil.parseInterval(search, 10) * 1000;
-                }
-                s_logger.info("XenServer Connection Pool Configs: sleep.interval.on.error=" + s_sleepOnError);
-            } catch (FileNotFoundException e) {
-                s_logger.debug("File is not found", e);
-            } catch (IOException e) {
-                s_logger.debug("IO Exception while reading file", e);
-            }
-        }
-        try {
-            javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
-            javax.net.ssl.TrustManager tm = new TrustAllManager();
-            trustAllCerts[0] = tm;
-            javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("TLS");
-            sc.init(null, trustAllCerts, null);
-            javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
-            HostnameVerifier hv = new HostnameVerifier() {
-                @Override
-                public boolean verify(String hostName, SSLSession session) {
-                    return true;
-                }
-            };
-            HttpsURLConnection.setDefaultHostnameVerifier(hv);
-        } catch (Exception e) {
-        }
-    }
-
-    protected XenServerConnectionPool() {
-        _retries = 1;
-        _interval = 3;
-    }
-
-    private void addConnect(String poolUuid, XenServerConnection conn) {
-        if (poolUuid == null)
-            return;
-        if (s_logger.isDebugEnabled()) {
-            s_logger.debug("Add master connection through " + conn.getIp() + " for pool(" + conn.getPoolUuid() + ")");
-        }
-        synchronized (_conns) {
-            _conns.put(poolUuid, conn);
-        }
-    }
-
-    private XenServerConnection getConnect(String poolUuid) {
-        if (poolUuid == null)
-            return null;
-        synchronized (_conns) {
-            return _conns.get(poolUuid);
-        }
-    }
-
-    private void removeConnect(String poolUuid) {
-        if (poolUuid == null) {
-            return;
-        }
-        XenServerConnection conn = null;
-        synchronized (_conns) {
-            conn = _conns.remove(poolUuid);
-        }
-        if (conn != null) {
-            if (s_logger.isDebugEnabled()) {
-                s_logger.debug("Remove master connection through " + conn.getIp() + " for pool(" + conn.getPoolUuid() + ")");
-            }
-
-        }
-    }
-
-    static void forceSleep(long sec) {
-        long firetime = System.currentTimeMillis() + (sec * 1000);
-        long msec = sec * 1000;
-        while (true) {
-            if (msec < 100)
-                break;
-            try {
-                Thread.sleep(msec);
-                return;
-            } catch (InterruptedException e) {
-                msec = firetime - System.currentTimeMillis();
-            }
-        }
-    }
-
-    public Connection getConnect(String ip, String username, Queue<String> password) {
-        Connection conn = new Connection(getURL(ip), 10, _connWait);
-        try {
-            loginWithPassword(conn, username, password, APIVersion.latest().toString());
-        }  catch (Types.HostIsSlave e) {
-            String maddress = e.masterIPAddress;
-            conn = new Connection(getURL(maddress), 10, _connWait);
-            try {
-                loginWithPassword(conn, username, password, APIVersion.latest().toString());
-            }  catch (Exception e1) {
-                String msg = "Unable to create master connection to host(" + maddress +") , due to " + e1.toString();
-                s_logger.debug(msg);
-                throw new CloudRuntimeException(msg, e1);
-            }
-        } catch (Exception e) {
-            String msg = "Unable to create master connection to host(" + ip +") , due to " + e.toString();
-            s_logger.debug(msg);
-            throw new CloudRuntimeException(msg, e);
-        }
-        return conn;
-    }
-
-    public URL getURL(String ip) {
-        try {
-            return new URL("https://" + ip);
-        } catch (Exception e) {
-            String msg = "Unable to convert IP " + ip + " to URL due to " + e.toString();
-            if (s_logger.isDebugEnabled()) {
-                s_logger.debug(msg);
-            }
-            throw new CloudRuntimeException(msg, e);
-        }
-    }
-
-    public Connection connect(String hostUuid, String poolUuid, String ipAddress,
-            String username, Queue<String> password, int wait) {
-        XenServerConnection mConn = null;
-        if (hostUuid == null || poolUuid == null || ipAddress == null || username == null || password == null) {
-            String msg = "Connect some parameter are null hostUuid:" + hostUuid + " ,poolUuid:" + poolUuid
-                    + " ,ipAddress:" + ipAddress;
-            s_logger.debug(msg);
-            throw new CloudRuntimeException(msg);
-        }
-        synchronized (poolUuid.intern()) {
-            mConn = getConnect(poolUuid);
-            if (mConn != null){
-                try{
-                    Host host = Host.getByUuid(mConn, hostUuid);
-                    if (!host.getEnabled(mConn)) {
-                        String msg = "Cannot connect this host " + ipAddress + " due to the host is not enabled";
-                        s_logger.debug(msg);
-                        if (mConn.getIp().equalsIgnoreCase(ipAddress)) {
-                            removeConnect(poolUuid);
-                            mConn = null;
-                        }
-                        throw new CloudRuntimeException(msg);
-                    }
-                    return mConn;
-                } catch (CloudRuntimeException e) {
-                        throw e;
-                } catch (Exception e) {
-                    if (s_logger.isDebugEnabled()) {
-                        s_logger.debug("connect through IP(" + mConn.getIp() + " for pool(" + poolUuid + ") is broken due to " + e.toString());
-                    }
-                    removeConnect(poolUuid);
-                    mConn = null;
-                }
-            }
-
-            if ( mConn == null ) {
-                try {
-                    Connection conn = new Connection(getURL(ipAddress), 5, _connWait);
-                    Session sess = loginWithPassword(conn, username, password, APIVersion.latest().toString());
-                    Host host = sess.getThisHost(conn);
-                    Boolean hostenabled = host.getEnabled(conn);
-                    if( sess != null ){
-                        try{
-                            Session.logout(conn);
-                        } catch (Exception e) {
-                        }
-                        conn.dispose();
-                    }
-                    if (!hostenabled) {
-                        String msg = "Unable to create master connection, due to master Host " + ipAddress + " is not enabled";
-                        s_logger.debug(msg);
-                        throw new CloudRuntimeException(msg);
-                    }
-                    mConn = new XenServerConnection(getURL(ipAddress), ipAddress, username, password, _retries, _interval, wait, _connWait);
-                    loginWithPassword(mConn, username, password, APIVersion.latest().toString());
-                }  catch (Types.HostIsSlave e) {
-                    String maddress = e.masterIPAddress;
-                    mConn = new XenServerConnection(getURL(maddress), maddress, username, password, _retries, _interval, wait, _connWait);
-                    try {
-                        Session session = loginWithPassword(mConn, username, password, APIVersion.latest().toString());
-                        Host host = session.getThisHost(mConn);
-                        if (!host.getEnabled(mConn)) {
-                            String msg = "Unable to create master connection, due to master Host " + maddress + " is not enabled";
-                            s_logger.debug(msg);
-                            throw new CloudRuntimeException(msg);
-                        }
-                    }  catch (Exception e1) {
-                        String msg = "Unable to create master connection to host(" + maddress +") , due to " + e1.toString();
-                        s_logger.debug(msg);
-                        throw new CloudRuntimeException(msg, e1);
-
-                    }
-                } catch (CloudRuntimeException e) {
-                        throw e;
-                } catch (Exception e) {
-                    String msg = "Unable to create master connection to host(" + ipAddress +") , due to " + e.toString();
-                    s_logger.debug(msg);
-                    throw new CloudRuntimeException(msg, e);
-                }
-                addConnect(poolUuid, mConn);
-            }
-        }
-        return mConn;
-    }
-
-
-
-    protected Session slaveLocalLoginWithPassword(Connection conn, String username, Queue<String> password) throws BadServerResponse, XenAPIException, XmlRpcException {
-        Session s = null;
-        boolean logged_in = false;
-        Exception ex = null;
-        while (!logged_in) {
-            try {
-                s = Session.slaveLocalLoginWithPassword(conn, username, password.peek());
-                logged_in = true;
-            } catch (BadServerResponse e) {
-                logged_in = false;
-                ex = e;
-            } catch (XenAPIException e) {
-                logged_in = false;
-                ex = e;
-            } catch (XmlRpcException e) {
-                logged_in = false;
-                ex = e;
-            }
-            if (logged_in && conn != null) {
-                break;
-            } else {
-                if (password.size() > 1) {
-                    password.remove();
-                    continue;
-                } else {
-                    // the last password did not work leave it and flag error
-                    if (ex instanceof BadServerResponse) {
-                        throw (BadServerResponse)ex;
-                    } else if (ex instanceof XmlRpcException) {
-                        throw (XmlRpcException)ex;
-                    } else if (ex instanceof Types.SessionAuthenticationFailed) {
-                        throw (Types.SessionAuthenticationFailed)ex;
-                    } else if (ex instanceof XenAPIException) {
-                        throw (XenAPIException)ex;
-                    }
-                    break;
-                }
-            }
-        }
-        return s;
-    }
-
-    protected Session loginWithPassword(Connection conn, String username, Queue<String> password, String version) throws BadServerResponse, XenAPIException,
-        XmlRpcException {
-        Session s = null;
-        boolean logged_in = false;
-        Exception ex = null;
-        while (!logged_in) {
-            try {
-                s = Session.loginWithPassword(conn, username, password.peek(), APIVersion.latest().toString());
-                logged_in = true;
-            } catch (BadServerResponse e) {
-                logged_in = false;
-                ex = e;
-            } catch (XenAPIException e) {
-                logged_in = false;
-                ex = e;
-            } catch (XmlRpcException e) {
-                logged_in = false;
-                ex = e;
-            }
-
-            if (logged_in && conn != null) {
-                break;
-            } else {
-                if (password.size() > 1) {
-                    password.remove();
-                    continue;
-                } else {
-                    // the last password did not work leave it and flag error
-                    if (ex instanceof BadServerResponse) {
-                        throw (BadServerResponse)ex;
-                    } else if (ex instanceof XmlRpcException) {
-                        throw (XmlRpcException)ex;
-                    } else if (ex instanceof Types.SessionAuthenticationFailed) {
-                        throw (Types.SessionAuthenticationFailed)ex;
-                    } else if (ex instanceof XenAPIException) {
-                        throw (XenAPIException)ex;
-                    }
-                }
-            }
-        }
-        return s;
-    }
-
-    protected void join(Connection conn, String masterIp, String username, Queue<String> password) throws BadServerResponse, XenAPIException, XmlRpcException,
-        Types.JoiningHostCannotContainSharedSrs {
-
-        boolean logged_in = false;
-        Exception ex = null;
-        while (!logged_in) {
-            try {
-                Pool.join(conn, masterIp, username, password.peek());
-                logged_in = true;
-            } catch (BadServerResponse e) {
-                logged_in = false;
-                ex = e;
-            } catch (XenAPIException e) {
-                logged_in = false;
-                ex = e;
-            } catch (XmlRpcException e) {
-                logged_in = false;
-                ex = e;
-            }
-            if (logged_in && conn != null) {
-                break;
-            } else {
-                if (password.size() > 1) {
-                    password.remove();
-                    continue;
-                } else {
-                    // the last password did not work leave it and flag error
-                    if (ex instanceof BadServerResponse) {
-                        throw (BadServerResponse)ex;
-                    } else if (ex instanceof XmlRpcException) {
-                        throw (XmlRpcException)ex;
-                    } else if (ex instanceof Types.SessionAuthenticationFailed) {
-                        throw (Types.SessionAuthenticationFailed)ex;
-                    } else if (ex instanceof XenAPIException) {
-                        throw (XenAPIException)ex;
-                    }
-                    break;
-                }
-            }
-        }
-    }
-
-    static public Pool.Record getPoolRecord(Connection conn) throws XmlRpcException, XenAPIException {
-        Map<Pool, Pool.Record> pools = Pool.getAllRecords(conn);
-        assert pools.size() == 1 : "Pool size is not one....hmmm....wth? " + pools.size();
-
-        return pools.values().iterator().next();
-    }
-
-    private static final XenServerConnectionPool s_instance = new XenServerConnectionPool();
-
-    public static XenServerConnectionPool getInstance() {
-        return s_instance;
-    }
-
-    public class XenServerConnection extends Connection {
-        long _interval;
-        int _retries;
-        String _ip;
-        String _username;
-        Queue<String> _password;
-        String _poolUuid;
-
-        public XenServerConnection(URL url, String ip, String username, Queue<String> password, int retries, int interval, int wait, int connwait) {
-            super(url, wait, connwait);
-            _ip = ip;
-            _retries = retries;
-            _username = username;
-            _password = password;
-            _interval = (long)interval * 1000;
-
-        }
-
-        public String getPoolUuid() {
-            return _poolUuid;
-        }
-
-        public String getUsername() {
-            return _username;
-        }
-
-        public Queue<String> getPassword() {
-            return _password;
-        }
-
-        public String getIp() {
-            return _ip;
-        }
-
-        @Override
-        protected Map dispatch(String methodcall, Object[] methodparams)  throws XmlRpcException, XenAPIException {
-            if (methodcall.equals("session.local_logout")
-                    || methodcall.equals("session.slave_local_login_with_password")
-                    || methodcall.equals("session.logout")
-                    || methodcall.equals("session.login_with_password")) {
-                return super.dispatch(methodcall, methodparams);
-            }
-
-            try {
-                return super.dispatch(methodcall, methodparams);
-            } catch (Types.SessionInvalid e) {
-                s_logger.debug("Session is invalid for method: " + methodcall + " due to " + e.toString());
-                removeConnect(_poolUuid);
-                throw e;
-            } catch (XmlRpcClientException e) {
-                s_logger.debug("XmlRpcClientException for method: " + methodcall + " due to " + e.toString());
-                removeConnect(_poolUuid);
-                throw e;
-            } catch (XmlRpcException e) {
-                s_logger.debug("XmlRpcException for method: " + methodcall + " due to " + e.toString());
-                removeConnect(_poolUuid);
-                throw e;
-            } catch (Types.HostIsSlave e) {
-                 s_logger.debug("HostIsSlave Exception for method: " + methodcall + " due to " + e.toString());
-                 removeConnect(_poolUuid);
-                 throw e;
-            }
-        }
-    }
-
-    public static class TrustAllManager implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager {
-        @Override
-        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
-            return null;
-        }
-
-        public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) {
-            return true;
-        }
-
-        public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) {
-            return true;
-        }
-
-        @Override
-        public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException {
-            return;
-        }
-
-        @Override
-        public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException {
-            return;
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aded3037/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerPoolVms.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerPoolVms.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerPoolVms.java
deleted file mode 100644
index 488acec..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerPoolVms.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor.xen.resource;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.utils.Pair;
-import com.cloud.vm.VirtualMachine.State;
-
-public class XenServerPoolVms {
-    private static final Logger s_logger = Logger.getLogger(XenServerPoolVms.class);
-    private final Map<String/* clusterId */, HashMap<String/* vm name */, Pair<String/* host uuid */, State/* vm state */>>> _clusterVms =
-        new ConcurrentHashMap<String, HashMap<String, Pair<String, State>>>();
-
-    public HashMap<String, Pair<String, State>> getClusterVmState(String clusterId) {
-        HashMap<String, Pair<String, State>> _vms = _clusterVms.get(clusterId);
-        if (_vms == null) {
-            HashMap<String, Pair<String, State>> vmStates = new HashMap<String, Pair<String, State>>();
-            _clusterVms.put(clusterId, vmStates);
-            return vmStates;
-        } else
-            return _vms;
-    }
-
-    public void clear(String clusterId) {
-        HashMap<String, Pair<String, State>> _vms = getClusterVmState(clusterId);
-        _vms.clear();
-    }
-
-    public State getState(String clusterId, String name) {
-        HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
-        Pair<String, State> pv = vms.get(name);
-        return pv == null ? State.Stopped : pv.second(); // if a VM is absent on the cluster, it is effectively in stopped state.
-    }
-
-    public Pair<String, State> get(String clusterId, String name) {
-        HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
-        return vms.get(name);
-    }
-
-    public void put(String clusterId, String hostUuid, String name, State state) {
-        HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
-        vms.put(name, new Pair<String, State>(hostUuid, state));
-    }
-
-    public void remove(String clusterId, String hostUuid, String name) {
-        HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
-        vms.remove(name);
-    }
-
-    public void putAll(String clusterId, HashMap<String, Pair<String, State>> newVms) {
-        HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
-        vms.putAll(newVms);
-    }
-
-    public int size(String clusterId) {
-        HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
-        return vms.size();
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sbuf = new StringBuilder("PoolVms=");
-        for (HashMap<String/* vm name */, Pair<String/* host uuid */, State/* vm state */>> clusterVM : _clusterVms.values()) {
-            for (String vmname : clusterVM.keySet()) {
-                sbuf.append(vmname).append("-").append(clusterVM.get(vmname).second()).append(",");
-            }
-        }
-        return sbuf.toString();
-    }
-
-}