diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in
index 87f9dcaf4f4..a8f823af9d7 100755
--- a/client/tomcatconf/components.xml.in
+++ b/client/tomcatconf/components.xml.in
@@ -23,214 +23,10 @@
documented, please contact the author.
-->
-
-
-
-
-
-
-
-
- 50
- -1
-
-
- 50
- -1
-
-
- 50
- -1
-
-
- 50
- -1
-
-
-
-
-
-
-
-
-
- 5000
- 300
-
-
-
- 50
- -1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 50
- -1
- routing
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- < adapter name="Storage" class="com.cloud.storage.allocator.FirstFitStoragePoolAllocator"/ >
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
- false
-
-
-
-
- 50
- -1
-
-
-
+
diff --git a/core/src/com/cloud/storage/DiskTemplateVO.java b/core/src/com/cloud/storage/DiskTemplateVO.java
deleted file mode 100755
index 8685ecf221a..00000000000
--- a/core/src/com/cloud/storage/DiskTemplateVO.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/**
- * Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
- *
- * This software is licensed under the GNU General Public License v3 or later.
- *
- * It is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-package com.cloud.storage;
-
-
-import java.util.Date;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-import com.cloud.utils.db.GenericDao;
-
-/**
- * @author ahuang
- *
- */
-@Entity
-@Table(name="disk_template_ref")
-public class DiskTemplateVO {
- @Id
- @GeneratedValue(strategy=GenerationType.IDENTITY)
- @Column(name="id")
- Long id;
-
- @Column(name="description")
- String description;
-
- @Column(name="host")
- String host;
-
- @Column(name="path")
- String path;
-
- @Column(name="size")
- long size;
-
- @Column(name="type")
- String type;
-
- @Column(name=GenericDao.CREATED_COLUMN)
- Date created;
-
- @Column(name=GenericDao.REMOVED_COLUMN)
- Date removed;
-
- public DiskTemplateVO(Long id, String description, String path, long size, String type) {
- this.id = id;
- this.description = description;
- this.path = path;
- this.size = size;
- this.type = type;
- }
-
- public Long getId() {
- return id;
- }
-
- public String getDescription() {
- return description;
- }
-
- public String getHost() {
- return host;
- }
-
- public String getPath() {
- return path;
- }
-
- public long getSize() {
- return size;
- }
-
- public String getType() {
- return type;
- }
-
- public Date getCreated() {
- return created;
- }
-
- public Date getRemoved() {
- return removed;
- }
-
- protected DiskTemplateVO() {
- }
-}
diff --git a/core/src/com/cloud/storage/dao/DiskTemplateDao.java b/core/src/com/cloud/storage/dao/DiskTemplateDao.java
deleted file mode 100755
index 523155d589a..00000000000
--- a/core/src/com/cloud/storage/dao/DiskTemplateDao.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
- *
- * This software is licensed under the GNU General Public License v3 or later.
- *
- * It is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-package com.cloud.storage.dao;
-
-import com.cloud.storage.DiskTemplateVO;
-import com.cloud.utils.db.GenericDao;
-
-public interface DiskTemplateDao extends GenericDao {
- public DiskTemplateVO findByTypeAndSize(String type, long size);
-
-}
diff --git a/core/src/com/cloud/storage/dao/DiskTemplateDaoImpl.java b/core/src/com/cloud/storage/dao/DiskTemplateDaoImpl.java
deleted file mode 100755
index 7e0f68e75cf..00000000000
--- a/core/src/com/cloud/storage/dao/DiskTemplateDaoImpl.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
- *
- * This software is licensed under the GNU General Public License v3 or later.
- *
- * It is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-package com.cloud.storage.dao;
-
-import java.util.List;
-
-import javax.ejb.Local;
-
-import com.cloud.storage.DiskTemplateVO;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-
-@Local(value={DiskTemplateDao.class})
-public class DiskTemplateDaoImpl extends GenericDaoBase implements DiskTemplateDao {
-
- protected SearchBuilder TypeSizeSearch;
-
- protected static final String BY_TYPE_AND_SIZE_CLAUSE = "type = ? AND size = ?";
-
- protected DiskTemplateDaoImpl() {
- super();
-
- TypeSizeSearch = createSearchBuilder();
- TypeSizeSearch.and("type", TypeSizeSearch.entity().getType(), SearchCriteria.Op.EQ);
- TypeSizeSearch.and("size", TypeSizeSearch.entity().getSize(), SearchCriteria.Op.EQ);
- }
-
- public DiskTemplateVO findByTypeAndSize(String type, long size) {
- SearchCriteria sc = TypeSizeSearch.create();
- sc.setParameters("type", type);
- sc.setParameters("size", size);
-
- List vos = listBy(sc);
- assert(vos.size() <= 1); // Should only have one. If more than one something is wrong.
- return vos.size() == 0 ? null : vos.get(0);
- }
-}
diff --git a/core/src/com/cloud/storage/template/DownloadManagerImpl.java b/core/src/com/cloud/storage/template/DownloadManagerImpl.java
index af82c10077e..ef7ce156e83 100644
--- a/core/src/com/cloud/storage/template/DownloadManagerImpl.java
+++ b/core/src/com/cloud/storage/template/DownloadManagerImpl.java
@@ -52,8 +52,10 @@ import com.cloud.storage.template.Processor.FormatInfo;
import com.cloud.storage.template.TemplateDownloader.DownloadCompleteCallback;
import com.cloud.storage.template.TemplateDownloader.Status;
import com.cloud.utils.NumbersUtil;
+import com.cloud.utils.component.Adapter;
import com.cloud.utils.component.Adapters;
import com.cloud.utils.component.ComponentLocator;
+import com.cloud.utils.component.ComponentLocator.ComponentInfo;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.script.OutputInterpreter;
import com.cloud.utils.script.Script;
@@ -770,24 +772,23 @@ public class DownloadManagerImpl implements DownloadManager {
}
s_logger.info("createtmplt.sh found in " + createTmpltScr);
- List processors = new ArrayList();
+ List> processors = new ArrayList>();
Processor processor = new VhdProcessor();
-
processor.configure("VHD Processor", params);
- processors.add(processor);
+ processors.add(new ComponentInfo("VHD Processor", VhdProcessor.class, processor));
processor = new IsoProcessor();
processor.configure("ISO Processor", params);
- processors.add(processor);
+ processors.add(new ComponentInfo("ISO Processor", IsoProcessor.class, processor));
processor = new QCOW2Processor();
processor.configure("QCOW2 Processor", params);
- processors.add(processor);
+ processors.add(new ComponentInfo("QCOW2 Processor", QCOW2Processor.class, processor));
processor = new VmdkProcessor();
processor.configure("VMDK Processor", params);
- processors.add(processor);
+ processors.add(new ComponentInfo("VMDK Processor", VmdkProcessor.class, processor));
_processors = new Adapters("processors", processors);
// Add more processors here.
diff --git a/core/src/com/cloud/storage/template/QCOW2Processor.java b/core/src/com/cloud/storage/template/QCOW2Processor.java
index 6c7fbc6a3e2..b9679cc3dcd 100644
--- a/core/src/com/cloud/storage/template/QCOW2Processor.java
+++ b/core/src/com/cloud/storage/template/QCOW2Processor.java
@@ -23,14 +23,16 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.util.Map;
+import javax.ejb.Local;
import javax.naming.ConfigurationException;
import org.apache.log4j.Logger;
-import com.cloud.storage.StorageLayer;
import com.cloud.storage.Storage.ImageFormat;
+import com.cloud.storage.StorageLayer;
import com.cloud.utils.NumbersUtil;
+@Local(value=Processor.class)
public class QCOW2Processor implements Processor {
private static final Logger s_logger = Logger.getLogger(QCOW2Processor.class);
String _name;
diff --git a/core/src/com/cloud/storage/template/UploadManagerImpl.java b/core/src/com/cloud/storage/template/UploadManagerImpl.java
index 7a791e78c94..ea335a6ebae 100755
--- a/core/src/com/cloud/storage/template/UploadManagerImpl.java
+++ b/core/src/com/cloud/storage/template/UploadManagerImpl.java
@@ -4,9 +4,7 @@ import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import java.text.SimpleDateFormat;
-import java.util.ArrayList;
import java.util.Date;
-import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
@@ -457,20 +455,6 @@ public class UploadManagerImpl implements UploadManager {
scriptsDir = "scripts/storage/secondary";
}
- List processors = new ArrayList();
- _processors = new Adapters("processors", processors);
- Processor processor = new VhdProcessor();
-
- processor.configure("VHD Processor", params);
- processors.add(processor);
-
- processor = new IsoProcessor();
- processor.configure("ISO Processor", params);
- processors.add(processor);
-
- processor = new QCOW2Processor();
- processor.configure("QCOW2 Processor", params);
- processors.add(processor);
// Add more processors here.
threadPool = Executors.newFixedThreadPool(numInstallThreads);
diff --git a/core/src/com/cloud/storage/template/VhdProcessor.java b/core/src/com/cloud/storage/template/VhdProcessor.java
index 6ed4752903a..ededa4028ce 100644
--- a/core/src/com/cloud/storage/template/VhdProcessor.java
+++ b/core/src/com/cloud/storage/template/VhdProcessor.java
@@ -23,13 +23,14 @@ import java.io.IOException;
import java.util.Arrays;
import java.util.Map;
+import javax.ejb.Local;
import javax.naming.ConfigurationException;
import org.apache.log4j.Logger;
import com.cloud.exception.InternalErrorException;
-import com.cloud.storage.StorageLayer;
import com.cloud.storage.Storage.ImageFormat;
+import com.cloud.storage.StorageLayer;
import com.cloud.utils.NumbersUtil;
/**
@@ -38,6 +39,7 @@ import com.cloud.utils.NumbersUtil;
* into the VHD format.
*
*/
+@Local(value=Processor.class)
public class VhdProcessor implements Processor {
private static final Logger s_logger = Logger.getLogger(VhdProcessor.class);
diff --git a/core/src/com/cloud/storage/template/VmdkProcessor.java b/core/src/com/cloud/storage/template/VmdkProcessor.java
index ff748b919d9..52e41bcb3e1 100644
--- a/core/src/com/cloud/storage/template/VmdkProcessor.java
+++ b/core/src/com/cloud/storage/template/VmdkProcessor.java
@@ -3,15 +3,17 @@ package com.cloud.storage.template;
import java.io.File;
import java.util.Map;
+import javax.ejb.Local;
import javax.naming.ConfigurationException;
import org.apache.log4j.Logger;
import com.cloud.exception.InternalErrorException;
-import com.cloud.storage.StorageLayer;
import com.cloud.storage.Storage.ImageFormat;
+import com.cloud.storage.StorageLayer;
import com.cloud.utils.script.Script;
+@Local(value=Processor.class)
public class VmdkProcessor implements Processor {
private static final Logger s_logger = Logger.getLogger(VmdkProcessor.class);
diff --git a/server/src/com/cloud/api/commands/DestroyVm2Cmd.java b/server/src/com/cloud/api/commands/DestroyVm2Cmd.java
index d0e066bd3a6..2d164154069 100644
--- a/server/src/com/cloud/api/commands/DestroyVm2Cmd.java
+++ b/server/src/com/cloud/api/commands/DestroyVm2Cmd.java
@@ -37,7 +37,7 @@ import com.cloud.exception.ResourceUnavailableException;
import com.cloud.user.Account;
import com.cloud.uservm.UserVm;
-@Implementation(description="Destroys a virtual machine. Once destroyed, only the administrator can recover it.")
+@Implementation(description="Destroys a virtual machine. Once destroyed, only the administrator can recover it.", responseObject=UserVmResponse.class)
public class DestroyVm2Cmd extends BaseAsyncCmd {
public static final Logger s_logger = Logger.getLogger(DestroyVm2Cmd.class.getName());
diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java
index 54dc4f3f61a..21c67a5197f 100644
--- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java
+++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java
@@ -24,6 +24,8 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import com.cloud.acl.DomainChecker;
+import com.cloud.acl.SecurityChecker;
import com.cloud.agent.manager.AgentManagerImpl;
import com.cloud.agent.manager.allocator.HostAllocator;
import com.cloud.agent.manager.allocator.PodAllocator;
@@ -54,11 +56,14 @@ import com.cloud.dc.dao.DataCenterIpAddressDaoImpl;
import com.cloud.dc.dao.HostPodDaoImpl;
import com.cloud.dc.dao.PodVlanMapDaoImpl;
import com.cloud.dc.dao.VlanDaoImpl;
+import com.cloud.deploy.DeploymentPlanner;
import com.cloud.deploy.SimplePlanner;
import com.cloud.domain.dao.DomainDaoImpl;
import com.cloud.event.dao.EventDaoImpl;
import com.cloud.ha.CheckOnAgentInvestigator;
+import com.cloud.ha.FenceBuilder;
import com.cloud.ha.HighAvailabilityManagerImpl;
+import com.cloud.ha.Investigator;
import com.cloud.ha.InvestigatorImpl;
import com.cloud.ha.StorageFence;
import com.cloud.ha.XenServerInvestigator;
@@ -72,9 +77,11 @@ import com.cloud.maid.dao.StackMaidDaoImpl;
import com.cloud.maint.UpgradeManagerImpl;
import com.cloud.maint.dao.AgentUpgradeDaoImpl;
import com.cloud.network.ExteralIpAddressAllocator;
+import com.cloud.network.IpAddrAllocator;
import com.cloud.network.NetworkManagerImpl;
import com.cloud.network.configuration.ControlNetworkGuru;
import com.cloud.network.configuration.GuestNetworkGuru;
+import com.cloud.network.configuration.NetworkGuru;
import com.cloud.network.configuration.PodBasedNetworkGuru;
import com.cloud.network.configuration.PublicNetworkGuru;
import com.cloud.network.dao.FirewallRulesDaoImpl;
@@ -94,7 +101,9 @@ import com.cloud.network.security.dao.NetworkGroupVMMapDaoImpl;
import com.cloud.network.security.dao.NetworkGroupWorkDaoImpl;
import com.cloud.network.security.dao.VmRulesetLogDaoImpl;
import com.cloud.offerings.dao.NetworkOfferingDaoImpl;
+import com.cloud.resource.Discoverer;
import com.cloud.server.auth.MD5UserAuthenticator;
+import com.cloud.server.auth.UserAuthenticator;
import com.cloud.service.dao.ServiceOfferingDaoImpl;
import com.cloud.storage.StorageManagerImpl;
import com.cloud.storage.allocator.FirstFitStoragePoolAllocator;
@@ -102,7 +111,6 @@ import com.cloud.storage.allocator.GarbageCollectingStoragePoolAllocator;
import com.cloud.storage.allocator.LocalStoragePoolAllocator;
import com.cloud.storage.allocator.StoragePoolAllocator;
import com.cloud.storage.dao.DiskOfferingDaoImpl;
-import com.cloud.storage.dao.DiskTemplateDaoImpl;
import com.cloud.storage.dao.GuestOSCategoryDaoImpl;
import com.cloud.storage.dao.GuestOSDaoImpl;
import com.cloud.storage.dao.LaunchPermissionDaoImpl;
@@ -121,6 +129,7 @@ import com.cloud.storage.download.DownloadMonitorImpl;
import com.cloud.storage.preallocatedlun.dao.PreallocatedLunDaoImpl;
import com.cloud.storage.secondary.SecondaryStorageDiscoverer;
import com.cloud.storage.secondary.SecondaryStorageManagerImpl;
+import com.cloud.storage.secondary.SecondaryStorageVmAllocator;
import com.cloud.storage.secondary.SecondaryStorageVmDefaultAllocator;
import com.cloud.storage.snapshot.SnapshotManagerImpl;
import com.cloud.storage.snapshot.SnapshotSchedulerImpl;
@@ -137,6 +146,7 @@ import com.cloud.utils.component.ComponentLibrary;
import com.cloud.utils.component.ComponentLocator.ComponentInfo;
import com.cloud.utils.component.Manager;
import com.cloud.utils.db.GenericDao;
+import com.cloud.vm.ItWorkDaoImpl;
import com.cloud.vm.MauriceMoss;
import com.cloud.vm.UserVmManagerImpl;
import com.cloud.vm.dao.ConsoleProxyDaoImpl;
@@ -152,38 +162,47 @@ public class DefaultComponentLibrary implements ComponentLibrary {
protected final Map>> _daos = new LinkedHashMap>>();
- protected void addDao(String name, Class extends GenericDao, ? extends Serializable>> clazz) {
- addDao(name, clazz, null, true);
+ protected ComponentInfo extends GenericDao, ? extends Serializable>> addDao(String name, Class extends GenericDao, ? extends Serializable>> clazz) {
+ return addDao(name, clazz, new ArrayList>(), true);
}
- protected void addDao(String name, Class extends GenericDao, ? extends Serializable>> clazz, List> params,
- boolean singleton) {
- ComponentInfo> ComponentInfo = new ComponentInfo>(name, clazz, params, singleton);
- for (String key : ComponentInfo.getKeys()) {
- _daos.put(key, ComponentInfo);
+ protected ComponentInfo extends GenericDao, ? extends Serializable>> addDao(String name, Class extends GenericDao, ? extends Serializable>> clazz, List> params, boolean singleton) {
+ ComponentInfo> componentInfo = new ComponentInfo>(name, clazz, params, singleton);
+ for (String key : componentInfo.getKeys()) {
+ _daos.put(key, componentInfo);
}
+ return componentInfo;
}
- protected void addDaos() {
+ protected void populateDaos() {
addDao("StackMaidDao", StackMaidDaoImpl.class);
addDao("VMTemplateZoneDao", VMTemplateZoneDaoImpl.class);
addDao("DomainRouterDao", DomainRouterDaoImpl.class);
addDao("HostDao", HostDaoImpl.class);
addDao("VMInstanceDao", VMInstanceDaoImpl.class);
addDao("UserVmDao", UserVmDaoImpl.class);
- addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class);
- addDao("DiskOfferingDao", DiskOfferingDaoImpl.class);
- addDao("DataCenterDao", DataCenterDaoImpl.class);
- addDao("HostPodDao", HostPodDaoImpl.class);
+ ComponentInfo extends GenericDao, ? extends Serializable>> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class);
+ info.addParameter("cache.size", "50");
+ info.addParameter("cache.time.to.live", "600");
+ info = addDao("DiskOfferingDao", DiskOfferingDaoImpl.class);
+ info.addParameter("cache.size", "50");
+ info.addParameter("cache.time.to.live", "600");
+ info = addDao("DataCenterDao", DataCenterDaoImpl.class);
+ info.addParameter("cache.size", "50");
+ info.addParameter("cache.time.to.live", "600");
+ info = addDao("HostPodDao", HostPodDaoImpl.class);
+ info.addParameter("cache.size", "50");
+ info.addParameter("cache.time.to.live", "600");
addDao("IPAddressDao", IPAddressDaoImpl.class);
addDao("VlanDao", VlanDaoImpl.class);
addDao("PodVlanMapDao", PodVlanMapDaoImpl.class);
addDao("AccountVlanMapDao", AccountVlanMapDaoImpl.class);
addDao("VolumeDao", VolumeDaoImpl.class);
addDao("EventDao", EventDaoImpl.class);
- addDao("UserDao", UserDaoImpl.class);
+ info = addDao("UserDao", UserDaoImpl.class);
+ info.addParameter("cache.size", "5000");
+ info.addParameter("cache.time.to.live", "300");
addDao("UserStatisticsDao", UserStatisticsDaoImpl.class);
- addDao("DiskTemplateDao", DiskTemplateDaoImpl.class);
addDao("FirewallRulesDao", FirewallRulesDaoImpl.class);
addDao("LoadBalancerDao", LoadBalancerDaoImpl.class);
addDao("NetworkRuleConfigDao", NetworkRuleConfigDaoImpl.class);
@@ -207,7 +226,10 @@ public class DefaultComponentLibrary implements ComponentLibrary {
addDao("VMTemplatePoolDao", VMTemplatePoolDaoImpl.class);
addDao("LaunchPermissionDao", LaunchPermissionDaoImpl.class);
addDao("ConfigurationDao", ConfigurationDaoImpl.class);
- addDao("VMTemplateDao", VMTemplateDaoImpl.class);
+ info = addDao("VMTemplateDao", VMTemplateDaoImpl.class);
+ info.addParameter("cache.size", "100");
+ info.addParameter("cache.time.to.live", "600");
+ info.addParameter("routing.uniquename", "routing");
addDao("HighAvailabilityDao", HighAvailabilityDaoImpl.class);
addDao("ConsoleProxyDao", ConsoleProxyDaoImpl.class);
addDao("SecondaryStorageVmDao", SecondaryStorageVmDaoImpl.class);
@@ -234,6 +256,7 @@ public class DefaultComponentLibrary implements ComponentLibrary {
addDao("InstanceGroupVMMapDao", InstanceGroupVMMapDaoImpl.class);
addDao("RemoteAccessVpnDao", RemoteAccessVpnDaoImpl.class);
addDao("VpnUserDao", VpnUserDaoImpl.class);
+ addDao("ItWorkDao", ItWorkDaoImpl.class);
}
Map> _managers = new HashMap>();
@@ -242,23 +265,24 @@ public class DefaultComponentLibrary implements ComponentLibrary {
@Override
public synchronized Map>> getDaos() {
if (_daos.size() == 0) {
- addDaos();
+ populateDaos();
}
return _daos;
}
- protected void addManager(String name, Class extends Manager> clazz, List> params, boolean singleton) {
- ComponentInfo ComponentInfo = new ComponentInfo(name, clazz, params, singleton);
- for (String key : ComponentInfo.getKeys()) {
- _managers.put(key, ComponentInfo);
+ protected ComponentInfo addManager(String name, Class extends Manager> clazz, List> params, boolean singleton) {
+ ComponentInfo info = new ComponentInfo(name, clazz, params, singleton);
+ for (String key : info.getKeys()) {
+ _managers.put(key, info);
}
+ return info;
}
- protected void addManager(String name, Class extends Manager> clazz) {
- addManager(name, clazz, null, true);
+ protected ComponentInfo addManager(String name, Class extends Manager> clazz) {
+ return addManager(name, clazz, new ArrayList>(), true);
}
- protected void addManagers() {
+ protected void populateManagers() {
addManager("StackMaidManager", StackMaidManagerImpl.class);
addManager("agent manager", AgentManagerImpl.class);
addManager("account manager", AccountManagerImpl.class);
@@ -285,7 +309,7 @@ public class DefaultComponentLibrary implements ComponentLibrary {
addManager("DomainRouterManager", DomainRouterManagerImpl.class);
}
- protected void addAdapterChain(Class interphace, List>> adapters) {
+ protected List> addAdapterChain(Class interphace, List>> adapters) {
ArrayList> lst = new ArrayList>(adapters.size());
for (Pair> adapter : adapters) {
@SuppressWarnings("unchecked")
@@ -293,17 +317,24 @@ public class DefaultComponentLibrary implements ComponentLibrary {
lst.add(new ComponentInfo(adapter.first(), clazz));
}
_adapters.put(interphace.getName(), lst);
+ return lst;
+ }
+
+ protected void addOneAdapter(Class interphace, String name, Class extends T> adapterClass) {
+ List>> adapters = new ArrayList>>();
+ adapters.add(new Pair>(name, adapterClass));
+ addAdapterChain(interphace, adapters);
}
@Override
public synchronized Map> getManagers() {
if (_managers.size() == 0) {
- addManagers();
+ populateManagers();
}
return _managers;
}
- public void addAllAdapters() {
+ protected void populateAdapters() {
List>> hostAllocators = new ArrayList>>();
hostAllocators.add(new Pair>("FirstFitRouting", RecreateHostAllocator.class));
@@ -317,51 +348,42 @@ public class DefaultComponentLibrary implements ComponentLibrary {
poolAllocators.add(new Pair>("GarbageCollecting", GarbageCollectingStoragePoolAllocator.class));
addAdapterChain(StoragePoolAllocator.class, poolAllocators);
- List>> podAllocators = new ArrayList>>();
- podAllocators.add(new Pair>("User First", UserConcentratedAllocator.class));
- addAdapterChain(PodAllocator.class, podAllocators);
-
- List>> proxyAllocators = new ArrayList>>();
- proxyAllocators.add(new Pair>("Balance", ConsoleProxyBalanceAllocator.class));
- addAdapterChain(ConsoleProxyAllocator.class, proxyAllocators);
-
- // NetworkGuru
- addAdapterChain("GuestNetworkGuru", GuestNetworkGuru.class);
- addAdapterChain("PublicNetworkGuru", PublicNetworkGuru.class);
- addAdapterChain("PodBasedNetworkGuru", PodBasedNetworkGuru.class);
- addAdapterChain("ControlNetworkGuru", ControlNetworkGuru.class);
-
- // Secondary Storage Vm Allocator
- addAdapterChain("Balance", SecondaryStorageVmDefaultAllocator.class);
+ List>> networkGurus = new ArrayList>>();
+ networkGurus.add(new Pair>("GuestNetworkGuru", GuestNetworkGuru.class));
+ networkGurus.add(new Pair>("PublicNetworkGuru", PublicNetworkGuru.class));
+ networkGurus.add(new Pair>("PodBasedNetworkGuru", PodBasedNetworkGuru.class));
+ networkGurus.add(new Pair>("ControlNetworkGuru", ControlNetworkGuru.class));
+ addAdapterChain(NetworkGuru.class, networkGurus);
- // Ip Address Allocator
- addAdapterChain("Basic", ExteralIpAddressAllocator.class);
-
+ addOneAdapter(PodAllocator.class, "UserConcentratedPodAllocator", UserConcentratedAllocator.class);
+ addOneAdapter(ConsoleProxyAllocator.class, "ConsoleProxyBalanceAllocator", ConsoleProxyBalanceAllocator.class);
+ addOneAdapter(SecondaryStorageVmAllocator.class, "SecondaryStorageVmDefaultBalance", SecondaryStorageVmDefaultAllocator.class);
+ addOneAdapter(IpAddrAllocator.class, "BasicExternalIpAddressAllocator", ExteralIpAddressAllocator.class);
+ addOneAdapter(UserAuthenticator.class, "MD5UserAuthenticator", MD5UserAuthenticator.class);
- // User Authenticator
- addAdapterChain("MD5", MD5UserAuthenticator.class);
- // HA Investigator
- addAdapterChain("SimpleInvestigator", CheckOnAgentInvestigator.class);
- addAdapterChain("XenServerInvestigator", XenServerInvestigator.class);
- addAdapterChain("PingInvestigator", InvestigatorImpl.class);
+ List>> investigators = new ArrayList>>();
+ investigators.add(new Pair>("SimpleInvestigator", CheckOnAgentInvestigator.class));
+ investigators.add(new Pair>("XenServerInvestigator", XenServerInvestigator.class));
+ investigators.add(new Pair>("PingInvestigator", InvestigatorImpl.class));
+ addAdapterChain(Investigator.class, investigators);
+
+ addOneAdapter(FenceBuilder.class, "StorageFenceBuilder", StorageFence.class);
+
+ List>> discovers = new ArrayList>>();
+ discovers.add(new Pair>("XCP Agent", XcpServerDiscoverer.class));
+ discovers.add(new Pair>("SecondaryStorage", SecondaryStorageDiscoverer.class));
+ discovers.add(new Pair>("KVM Agent", KvmServerDiscoverer.class));
+ addAdapterChain(Discoverer.class, discovers);
- // HA Fence Builder
- addAdapterChain("StorageFenceBuilder", StorageFence.class);
-
- // Discoverer
- addAdapterChain("XCP Agent", XcpServerDiscoverer.class);
- addAdapterChain("SecondaryStorage", SecondaryStorageDiscoverer.class);
- addAdapterChain("KVM Agent", KvmServerDiscoverer.class);
-
- // Deployment Planner
- addAdapterChain("Simple", SimplePlanner.class);
+ addOneAdapter(SecurityChecker.class, "DomainChecker", DomainChecker.class);
+ addOneAdapter(DeploymentPlanner.class, "SimpleDeploymentPlanner", SimplePlanner.class);
}
@Override
public synchronized Map>> getAdapters() {
if (_adapters.size() == 0) {
- addAdapters();
+ populateAdapters();
}
return _adapters;
}
diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
index 0059424e9ef..9031386bfbd 100644
--- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
+++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
@@ -531,7 +531,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach
@Override
public ConsoleProxyVO startProxy(long proxyVmId, long startEventId) {
try {
- return start2(proxyVmId, startEventId);
+ return start(proxyVmId, startEventId);
} catch (StorageUnavailableException e) {
s_logger.warn("Exception while trying to start console proxy", e);
return null;
@@ -881,7 +881,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach
if (s_logger.isDebugEnabled())
s_logger.debug("Assign console proxy from a newly started instance for request from data center : " + dataCenterId);
- Map context = createProxyInstance2(dataCenterId);
+ Map context = createProxyInstance(dataCenterId);
long proxyVmId = (Long) context.get("proxyVmId");
if (proxyVmId == 0) {
@@ -921,7 +921,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach
if (s_logger.isDebugEnabled())
s_logger.debug("Assign console proxy from a newly started instance for request from data center : " + dataCenterId);
- Map context = createProxyInstance2(dataCenterId);
+ Map context = createProxyInstance(dataCenterId);
long proxyVmId = (Long) context.get("proxyVmId");
if (proxyVmId == 0) {
@@ -1468,7 +1468,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach
try {
if (proxyLock.lock(ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_SYNC)) {
try {
- readyProxy = start2(readyProxy.getId(), 0);
+ readyProxy = start(readyProxy.getId(), 0);
} finally {
proxyLock.unlock();
}
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java
index 8f8ad2b5253..22b06f3165a 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -49,13 +49,11 @@ import com.cloud.api.ServerApiException;
import com.cloud.api.commands.AddVpnUserCmd;
import com.cloud.api.commands.AssignToLoadBalancerRuleCmd;
import com.cloud.api.commands.AssociateIPAddrCmd;
-import com.cloud.api.commands.CreateIpForwardingRuleCmd;
-import com.cloud.api.commands.CreatePortForwardingRuleCmd;
import com.cloud.api.commands.CreateLoadBalancerRuleCmd;
+import com.cloud.api.commands.CreatePortForwardingRuleCmd;
import com.cloud.api.commands.CreateRemoteAccessVpnCmd;
-import com.cloud.api.commands.DeleteIpForwardingRuleCmd;
-import com.cloud.api.commands.DeletePortForwardingRuleCmd;
import com.cloud.api.commands.DeleteLoadBalancerRuleCmd;
+import com.cloud.api.commands.DeletePortForwardingRuleCmd;
import com.cloud.api.commands.DeleteRemoteAccessVpnCmd;
import com.cloud.api.commands.DisassociateIPAddrCmd;
import com.cloud.api.commands.ListPortForwardingRulesCmd;
@@ -125,7 +123,6 @@ import com.cloud.resource.Resource.ReservationStrategy;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.storage.StorageManager;
-import com.cloud.storage.dao.DiskTemplateDao;
import com.cloud.storage.dao.GuestOSDao;
import com.cloud.storage.dao.StoragePoolDao;
import com.cloud.storage.dao.VMTemplateDao;
@@ -167,7 +164,6 @@ import com.cloud.vm.UserVmVO;
import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineProfile;
-import com.cloud.vm.dao.DomainRouterDao;
import com.cloud.vm.dao.NicDao;
import com.cloud.vm.dao.UserVmDao;
@@ -186,7 +182,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
@Inject LoadBalancerVMMapDao _loadBalancerVMMapDao = null;
@Inject IPAddressDao _ipAddressDao = null;
@Inject VMTemplateDao _templateDao = null;
- @Inject DiskTemplateDao _diskDao = null;
@Inject UserDao _userDao = null;
@Inject AccountDao _accountDao = null;
@Inject DomainDao _domainDao = null;
diff --git a/server/src/com/cloud/network/router/DomainRouterManagerImpl.java b/server/src/com/cloud/network/router/DomainRouterManagerImpl.java
index f0bb926b5d8..0afd68fe3b7 100644
--- a/server/src/com/cloud/network/router/DomainRouterManagerImpl.java
+++ b/server/src/com/cloud/network/router/DomainRouterManagerImpl.java
@@ -134,7 +134,6 @@ import com.cloud.storage.StorageManager;
import com.cloud.storage.StoragePoolVO;
import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.VolumeVO;
-import com.cloud.storage.dao.DiskTemplateDao;
import com.cloud.storage.dao.GuestOSDao;
import com.cloud.storage.dao.StoragePoolDao;
import com.cloud.storage.dao.VMTemplateDao;
@@ -195,7 +194,6 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute
@Inject LoadBalancerVMMapDao _loadBalancerVMMapDao = null;
@Inject IPAddressDao _ipAddressDao = null;
@Inject VMTemplateDao _templateDao = null;
- @Inject DiskTemplateDao _diskDao = null;
@Inject DomainRouterDao _routerDao = null;
@Inject UserDao _userDao = null;
@Inject AccountDao _accountDao = null;
diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/com/cloud/server/ManagementServer.java
index 5eb61d01842..a7c3ecb95b4 100755
--- a/server/src/com/cloud/server/ManagementServer.java
+++ b/server/src/com/cloud/server/ManagementServer.java
@@ -75,9 +75,9 @@ import com.cloud.api.commands.StartSystemVm2Cmd;
import com.cloud.api.commands.StopSystemVm2Cmd;
import com.cloud.api.commands.StopSystemVmCmd;
import com.cloud.api.commands.UpdateDomainCmd;
-import com.cloud.api.commands.UpdatePortForwardingRuleCmd;
import com.cloud.api.commands.UpdateIsoCmd;
import com.cloud.api.commands.UpdateIsoPermissionsCmd;
+import com.cloud.api.commands.UpdatePortForwardingRuleCmd;
import com.cloud.api.commands.UpdateTemplateCmd;
import com.cloud.api.commands.UpdateTemplatePermissionsCmd;
import com.cloud.api.commands.UpdateVMGroupCmd;
@@ -111,7 +111,6 @@ import com.cloud.network.VpnUserVO;
import com.cloud.network.security.NetworkGroupVO;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.storage.DiskOfferingVO;
-import com.cloud.storage.DiskTemplateVO;
import com.cloud.storage.GuestOSCategoryVO;
import com.cloud.storage.GuestOSVO;
import com.cloud.storage.SnapshotPolicyVO;
@@ -642,12 +641,6 @@ public interface ManagementServer {
List searchForUsage(Criteria c);
*/
- /**
- * Obtains a list of all active DiskTemplates.
- * @return list of DiskTemplates
- */
- List listAllActiveDiskTemplates();
-
/**
* Obtains a list of all templates.
* @return list of VMTemplates
diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java
index 0f2119fa6aa..e70ada86097 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -162,7 +162,7 @@ import com.cloud.dc.VlanVO;
import com.cloud.dc.dao.AccountVlanMapDao;
import com.cloud.dc.dao.ClusterDao;
import com.cloud.dc.dao.DataCenterDao;
-import com.cloud.dc.dao.DataCenterIpAddressDaoImpl;
+import com.cloud.dc.dao.DataCenterIpAddressDao;
import com.cloud.dc.dao.HostPodDao;
import com.cloud.dc.dao.PodVlanMapDao;
import com.cloud.dc.dao.VlanDao;
@@ -212,7 +212,6 @@ import com.cloud.server.auth.UserAuthenticator;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.storage.DiskOfferingVO;
-import com.cloud.storage.DiskTemplateVO;
import com.cloud.storage.GuestOSCategoryVO;
import com.cloud.storage.GuestOSVO;
import com.cloud.storage.LaunchPermissionVO;
@@ -237,7 +236,6 @@ import com.cloud.storage.Volume.VolumeType;
import com.cloud.storage.VolumeStats;
import com.cloud.storage.VolumeVO;
import com.cloud.storage.dao.DiskOfferingDao;
-import com.cloud.storage.dao.DiskTemplateDao;
import com.cloud.storage.dao.GuestOSCategoryDao;
import com.cloud.storage.dao.GuestOSDao;
import com.cloud.storage.dao.LaunchPermissionDao;
@@ -316,7 +314,7 @@ public class ManagementServerImpl implements ManagementServer {
private final NetworkGroupDao _networkSecurityGroupDao;
private final LoadBalancerDao _loadBalancerDao;
private final IPAddressDao _publicIpAddressDao;
- private final DataCenterIpAddressDaoImpl _privateIpAddressDao;
+ private final DataCenterIpAddressDao _privateIpAddressDao;
private final LoadBalancerVMMapDao _loadBalancerVMMapDao;
private final DomainRouterDao _routerDao;
private final ConsoleProxyDao _consoleProxyDao;
@@ -359,7 +357,6 @@ public class ManagementServerImpl implements ManagementServer {
private final UserStatisticsDao _userStatsDao;
private final VMInstanceDao _vmInstanceDao;
private final VolumeDao _volumeDao;
- private final DiskTemplateDao _diskTemplateDao;
private final AlertManager _alertMgr;
private final AsyncJobDao _jobDao;
private final AsyncJobManager _asyncMgr;
@@ -425,7 +422,7 @@ public class ManagementServerImpl implements ManagementServer {
_networkSecurityGroupDao = locator.getDao(NetworkGroupDao.class);
_loadBalancerDao = locator.getDao(LoadBalancerDao.class);
_publicIpAddressDao = locator.getDao(IPAddressDao.class);
- _privateIpAddressDao = locator.getDao(DataCenterIpAddressDaoImpl.class);
+ _privateIpAddressDao = locator.getDao(DataCenterIpAddressDao.class);
_loadBalancerVMMapDao = locator.getDao(LoadBalancerVMMapDao.class);
_consoleProxyDao = locator.getDao(ConsoleProxyDao.class);
_secStorageVmDao = locator.getDao(SecondaryStorageVmDao.class);
@@ -458,7 +455,6 @@ public class ManagementServerImpl implements ManagementServer {
_userStatsDao = locator.getDao(UserStatisticsDao.class);
_vmInstanceDao = locator.getDao(VMInstanceDao.class);
_volumeDao = locator.getDao(VolumeDao.class);
- _diskTemplateDao = locator.getDao(DiskTemplateDao.class);
_alertMgr = locator.getManager(AlertManager.class);
_asyncMgr = locator.getManager(AsyncJobManager.class);
_tmpltMgr = locator.getManager(TemplateManager.class);
@@ -3195,11 +3191,6 @@ public class ManagementServerImpl implements ManagementServer {
return _publicIpAddressDao.search(sc, searchFilter);
}
- @Override
- public List listAllActiveDiskTemplates() {
- return _diskTemplateDao.listAll();
- }
-
@Override
public UserAccount authenticateUser(String username, String password, Long domainId, Map requestParameters) {
UserAccount user = null;
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java
index 3405bf5755f..2fb1d60f451 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -161,7 +161,6 @@ import com.cloud.storage.Volume;
import com.cloud.storage.Volume.VolumeType;
import com.cloud.storage.VolumeVO;
import com.cloud.storage.dao.DiskOfferingDao;
-import com.cloud.storage.dao.DiskTemplateDao;
import com.cloud.storage.dao.GuestOSCategoryDao;
import com.cloud.storage.dao.GuestOSDao;
import com.cloud.storage.dao.SnapshotDao;
@@ -218,7 +217,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
@Inject UserStatisticsDao _userStatsDao = null;
@Inject VMTemplateDao _templateDao = null;
@Inject VMTemplateHostDao _templateHostDao = null;
- @Inject DiskTemplateDao _diskDao = null;
@Inject DomainDao _domainDao = null;
@Inject ResourceLimitDao _limitDao = null;
@Inject UserVmDao _vmDao = null;
diff --git a/setup/db/create-index-fk.sql b/setup/db/create-index-fk.sql
index fa5dd50dce9..812160bffea 100755
--- a/setup/db/create-index-fk.sql
+++ b/setup/db/create-index-fk.sql
@@ -1,6 +1,3 @@
-ALTER TABLE `cloud`.`disk_template_ref` ADD INDEX `i_disk_template_ref__removed`(`removed`);
-ALTER TABLE `cloud`.`disk_template_ref` ADD INDEX `i_disk_template_ref__type__size`(`type`, `size`);
-
ALTER TABLE `cloud`.`volumes` ADD INDEX `i_volumes__removed`(`removed`);
ALTER TABLE `cloud`.`volumes` ADD INDEX `i_volumes__pod_id`(`pod_id`);
ALTER TABLE `cloud`.`volumes` ADD INDEX `i_volumes__data_center_id`(`data_center_id`);
diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql
index 4602ff830f4..c3f375c5440 100755
--- a/setup/db/create-schema.sql
+++ b/setup/db/create-schema.sql
@@ -18,7 +18,6 @@ DROP TABLE IF EXISTS `cloud`.`host_zone_ref`;
DROP TABLE IF EXISTS `cloud`.`data_ceneter`;
DROP TABLE IF EXISTS `cloud`.`volumes`;
DROP TABLE IF EXISTS `cloud`.`storage`;
-DROP TABLE IF EXISTS `cloud`.`disk_template_ref`;
DROP TABLE IF EXISTS `cloud`.`data_center`;
DROP TABLE IF EXISTS `cloud`.`pricing`;
DROP TABLE IF EXISTS `cloud`.`sequence`;
@@ -278,19 +277,6 @@ INSERT INTO `cloud`.`sequence` (name, value) VALUES ('storage_pool_seq', 200);
INSERT INTO `cloud`.`sequence` (name, value) VALUES ('volume_seq', 1);
INSERT INTO `cloud`.`sequence` (name, value) VALUES ('network_configuration_seq', 1);
-CREATE TABLE `cloud`.`disk_template_ref` (
- `id` bigint unsigned NOT NULL auto_increment,
- `description` varchar(255) NOT NULL,
- `host` varchar(255) NOT NULL COMMENT 'host on which the server exists',
- `parent` varchar(255) NOT NULL COMMENT 'parent path',
- `path` varchar(255) NOT NULL,
- `size` int(10) unsigned NOT NULL COMMENT 'size of the disk',
- `type` varchar(255) NOT NULL COMMENT 'file system type',
- `created` datetime NOT NULL COMMENT 'Date created',
- `removed` datetime COMMENT 'Date removed if not null',
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
CREATE TABLE `cloud`.`volumes` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primary Key',
`account_id` bigint unsigned NOT NULL COMMENT 'owner. foreign key to account table',
diff --git a/utils/src/com/cloud/utils/component/Adapters.java b/utils/src/com/cloud/utils/component/Adapters.java
index 86b06b85a5e..04cad7df26c 100755
--- a/utils/src/com/cloud/utils/component/Adapters.java
+++ b/utils/src/com/cloud/utils/component/Adapters.java
@@ -25,6 +25,7 @@ import java.util.List;
import java.util.Map;
import com.cloud.utils.EnumerationImpl;
+import com.cloud.utils.component.ComponentLocator.ComponentInfo;
/**
* Adapters is a simple wrapper around the list of adapters. The reason is
@@ -34,11 +35,13 @@ import com.cloud.utils.EnumerationImpl;
* the iterator even during dynamic reloading.
*
**/
-public class Adapters implements Iterable {
- private Map _map;
+public class Adapters implements Iterable {
+ protected Map _map;
+ protected List> _infos;
+
protected String _name;
- public Adapters(String name, List adapters) {
+ public Adapters(String name, List> adapters) {
_name = name;
set(adapters);
}
@@ -65,12 +68,15 @@ public class Adapters implements Iterable {
return _map.values();
}
- protected void set(List adapters) {
+ protected void set(List> adapters) {
HashMap map = new HashMap(adapters.size());
- for (T adapter : adapters) {
- map.put(adapter.getName(), adapter);
+ for (ComponentInfo adapter : adapters) {
+ @SuppressWarnings("unchecked")
+ T t = (T)adapter.instance;
+ map.put(adapter.getName(), t);
}
this._map = map;
+ this._infos = adapters;
}
public T get(String name) {
diff --git a/utils/src/com/cloud/utils/component/ComponentLocator.java b/utils/src/com/cloud/utils/component/ComponentLocator.java
index 5ad8b8d630d..d913d540e28 100755
--- a/utils/src/com/cloud/utils/component/ComponentLocator.java
+++ b/utils/src/com/cloud/utils/component/ComponentLocator.java
@@ -32,6 +32,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import javax.ejb.Local;
import javax.management.InstanceAlreadyExistsException;
@@ -72,55 +73,38 @@ import com.cloud.utils.mgmt.ManagementBean;
*
**/
@SuppressWarnings("unchecked")
-public class ComponentLocator extends Thread implements ComponentLocatorMBean {
+public class ComponentLocator implements ComponentLocatorMBean {
protected static final Logger s_logger = Logger.getLogger(ComponentLocator.class);
- protected static HashMap s_singletons = new HashMap(111);
+ protected static ConcurrentHashMap, Singleton> s_singletons = new ConcurrentHashMap, Singleton>(111);
+ static HashMap s_locators = new HashMap();
private static boolean s_doOnce = false;
protected static final Callback[] s_callbacks = new Callback[] { NoOp.INSTANCE, new DatabaseCallback() };
protected static final CallbackFilter s_callbackFilter = new DatabaseCallbackFilter();
protected static final HashMap, InjectInfo> s_factories = new HashMap, InjectInfo>();
- protected static HashMap s_locatorMap = new HashMap();
- protected static HashMap _componentMap = new HashMap();
- protected static HashMap _implementationClassMap = new HashMap();
- protected HashMap> _adapterMap;
- protected HashMap> _managerMap;
- protected LinkedHashMap>> _daoMap;
- protected ComponentLocator _parentLocator;
- protected String _serverName;
+ protected HashMap> _adapterMap;
+ protected HashMap> _managerMap;
+ protected LinkedHashMap>> _daoMap;
+ protected ComponentLocator _parentLocator;
+ protected String _serverName;
+ protected Object _component;
public ComponentLocator(String server) {
_parentLocator = null;
_serverName = server;
- Runtime.getRuntime().addShutdownHook(this);
}
public String getLocatorName() {
return _serverName;
}
-
+
@Override
- public synchronized void run() {
- Iterator> itAdapters = _adapterMap.values().iterator();
- while (itAdapters.hasNext()) {
- Adapters extends Adapter> adapters = itAdapters.next();
- itAdapters.remove();
- Enumeration extends Adapter> it = adapters.enumeration();
- while (it.hasMoreElements()) {
- Adapter adapter = it.nextElement();
- adapter.stop();
- }
- }
-
- Iterator> itManagers = _managerMap.values().iterator();
- while (itManagers.hasNext()) {
- ComponentInfo manager = itManagers.next();
- itManagers.remove();
- manager.instance.stop();
- }
+ public String getName() {
+ return getLocatorName();
}
+
protected void parse(String filename, String log4jFile) {
try {
SAXParserFactory spfactory = SAXParserFactory.newInstance();
@@ -139,31 +123,43 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
XmlHandler handler = new XmlHandler(_serverName);
saxParser.parse(file, handler);
- if (handler.parent != null) {
- _parentLocator = getLocatorInternal(handler.parent, false, filename, log4jFile);
- }
-
_daoMap = new LinkedHashMap>>();
_managerMap = new LinkedHashMap>();
_adapterMap = new HashMap>();
- if (handler.library != null) {
- Class> clazz = Class.forName(handler.library);
- ComponentLibrary library = (ComponentLibrary)clazz.newInstance();
- _managerMap.putAll(library.getManagers());
- _daoMap.putAll(library.getDaos());
- createAdaptersMap(library.getAdapters());
+ if (handler.parent != null) {
+ synchronized(s_locators) {
+ _parentLocator = s_locators.get(handler.parent);
+ if (_parentLocator == null) {
+ _parentLocator = new ComponentLocator(handler.parent);
+ s_locators.put(handler.parent, _parentLocator);
+ _parentLocator.parse(filename, log4jFile);
+ }
+ }
}
- _managerMap.putAll(handler.managers);
- _daoMap.putAll(handler.daos);
+ ComponentLibrary library = null;
+ if (handler.library != null) {
+ Class> clazz = Class.forName(handler.library);
+ library = (ComponentLibrary)clazz.newInstance();
+ _daoMap.putAll(library.getDaos());
+ _managerMap.putAll(library.getManagers());
+ }
+ _daoMap.putAll(handler.daos);
+ _managerMap.putAll(handler.managers);
+
startDaos(); // daos should not be using managers and adapters.
- createAdaptersMap(handler.adapters);
- instantiateManagers();
+ if (library != null) {
+ instantiateAdapters(library.getAdapters());
+ }
instantiateAdapters(handler.adapters);
+ instantiateManagers();
+ _component = createInstance(handler.componentClass, true, true);
configureManagers();
+ configureAdapters();
startManagers();
startAdapters();
+
} catch (ParserConfigurationException e) {
s_logger.error("Unable to load " + _serverName + " due to errors while parsing " + filename, e);
@@ -192,13 +188,29 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
for (Map.Entry>> entry : entries) {
ComponentInfo> info = entry.getValue();
- s_logger.info("Starting DAO: " + info.name);
try {
info.instance = (GenericDao, ?>)createInstance(info.clazz, true, info.singleton);
- inject(info.clazz, info.instance);
- if (!info.instance.configure(info.name, info.params)) {
- s_logger.error("Unable to configure DAO: " + info.name);
- System.exit(1);
+ if (info.singleton) {
+ s_logger.info("Starting singleton DAO: " + info.name);
+ Singleton singleton = s_singletons.get(info.clazz);
+ if (singleton.state == Singleton.State.Instantiated) {
+ inject(info.clazz, info.instance);
+ singleton.state = Singleton.State.Injected;
+ }
+ if (singleton.state == Singleton.State.Injected) {
+ if (!info.instance.configure(info.name, info.params)) {
+ s_logger.error("Unable to configure DAO: " + info.name);
+ System.exit(1);
+ }
+ singleton.state = Singleton.State.Started;
+ }
+ } else {
+ s_logger.info("Starting DAO: " + info.name);
+ inject(info.clazz, info.instance);
+ if (!info.instance.configure(info.name, info.params)) {
+ s_logger.error("Unable to configure DAO: " + info.name);
+ System.exit(1);
+ }
}
} catch (ConfigurationException e) {
s_logger.error("Unable to configure DAO: " + info.name, e);
@@ -215,13 +227,13 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
private static Object createInstance(Class> clazz, boolean inject, boolean singleton, Object... args) {
Factory factory = null;
- Object entity = null;
+ Singleton entity = null;
synchronized(s_factories) {
if (singleton) {
- entity = s_singletons.get(clazz.toString());
+ entity = s_singletons.get(clazz);
if (entity != null) {
s_logger.debug("Found singleton instantiation for " + clazz.toString());
- return entity;
+ return entity.singleton;
}
}
InjectInfo info = s_factories.get(clazz);
@@ -263,22 +275,23 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
throw new CloudRuntimeException("Unable to find constructor to match parameters given: " + clazz.getName());
}
- entity = factory.newInstance(argTypes, args, s_callbacks);
+ entity = new Singleton(factory.newInstance(argTypes, args, s_callbacks));
} else {
- entity = factory.newInstance(s_callbacks);
+ entity = new Singleton(factory.newInstance(s_callbacks));
}
if (inject) {
- inject(clazz, entity);
+ inject(clazz, entity.singleton);
+ entity.state = Singleton.State.Injected;
}
if (singleton) {
synchronized(s_factories) {
- s_singletons.put(clazz.toString(), entity);
+ s_singletons.put(clazz, entity);
}
}
- return entity;
+ return entity.singleton;
}
@@ -293,50 +306,22 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
}
if (info == null) {
- return null;
+ throw new CloudRuntimeException("Unable to find DAO " + name);
}
_daoMap.put(name, info);
return info;
}
- private static synchronized Object getComponent(Class> clazz) {
- String name = clazz.getName();
- try {
- Object component = _componentMap.get(name);
- if (component == null) {
- Class> impl = Class.forName(name);
- component = createInstance(impl, true, true);
- _componentMap.put(name, component);
- }
- return component;
- } catch (ClassNotFoundException e) {
- s_logger.error("Unable to load " + name + " due to ", e);
- System.exit(1);
- }
- return null;
- }
-
public static synchronized Object getComponent(String componentName) {
ComponentLocator locator = s_locators.get(componentName);
if (locator == null) {
- ComponentLocator.getLocator(componentName);
+ locator = ComponentLocator.getLocator(componentName);
}
- String implementationClass = _implementationClassMap.get(componentName);
- if (implementationClass != null) {
- try {
- Class> clazz = Class.forName(implementationClass);
- return getComponent(clazz);
- } catch (Exception ex) {
- s_logger.error("Failed to get component " + componentName + ", caused by exception " + ex, ex);
- }
- } else {
- s_logger.warn("Unable to find component with name: " + componentName);
- }
- return null;
+ return locator._component;
}
- public > T getDao(Class clazz) {
+ public > T getDao(Class clazz) {
ComponentInfo> info = getDao(clazz.getName());
return info != null ? (T)info.instance : null;
}
@@ -356,17 +341,40 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
Set>> entries = _managerMap.entrySet();
for (Map.Entry> entry : entries) {
ComponentInfo info = entry.getValue();
- s_logger.info("Injecting Manager: " + info.name);
- inject(info.clazz, info.instance);
+ if (info.singleton) {
+ Singleton s = s_singletons.get(info.clazz);
+ if (s.state == Singleton.State.Instantiated) {
+ s_logger.info("Injecting singleton Manager: " + info.name);
+ inject(info.clazz, info.instance);
+ s.state = Singleton.State.Injected;
+ }
+ } else {
+ s_logger.info("Injecting Manager: " + info.name);
+ inject(info.clazz, info.instance);
+ }
}
for (Map.Entry> entry : entries) {
ComponentInfo info = entry.getValue();
- s_logger.info("Configuring Manager: " + info.name);
- try {
- info.instance.configure(info.name, info.params);
- } catch (ConfigurationException e) {
- s_logger.error("Unable to configure manager: " + info.name, e);
- System.exit(1);
+ if (info.singleton) {
+ Singleton s = s_singletons.get(info.clazz);
+ if (s.state == Singleton.State.Injected) {
+ s_logger.info("Configuring singleton Manager: " + info.name);
+ try {
+ info.instance.configure(info.name, info.params);
+ } catch (ConfigurationException e) {
+ s_logger.error("Unable to configure manager: " + info.name, e);
+ System.exit(1);
+ }
+ s.state = Singleton.State.Configured;
+ }
+ } else {
+ s_logger.info("Configuring Manager: " + info.name);
+ try {
+ info.instance.configure(info.name, info.params);
+ } catch (ConfigurationException e) {
+ s_logger.error("Unable to configure manager: " + info.name, e);
+ System.exit(1);
+ }
}
}
}
@@ -384,12 +392,16 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
Class> fc = field.getType();
Object instance = null;
if (Manager.class.isAssignableFrom(fc)) {
+ s_logger.trace("Manager: " + fc.getName());
instance = locator.getManager(fc);
} else if (GenericDao.class.isAssignableFrom(fc)) {
- instance = locator.getDao((Class extends GenericDao, ?>>)fc);
+ s_logger.trace("Dao:" + fc.getName());
+ instance = locator.getDao((Class extends GenericDao, ? extends Serializable>>)fc);
} else if (Adapters.class.isAssignableFrom(fc)) {
+ s_logger.trace("Adapter" + fc.getName());
instance = locator.getAdapters(inject.adapter());
} else {
+ s_logger.trace("Other:" + fc.getName());
instance = locator.getManager(fc);
}
@@ -414,14 +426,29 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
Set>> entries = _managerMap.entrySet();
for (Map.Entry> entry : entries) {
ComponentInfo info = entry.getValue();
- s_logger.info("Starting Manager: " + info.name);
- if (!info.instance.start()) {
- throw new CloudRuntimeException("Incorrect Configuration: " + info.name);
+ if (info.singleton) {
+ Singleton s = s_singletons.get(info.clazz);
+ if (s.state == Singleton.State.Configured) {
+ s_logger.info("Starting singleton Manager: " + info.name);
+ if (!info.instance.start()) {
+ throw new CloudRuntimeException("Incorrect Configuration: " + info.name);
+ }
+ if (info.instance instanceof ManagementBean) {
+ registerMBean((ManagementBean) info.instance);
+ }
+ s_logger.info("Started Manager: " + info.name);
+ s.state = Singleton.State.Started;
+ }
+ } else {
+ s_logger.info("Starting Manager: " + info.name);
+ if (!info.instance.start()) {
+ throw new CloudRuntimeException("Incorrect Configuration: " + info.name);
+ }
+ if (info.instance instanceof ManagementBean) {
+ registerMBean((ManagementBean) info.instance);
+ }
+ s_logger.info("Started Manager: " + info.name);
}
- if (info.instance instanceof ManagementBean) {
- registerMBean((ManagementBean) info.instance);
- }
- s_logger.info("Started Manager: " + info.name);
}
}
@@ -468,19 +495,35 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
}
return (T)info.instance;
}
-
- protected void instantiateAdapters(Map>> map) {
- Set>>> entries = map.entrySet();
- for (Map.Entry>> entry : entries) {
- Adapters adapters = (Adapters)_adapterMap.get(entry.getKey());
- List lst = new ArrayList();
- for (ComponentInfo info : entry.getValue()) {
- s_logger.info("Instantiating Adapter: " + info.name);
- info.instance = (Adapter)createInstance(info.clazz, true, info.singleton);
+
+ protected void configureAdapters() {
+ for (Adapters extends Adapter> adapters : _adapterMap.values()) {
+ List> infos = adapters._infos;
+ for (ComponentInfo info : infos) {
try {
- if (!info.instance.configure(info.name, info.params)) {
- s_logger.error("Unable to configure adapter: " + info.name);
- System.exit(1);
+ if (info.singleton) {
+ Singleton singleton = s_singletons.get(info.clazz);
+ if (singleton.state == Singleton.State.Instantiated) {
+ s_logger.info("Injecting singleton Adapter: " + info.getName());
+ inject(info.clazz, info.instance);
+ singleton.state = Singleton.State.Injected;
+ }
+ if (singleton.state == Singleton.State.Injected) {
+ s_logger.info("Configuring singleton Adapter: " + info.getName());
+ if (!info.instance.configure(info.name, info.params)) {
+ s_logger.error("Unable to configure adapter: " + info.name);
+ System.exit(1);
+ }
+ singleton.state = Singleton.State.Configured;
+ }
+ } else {
+ s_logger.info("Injecting Adapter: " + info.getName());
+ inject(info.clazz, info.instance);
+ s_logger.info("Configuring singleton Adapter: " + info.getName());
+ if (!info.instance.configure(info.name, info.params)) {
+ s_logger.error("Unable to configure adapter: " + info.name);
+ System.exit(1);
+ }
}
} catch (ConfigurationException e) {
s_logger.error("Unable to configure adapter: " + info.name, e);
@@ -489,32 +532,48 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
s_logger.error("Unable to configure adapter: " + info.name, e);
System.exit(1);
}
- lst.add(info.instance);
- s_logger.info("Instantiated Adapter: " + info.name);
- }
- adapters.set(lst);
+ }
}
}
- protected void createAdaptersMap(Map>> map) {
+ protected void instantiateAdapters(Map>> map) {
Set>>> entries = map.entrySet();
for (Map.Entry>> entry : entries) {
- List extends Adapter> lst = new ArrayList(entry.getValue().size());
- _adapterMap.put(entry.getKey(), new Adapters(entry.getKey(), lst));
+ for (ComponentInfo info : entry.getValue()) {
+ s_logger.info("Instantiating Adapter: " + info.name);
+ info.instance = (Adapter)createInstance(info.clazz, false, info.singleton);
+ }
+ Adapters adapters = new Adapters(entry.getKey(), entry.getValue());
+ _adapterMap.put(entry.getKey(), adapters);
}
}
protected void startAdapters() {
for (Map.Entry> entry : _adapterMap.entrySet()) {
- for (Adapter adapter : entry.getValue().get()) {
- s_logger.info("Starting Adapter: " + adapter.getName());
- if (!adapter.start()) {
- throw new CloudRuntimeException("Unable to start adapter: " + adapter.getName());
+ for (ComponentInfo adapter : entry.getValue()._infos) {
+ if (adapter.singleton) {
+ Singleton s = s_singletons.get(adapter.clazz);
+ if (s.state == Singleton.State.Configured) {
+ s_logger.info("Starting singleton Adapter: " + adapter.getName());
+ if (!adapter.instance.start()) {
+ throw new CloudRuntimeException("Unable to start adapter: " + adapter.getName());
+ }
+ if (adapter.instance instanceof ManagementBean) {
+ registerMBean((ManagementBean)adapter.instance);
+ }
+ s_logger.info("Started Adapter: " + adapter.instance.getName());
+ }
+ s.state = Singleton.State.Started;
+ } else {
+ s_logger.info("Starting Adapter: " + adapter.getName());
+ if (!adapter.instance.start()) {
+ throw new CloudRuntimeException("Unable to start adapter: " + adapter.getName());
+ }
+ if (adapter.instance instanceof ManagementBean) {
+ registerMBean((ManagementBean)adapter.instance);
+ }
+ s_logger.info("Started Adapter: " + adapter.instance.getName());
}
- if (adapter instanceof ManagementBean) {
- registerMBean((ManagementBean)adapter);
- }
- s_logger.info("Started Adapter: " + adapter.getName());
}
}
}
@@ -589,10 +648,9 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
return adapters;
}
}
- return new Adapters(key, new ArrayList());
+ return new Adapters(key, new ArrayList>());
}
- static HashMap s_locators = new HashMap();
protected static ComponentLocator getLocatorInternal(String server, boolean setInThreadLocal, String configFileName, String log4jFile) {
// init log4j based on the passed in configuration
if (s_doOnce == false) {
@@ -605,6 +663,7 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
PropertyConfigurator.configureAndWatch(file.getAbsolutePath());
}
}
+ Runtime.getRuntime().addShutdownHook(new CleanupThread());
s_doOnce = true;
}
@@ -669,6 +728,11 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
this(name, clazz, new ArrayList>(0));
}
+ public ComponentInfo(String name, Class extends T> clazz, T instance) {
+ this(name, clazz);
+ this.instance = instance;
+ }
+
public ComponentInfo(String name, Class extends T> clazz, List> params) {
this(name, clazz, params, true);
}
@@ -705,6 +769,10 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
}
}
}
+
+ public void addParameter(String name, String value) {
+ params.put(name, value);
+ }
}
/**
@@ -723,7 +791,8 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
StringBuilder value;
String serverName;
boolean parse;
- ComponentInfo> currentInfo;
+ ComponentInfo> currentInfo;
+ Class> componentClass;
public XmlHandler(String serverName) {
this.serverName = serverName;
@@ -770,8 +839,10 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
parent = getAttribute(atts, "extends");
String implementationClass = getAttribute(atts, "class");
- if (implementationClass != null) {
- _implementationClassMap.put(_serverName, implementationClass);
+ try {
+ componentClass = Class.forName(implementationClass);
+ } catch (ClassNotFoundException e) {
+ throw new CloudRuntimeException("Unable to find " + implementationClass, e);
}
library = getAttribute(atts, "library");
@@ -860,4 +931,68 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
this.enhancer = enhancer;
}
}
+
+ protected static class CleanupThread extends Thread {
+ @Override
+ public synchronized void run() {
+ for (ComponentLocator locator : s_locators.values()) {
+ Iterator> itAdapters = locator._adapterMap.values().iterator();
+ while (itAdapters.hasNext()) {
+ Adapters extends Adapter> adapters = itAdapters.next();
+ itAdapters.remove();
+ for (ComponentInfo adapter : adapters._infos) {
+ if (adapter.singleton) {
+ Singleton singleton = s_singletons.get(adapter.clazz);
+ if (singleton.state == Singleton.State.Started) {
+ s_logger.info("Asking " + adapter.getName() + " to shutdown.");
+ adapter.instance.stop();
+ singleton.state = Singleton.State.Stopped;
+ } else {
+ s_logger.debug("Skippng " + adapter.getName() + " because it has already stopped");
+ }
+ } else {
+ s_logger.info("Asking " + adapter.getName() + " to shutdown.");
+ adapter.instance.stop();
+ }
+ }
+ }
+ }
+
+ for (ComponentLocator locator : s_locators.values()) {
+ Iterator> itManagers = locator._managerMap.values().iterator();
+ while (itManagers.hasNext()) {
+ ComponentInfo manager = itManagers.next();
+ itManagers.remove();
+ if (manager.singleton == true) {
+ Singleton singleton = s_singletons.get(manager.clazz);
+ if (singleton.state == Singleton.State.Started) {
+ s_logger.info("Asking Manager " + manager.getName() + " to shutdown.");
+ manager.instance.stop();
+ singleton.state = Singleton.State.Stopped;
+ } else {
+ s_logger.info("Skipping Manager " + manager.getName() + " because it is not in a state to shutdown.");
+ }
+ }
+ }
+ }
+ }
+ }
+
+ static class Singleton {
+ public enum State {
+ Instantiated,
+ Injected,
+ Configured,
+ Started,
+ Stopped
+ }
+
+ public Object singleton;
+ public State state;
+
+ public Singleton(Object singleton) {
+ this.singleton = singleton;
+ this.state = State.Instantiated;
+ }
+ }
}