You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ah...@apache.org on 2012/06/20 03:48:00 UTC

[8/8] Introduced plugins directory. Moved ovm into plugins. Introduced build.xml for ovm.

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e2a32ab4/plugins/hypervisors/ovm/src/com/cloud/ovm/object/Test.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/object/Test.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/object/Test.java
new file mode 100755
index 0000000..9d56f7d
--- /dev/null
+++ b/plugins/hypervisors/ovm/src/com/cloud/ovm/object/Test.java
@@ -0,0 +1,179 @@
+// Copyright 2012 Citrix Systems, Inc. Licensed under the
+// Apache License, Version 2.0 (the "License"); you may not use this
+// file except in compliance with the License.  Citrix Systems, Inc.
+// reserves all rights not expressly granted by 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.
+// 
+// Automatically generated by addcopyright.py at 04/03/2012
+package com.cloud.ovm.object;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import com.cloud.utils.Pair;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
+public class Test {
+	public static void main(String[] args) {
+		try {
+			/*Connection c = new Connection("192.168.105.155", "oracle", "password");
+			Utils util = new UtilsImpl(c);	
+			Storage storage = new StorageImpl(c);
+			String[] res = util.listDir("/etc", 1);
+			for (String s : res) {
+				System.out.println(s);
+			}
+			
+			
+			Pool pool = new PoolImpl(c);
+			
+			//pool.registerServer("192.168.105.155", Pool.ServerType.SITE);
+			//pool.registerServer("192.168.105.155", Pool.ServerType.UTILITY);
+			//pool.registerServer("192.168.105.155", Pool.ServerType.XEN);
+			System.out.println("Is:" + pool.isServerRegistered());
+			//String ip = pool.getMasterIp();
+			//System.out.println("IP:" + ip);
+			System.out.println(pool.getServerConfig());
+			System.out.println(pool.getServerXmInfo());
+			System.out.println(pool.getHostInfo());
+			System.out.println(pool.getAgentVersion());
+			String[] srs = storage.listSr();
+			for (int i=0; i<srs.length; i++) {
+				System.out.println(srs[i]);
+			}
+			String spuuid = storage.createSp(StorageType.OVSSPNFS, "192.168.110.232:/export/frank/nfs");
+			System.out.println(spuuid);
+			String sruuid = storage.createSr(spuuid, "hi");
+			System.out.println(sruuid);
+			storage.initSr();
+			Pair<Long, Long> spaceInfo = storage.getSrSpaceInfo("192.168.110.232:/export/frank/nfs");
+			System.out.println("Total:" + spaceInfo.first());
+			System.out.println("Free:" + spaceInfo.second());*/
+			OvmVm.Details vm = new OvmVm.Details();
+			vm.cpuNum = 1;
+			vm.memory = 512;
+			vm.name = "Test";
+			vm.uuid = "This-is-a-test";
+			OvmDisk.Details rootDisk = new OvmDisk.Details();
+			rootDisk.path = "/root/root.raw";
+			rootDisk.type = OvmDisk.WRITE;
+			vm.rootDisk = rootDisk;
+			OvmDisk.Details dataDisk = new OvmDisk.Details();
+			dataDisk.path = "/tmp/data.raw";
+			dataDisk.type = OvmDisk.SHAREDWRITE;
+			vm.disks.add(dataDisk);
+			vm.disks.add(dataDisk);
+			vm.disks.add(dataDisk);
+			vm.disks.add(dataDisk);
+			vm.disks.add(dataDisk);
+			OvmVif.Details vif = new OvmVif.Details();
+			vif.mac = "00:ff:ff:ff:ff:ee";
+			vif.bridge = "xenbr0";
+			vif.type = OvmVif.NETFRONT;
+			vm.vifs.add(vif);
+			vm.vifs.add(vif);
+			vm.vifs.add(vif);
+			vm.vifs.add(vif);
+			vm.vifs.add(vif);
+			//System.out.println(vm.toJson());
+			Connection c = new Connection("192.168.189.12", "oracle", "password");
+			//System.out.println(Coder.toJson(OvmHost.getDetails(c)));
+			String txt = "{\"MasterIp\": \"192.168.189.12\", \"dom0Memory\": 790626304, \"freeMemory\": 16378757120, \"totalMemory\": 17169383424, \"cpuNum\": 4, \"agentVersion\": \"2.3-38\", \"cpuSpeed\": 2261}";
+			//OvmHost.Details d = new GsonBuilder().create().fromJson(txt, OvmHost.Details.class);
+			//OvmHost.Details d = Coder.fromJson(txt, OvmHost.Details.class);
+			//OvmHost.Details d = OvmHost.getDetails(c);
+			//System.out.println(Coder.toJson(d));
+//			OvmStoragePool.Details pool = new OvmStoragePool.Details();
+//			pool.path = "192.168.110.232:/export/frank/ovs";
+//			pool.type = OvmStoragePool.NFS;
+//			pool.uuid = "123";
+//			System.out.println(pool.toJson());
+			
+			String cmd = null;
+			System.out.println(args.length);
+			if (args.length >= 1) {
+				cmd = args[0];
+				OvmVm.Details d = new OvmVm.Details();
+				d.cpuNum = 1;
+				d.memory = 512 * 1024 * 1024;
+				d.name = "MyTest";
+				d.uuid = "1-2-3-4-5";
+				OvmDisk.Details r = new OvmDisk.Details();
+				r.path = "/var/ovs/mount/60D0985974CA425AAF5D01A1F161CC8B/running_pool/36_systemvm/System.img";
+				r.type = OvmDisk.WRITE;
+				d.rootDisk = r;
+				OvmVif.Details v = new OvmVif.Details();
+				v.mac = "00:16:3E:5C:B1:D1";
+				v.bridge = "xenbr0";
+				v.type = OvmVif.NETFRONT;
+				d.vifs.add(v);
+				System.out.println(d.toJson());
+				
+				if (cmd.equalsIgnoreCase("create")) {	
+					// String s =
+					// "{\"cpuNum\":1,\"memory\":512,\"rootDisk\":{\"type\":\"w\",\"path\":\"/var/ovs/mount/60D0985974CA425AAF5D01A1F161CC8B/running_pool/36_systemvm/System.img\"},\"disks\":[],\"vifs\":[{\"mac\":\"00:16:3E:5C:B1:D1\",\"bridge\":\"xenbr0\",\"type\":\"netfront\"}],\"name\":\"MyTest\",\"uuid\":\"1-2-3-4-5\"}";
+					OvmVm.create(c, d);
+					// c.call("OvmVm.echo", new Object[]{s});
+				} else if (cmd.equalsIgnoreCase("reboot")) {
+					Map<String, String> res = OvmVm.reboot(c, "MyTest");
+					System.out.println(res.get("vncPort"));
+					//OvmVm.stop(c, "MyTest");
+					//OvmVm.create(c, d);
+				} else if (cmd.equalsIgnoreCase("stop")) {
+					OvmVm.stop(c, "MyTest");
+				} else if (cmd.equalsIgnoreCase("details")) {
+					OvmVm.Details ddd = OvmVm.getDetails(c, "MyTest");
+					System.out.println(ddd.vifs.size());
+					System.out.println(ddd.rootDisk.path);
+					System.out.println(ddd.powerState);
+				} else if (cmd.equalsIgnoreCase("all")) {
+					System.out.println(OvmHost.getAllVms(c));
+				} else if (cmd.equalsIgnoreCase("createBridge")) {
+					OvmBridge.Details bd = new OvmBridge.Details();
+					bd.name = "xenbr10";
+					bd.attach = args[1];
+					OvmBridge.create(c, bd);
+				} else if (cmd.equalsIgnoreCase("createVlan")) {
+					OvmVlan.Details vd = new OvmVlan.Details();
+					vd.pif = "eth0";
+					vd.vid = 1000;
+					String vname = OvmVlan.create(c, vd);
+					System.out.println(vname);
+				} else if (cmd.equalsIgnoreCase("delVlan")) {
+					OvmVlan.delete(c, args[1]);
+				} else if (cmd.equalsIgnoreCase("delBr")) {
+					OvmBridge.delete(c, args[1]);
+				} else if (cmd.equalsIgnoreCase("getBrs")) {
+					List<String> brs = OvmBridge.getAllBridges(c);
+					System.out.println(brs);
+				} else if (cmd.equalsIgnoreCase("getBrDetails")) {
+					OvmBridge.Details brd = OvmBridge.getDetails(c, args[1]);
+					System.out.println(brd.interfaces);
+				}
+						
+			}
+			
+			List<String> l = new ArrayList<String>();
+			l.add("4b4d8951-f0b6-36c5-b4f3-a82ff2611c65");
+			System.out.println(Coder.toJson(l));
+			
+//			Map<String, String> res = OvmHost.getPerformanceStats(c, "xenbr0");
+//			System.out.println(res.toString());
+//			String stxt = "{\"vifs\": [{\"bridge\": \"xenbr0\", \"mac\": \"00:16:3E:5C:B1:D1\", \"type\": \"netfront\"}], \"powerState\": \"RUNNING\", \"disks\": [], \"cpuNum\": 1, \"memory\": 536870912, \"rootDisk\": {\"path\": \"/var/ovs/mount/60D0985974CA425AAF5D01A1F161CC8B/running_pool/MyTest/System.img\", \"type\": \"w\"}}";
+//			OvmVm.Details ddd = Coder.fromJson(stxt, OvmVm.Details.class);
+//			System.out.println(ddd.vifs.size());
+//			System.out.println(ddd.rootDisk.path);
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e2a32ab4/server/src/com/cloud/deploy/UserDispersingPlanner.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/deploy/UserDispersingPlanner.java b/server/src/com/cloud/deploy/UserDispersingPlanner.java
deleted file mode 100644
index dcad1e7..0000000
--- a/server/src/com/cloud/deploy/UserDispersingPlanner.java
+++ /dev/null
@@ -1,215 +0,0 @@
-// Copyright 2012 Citrix Systems, Inc. Licensed under the
-// Apache License, Version 2.0 (the "License"); you may not use this
-// file except in compliance with the License.  Citrix Systems, Inc.
-// reserves all rights not expressly granted by 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.
-// 
-// Automatically generated by addcopyright.py at 04/03/2012
-package com.cloud.deploy;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-import javax.ejb.Local;
-import javax.naming.ConfigurationException;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.configuration.Config;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.utils.NumbersUtil;
-import com.cloud.utils.Pair;
-import com.cloud.vm.VirtualMachine;
-import com.cloud.vm.VirtualMachineProfile;
-
-@Local(value=DeploymentPlanner.class)
-public class UserDispersingPlanner extends FirstFitPlanner implements DeploymentPlanner {
-
-    private static final Logger s_logger = Logger.getLogger(UserDispersingPlanner.class);
-    
-    /**
-     * This method should reorder the given list of Cluster Ids by applying any necessary heuristic 
-     * for this planner
-     * For UserDispersingPlanner we need to order the clusters by considering the number of VMs for this account
-     * @return List<Long> ordered list of Cluster Ids
-     */
-    @Override
-    protected List<Long> reorderClusters(long id, boolean isZone, Pair<List<Long>, Map<Long, Double>> clusterCapacityInfo, VirtualMachineProfile<? extends VirtualMachine> vmProfile, DeploymentPlan plan){
-        List<Long> clusterIdsByCapacity = clusterCapacityInfo.first();
-        if(vmProfile.getOwner() == null){
-            return clusterIdsByCapacity;
-        }
-        long accountId = vmProfile.getOwner().getAccountId(); 
-        Pair<List<Long>, Map<Long, Double>> clusterIdsVmCountInfo = listClustersByUserDispersion(id, isZone, accountId);
-
-        //now we have 2 cluster lists - one ordered by capacity and the other by number of VMs for this account
-        //need to apply weights to these to find the correct ordering to follow
-        
-        if(_userDispersionWeight == 1.0f){
-            List<Long> clusterIds = clusterIdsVmCountInfo.first();
-            clusterIds.retainAll(clusterIdsByCapacity);
-            return clusterIds;
-        }else{
-            //apply weights to the two lists
-            return orderByApplyingWeights(clusterCapacityInfo, clusterIdsVmCountInfo, accountId);
-         }
-        
-        
-    }
-    
-    /**
-     * This method should reorder the given list of Pod Ids by applying any necessary heuristic 
-     * for this planner
-     * For UserDispersingPlanner we need to order the pods by considering the number of VMs for this account
-     * @return List<Long> ordered list of Pod Ids
-     */
-    @Override
-    protected List<Long> reorderPods(Pair<List<Long>, Map<Long, Double>> podCapacityInfo, VirtualMachineProfile<? extends VirtualMachine> vmProfile, DeploymentPlan plan){
-        List<Long> podIdsByCapacity = podCapacityInfo.first();
-        if(vmProfile.getOwner() == null){
-            return podIdsByCapacity;
-        }
-        long accountId = vmProfile.getOwner().getAccountId(); 
-        
-        Pair<List<Long>, Map<Long, Double>> podIdsVmCountInfo = listPodsByUserDispersion(plan.getDataCenterId(), accountId);
-
-        //now we have 2 pod lists - one ordered by capacity and the other by number of VMs for this account
-        //need to apply weights to these to find the correct ordering to follow
-        
-        if(_userDispersionWeight == 1.0f){
-            List<Long> podIds = podIdsVmCountInfo.first();
-            podIds.retainAll(podIdsByCapacity);
-            return podIds;
-        }else{
-            //apply weights to the two lists
-            return orderByApplyingWeights(podCapacityInfo, podIdsVmCountInfo, accountId);
-         }
-        
-    }
-
-    protected Pair<List<Long>, Map<Long, Double>> listClustersByUserDispersion(long id, boolean isZone, long accountId){
-        if (s_logger.isDebugEnabled()) {
-            s_logger.debug("Applying Userdispersion heuristic to clusters for account: "+ accountId);
-        }
-        Pair<List<Long>, Map<Long, Double>> clusterIdsVmCountInfo;
-        if(isZone){
-            clusterIdsVmCountInfo = _vmInstanceDao.listClusterIdsInZoneByVmCount(id, accountId);
-        }else{
-            clusterIdsVmCountInfo = _vmInstanceDao.listClusterIdsInPodByVmCount(id, accountId);
-        }
-        if (s_logger.isTraceEnabled()) {
-            s_logger.trace("List of clusters in ascending order of number of VMs: "+ clusterIdsVmCountInfo.first());
-        }
-        return clusterIdsVmCountInfo;
-    }
-    
-    protected Pair<List<Long>, Map<Long, Double>> listPodsByUserDispersion(long dataCenterId, long accountId) {
-        if (s_logger.isDebugEnabled()) {
-            s_logger.debug("Applying Userdispersion heuristic to pods for account: "+ accountId);
-        }
-        Pair<List<Long>, Map<Long, Double>> podIdsVmCountInfo = _vmInstanceDao.listPodIdsInZoneByVmCount(dataCenterId, accountId);
-        if (s_logger.isTraceEnabled()) {
-            s_logger.trace("List of pods in ascending order of number of VMs: "+ podIdsVmCountInfo.first());
-        }
-        
-        return podIdsVmCountInfo;
-    }
-    
-    
-    private List<Long> orderByApplyingWeights(Pair<List<Long>, Map<Long, Double>> capacityInfo, Pair<List<Long>, Map<Long, Double>> vmCountInfo, long accountId){
-        List<Long> capacityOrderedIds = capacityInfo.first();
-        List<Long> vmCountOrderedIds = vmCountInfo.first();
-        Map<Long, Double> capacityMap = capacityInfo.second();
-        Map<Long, Double> vmCountMap = vmCountInfo.second();
-
-        if (s_logger.isTraceEnabled()) {
-            s_logger.trace("Capacity Id list: "+ capacityOrderedIds + " , capacityMap:"+capacityMap);
-        }        
-        if (s_logger.isTraceEnabled()) {
-            s_logger.trace("Vm Count Id list: "+ vmCountOrderedIds + " , vmCountMap:"+vmCountMap);
-        }        
-
-        
-        List<Long> idsReorderedByWeights = new ArrayList<Long>();
-        float capacityWeight = (1.0f -_userDispersionWeight);
-
-        if (s_logger.isDebugEnabled()) {
-            s_logger.debug("Applying userDispersionWeight: "+ _userDispersionWeight);
-        }        
-        //normalize the vmCountMap
-        LinkedHashMap<Long, Double> normalisedVmCountIdMap= new LinkedHashMap<Long, Double>();
-        
-        Long totalVmsOfAccount = _vmInstanceDao.countRunningByAccount(accountId);
-        if (s_logger.isDebugEnabled()) {
-            s_logger.debug("Total VMs for account: "+ totalVmsOfAccount);
-        }            
-        for(Long id : vmCountOrderedIds){
-            Double normalisedCount = vmCountMap.get(id) / totalVmsOfAccount;
-            normalisedVmCountIdMap.put(id, normalisedCount);
-        }
-        
-        //consider only those ids that are in capacity map.
-        
-        SortedMap<Double, List<Long>> sortedMap= new TreeMap<Double, List<Long>>();
-        for(Long id : capacityOrderedIds){
-            Double weightedCapacityValue = capacityMap.get(id) * capacityWeight;
-            Double weightedVmCountValue = normalisedVmCountIdMap.get(id) * _userDispersionWeight;
-            Double totalWeight = weightedCapacityValue + weightedVmCountValue;
-            if(sortedMap.containsKey(totalWeight)){
-                List<Long> idList = sortedMap.get(totalWeight);
-                idList.add(id);
-                sortedMap.put(totalWeight, idList);
-            }else{
-                List<Long> idList = new ArrayList<Long>();
-                idList.add(id);
-                sortedMap.put(totalWeight, idList);
-            }
-        }
-        
-        for(List<Long> idList : sortedMap.values()){
-            idsReorderedByWeights.addAll(idList);
-        }
-        
-        if (s_logger.isTraceEnabled()) {
-            s_logger.trace("Reordered Id list: "+ idsReorderedByWeights);
-        }        
-        
-        return idsReorderedByWeights;
-    }
-    
-
-    @Override
-    public boolean canHandle(VirtualMachineProfile<? extends VirtualMachine> vm, DeploymentPlan plan, ExcludeList avoid) {
-        if(vm.getHypervisorType() != HypervisorType.BareMetal){
-            //check the allocation strategy
-            if (_allocationAlgorithm != null && _allocationAlgorithm.equals(AllocationAlgorithm.userdispersing.toString())) {
-                return true;
-            }
-        }
-        return false;
-    }
-    
-    float _userDispersionWeight;
-
-    
-    @Override
-    public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
-        super.configure(name, params);
-        
-        String weight = _configDao.getValue(Config.VmUserDispersionWeight.key());
-        _userDispersionWeight = NumbersUtil.parseFloat(weight, 1.0f);
-        
-
-        return true;
-    }    
-
-}