ComponentLocator changes

This commit is contained in:
Alex Huang 2010-11-16 04:27:47 -08:00
parent 17afeade00
commit ed31497188
21 changed files with 398 additions and 676 deletions

View File

@ -23,214 +23,10 @@
documented, please contact the author.
-->
<components.xml>
<management-server class="com.cloud.server.ManagementServerImpl">
<dao name="StackMaid Dao" class="com.cloud.maid.dao.StackMaidDaoImpl"/>
<dao name="VM Template Zone" class="com.cloud.storage.dao.VMTemplateZoneDaoImpl"/>
<dao name="domain router" class="com.cloud.vm.dao.DomainRouterDaoImpl"/>
<dao name="host" class="com.cloud.host.dao.HostDaoImpl"/>
<dao name="VM Instance" class="com.cloud.vm.dao.VMInstanceDaoImpl"/>
<dao name="User VM" class="com.cloud.vm.dao.UserVmDaoImpl"/>
<dao name="ServiceOffering" class="com.cloud.service.dao.ServiceOfferingDaoImpl">
<param name="cache.size">50</param>
<param name="cache.time.to.live">-1</param>
</dao>
<dao name="DiskOffering" class="com.cloud.storage.dao.DiskOfferingDaoImpl">
<param name="cache.size">50</param>
<param name="cache.time.to.live">-1</param>
</dao>
<dao name="host zone" class="com.cloud.dc.dao.DataCenterDaoImpl">
<param name="cache.size">50</param>
<param name="cache.time.to.live">-1</param>
</dao>
<dao name="host pod" class="com.cloud.dc.dao.HostPodDaoImpl">
<param name="cache.size">50</param>
<param name="cache.time.to.live">-1</param>
</dao>
<dao name="IP Addresses" class="com.cloud.network.dao.IPAddressDaoImpl"/>
<dao name="vlan" class="com.cloud.dc.dao.VlanDaoImpl">
</dao>
<dao name="PodVlanMap" class="com.cloud.dc.dao.PodVlanMapDaoImpl"/>
<dao name="AccountVlanMap" class="com.cloud.dc.dao.AccountVlanMapDaoImpl"/>
<dao name="Volume" class="com.cloud.storage.dao.VolumeDaoImpl"/>
<dao name="Events" class="com.cloud.event.dao.EventDaoImpl"/>
<dao name="User" class="com.cloud.user.dao.UserDaoImpl">
<param name="cache.size">5000</param>
<param name="cache.time.to.live">300</param>
</dao>
<dao name="UserStats" class="com.cloud.user.dao.UserStatisticsDaoImpl"/>
<dao name="Disk Template" class="com.cloud.storage.dao.DiskTemplateDaoImpl">
<param name="cache.size">50</param>
<param name="cache.time.to.live">-1</param>
</dao>
<dao name="Firewall Rules" class="com.cloud.network.dao.FirewallRulesDaoImpl"/>
<dao name="Load Balancer" class="com.cloud.network.dao.LoadBalancerDaoImpl"/>
<dao name="Network Rule Config" class="com.cloud.network.dao.NetworkRuleConfigDaoImpl"/>
<dao name="Load Balancer Mapping" class="com.cloud.network.dao.LoadBalancerVMMapDaoImpl"/>
<dao name="Datacenter IP Addresses" class="com.cloud.dc.dao.DataCenterIpAddressDaoImpl"/>
<dao name="Network Security Group" class="com.cloud.network.security.dao.NetworkGroupDaoImpl"/>
<dao name="Ingress Rules" class="com.cloud.network.security.dao.IngressRuleDaoImpl"/>
<dao name="Network Group Mapping" class="com.cloud.network.security.dao.NetworkGroupVMMapDaoImpl"/>
<dao name="Network Group Rules" class="com.cloud.network.security.dao.NetworkGroupRulesDaoImpl"/>
<dao name="Network Group Work" class="com.cloud.network.security.dao.NetworkGroupWorkDaoImpl"/>
<dao name="Network Group VM Ruleset log" class="com.cloud.network.security.dao.VmRulesetLogDaoImpl"/>
<dao name="Alert" class="com.cloud.alert.dao.AlertDaoImpl"/>
<dao name="Capacity" class="com.cloud.capacity.dao.CapacityDaoImpl"/>
<dao name="Domain" class="com.cloud.domain.dao.DomainDaoImpl"/>
<dao name="Account" class="com.cloud.user.dao.AccountDaoImpl"/>
<dao name="ResourceLimit" class="com.cloud.configuration.dao.ResourceLimitDaoImpl"/>
<dao name="ResourceCount" class="com.cloud.configuration.dao.ResourceCountDaoImpl"/>
<dao name="UserAccount" class="com.cloud.user.dao.UserAccountDaoImpl"/>
<dao name="VM Template Host" class="com.cloud.storage.dao.VMTemplateHostDaoImpl"/>
<dao name="Upload" class="com.cloud.storage.dao.UploadDaoImpl"/>
<dao name="VM Template Pool" class="com.cloud.storage.dao.VMTemplatePoolDaoImpl"/>
<dao name="Launch Permission" class="com.cloud.storage.dao.LaunchPermissionDaoImpl"/>
<dao name="Configuration" class="com.cloud.configuration.dao.ConfigurationDaoImpl"/>
<dao name="VM Template" class="com.cloud.storage.dao.VMTemplateDaoImpl">
<param name="cache.size">50</param>
<param name="cache.time.to.live">-1</param>
<param name="routing.uniquename">routing</param>
</dao>
<dao name="HA" class="com.cloud.ha.dao.HighAvailabilityDaoImpl"/>
<dao name="Console Proxy" class="com.cloud.vm.dao.ConsoleProxyDaoImpl"/>
<dao name="Secondary Storage VM" class="com.cloud.vm.dao.SecondaryStorageVmDaoImpl"/>
<dao name="Upgrade" class="com.cloud.maint.dao.AgentUpgradeDaoImpl"/>
<dao name="Management Server Host" class="com.cloud.cluster.dao.ManagementServerHostDaoImpl"/>
<dao name="Snapshot" class="com.cloud.storage.dao.SnapshotDaoImpl"/>
<dao name="AsyncJobDao" class="com.cloud.async.dao.AsyncJobDaoImpl"/>
<dao name="SyncQueueDao" class="com.cloud.async.dao.SyncQueueDaoImpl"/>
<dao name="SyncQueueItemDao" class="com.cloud.async.dao.SyncQueueItemDaoImpl"/>
<dao name="GuestOSDao" class="com.cloud.storage.dao.GuestOSDaoImpl"/>
<dao name="GuestOSCategoryDao" class="com.cloud.storage.dao.GuestOSCategoryDaoImpl"/>
<dao name="StoragePoolDao" class="com.cloud.storage.dao.StoragePoolDaoImpl"/>
<dao name="StoragePoolHostDao" class="com.cloud.storage.dao.StoragePoolHostDaoImpl"/>
<dao name="HostDetails" class="com.cloud.host.dao.DetailsDaoImpl"/>
<dao name="SnapshotPolicyDao" class="com.cloud.storage.dao.SnapshotPolicyDaoImpl"/>
<dao name="SnapshotScheduleDao" class="com.cloud.storage.dao.SnapshotScheduleDaoImpl"/>
<dao name="PreallocatedLunDao" class="com.cloud.storage.preallocatedlun.dao.PreallocatedLunDaoImpl"/>
<dao name="ClusterDao" class="com.cloud.dc.dao.ClusterDaoImpl"/>
<dao name="Certificate" class="com.cloud.certificate.dao.CertificateDaoImpl"/>
<dao name="NetworkConfigurationDao" class="com.cloud.network.dao.NetworkConfigurationDaoImpl"/>
<dao name="NetworkOfferingDao" class="com.cloud.offerings.dao.NetworkOfferingDaoImpl"/>
<dao name="NicDao" class="com.cloud.vm.dao.NicDaoImpl"/>
<dao name="InstanceGroupDao" class="com.cloud.vm.dao.InstanceGroupDaoImpl"/>
<dao name="Instance Group to VM Mapping" class="com.cloud.vm.dao.InstanceGroupVMMapDaoImpl"/>
<dao name="Remote Access VPN" class="com.cloud.network.dao.RemoteAccessVpnDaoImpl"/>
<dao name="VPN Users" class="com.cloud.network.dao.VpnUserDaoImpl"/>
<adapters key="com.cloud.agent.manager.allocator.HostAllocator">
<adapter name="FirstFitRouting" class="com.cloud.agent.manager.allocator.impl.RecreateHostAllocator"/>
<!--adapter name="FirstFit" class="com.cloud.agent.manager.allocator.impl.FirstFitAllocator"/-->
</adapters>
<adapters key="com.cloud.storage.allocator.StoragePoolAllocator">
<adapter name="LocalStorage" class="com.cloud.storage.allocator.LocalStoragePoolAllocator"/>
< adapter name="Storage" class="com.cloud.storage.allocator.FirstFitStoragePoolAllocator"/ >
<adapter name="Storage" class="com.cloud.storage.allocator.RandomStoragePoolAllocator"/>
<adapter name="GarbageCollecting" class="com.cloud.storage.allocator.GarbageCollectingStoragePoolAllocator"/>
</adapters>
<adapters key="com.cloud.agent.manager.allocator.PodAllocator">
<adapter name="User First" class="com.cloud.agent.manager.allocator.impl.UserConcentratedAllocator"/>
</adapters>
<!--
<adapters key="com.cloud.network.VirtualNetworkAllocator">
<adapter name="Basic" class="com.cloud.network.BasicVirtualNetworkAllocator"/>
</adapters>
-->
<adapters key="com.cloud.consoleproxy.ConsoleProxyAllocator">
<adapter name="Balance" class="com.cloud.consoleproxy.ConsoleProxyBalanceAllocator"/>
</adapters>
<adapters key="com.cloud.network.configuration.NetworkGuru">
<adapter name="GuestNetworkGuru" class="com.cloud.network.configuration.GuestNetworkGuru"/>
<adapter name="PublicNetworkGuru" class="com.cloud.network.configuration.PublicNetworkGuru"/>
<adapter name="PodBasedNetworkGuru" class="com.cloud.network.configuration.PodBasedNetworkGuru"/>
<adapter name="ControlNetworkGuru" class="com.cloud.network.configuration.ControlNetworkGuru"/>
</adapters>
<adapters key="com.cloud.storage.secondary.SecondaryStorageVmAllocator">
<adapter name="Balance" class="com.cloud.storage.secondary.SecondaryStorageVmDefaultAllocator"/>
</adapters>
<adapters key="com.cloud.network.IpAddrAllocator">
<adapter name="Basic" class="com.cloud.network.ExteralIpAddressAllocator"/>
</adapters>
<manager name="StackMaidManager" class="com.cloud.maid.StackMaidManagerImpl">
</manager>
<adapters key="com.cloud.server.auth.UserAuthenticator">
<adapter name="MD5" class="com.cloud.server.auth.MD5UserAuthenticator"/>
</adapters>
<adapters key="com.cloud.ha.Investigator">
<adapter name="SimpleInvestigator" class="com.cloud.ha.CheckOnAgentInvestigator"/>
<adapter name="XenServerInvestigator" class="com.cloud.ha.XenServerInvestigator"/>
<adapter name="PingInvestigator" class="com.cloud.ha.InvestigatorImpl"/>
</adapters>
<adapters key="com.cloud.ha.FenceBuilder">
<adapter name="StorageFenceBuilder" class="com.cloud.ha.StorageFence"/>
</adapters>
<adapters key="com.cloud.resource.Discoverer">
<adapter name="XCP Agent" class="com.cloud.hypervisor.xen.discoverer.XcpServerDiscoverer"/>
<adapter name="SecondaryStorage" class="com.cloud.storage.secondary.SecondaryStorageDiscoverer"/>
<adapter name="KVM Agent" class="com.cloud.hypervisor.kvm.discoverer.KvmServerDiscoverer"/>
</adapters>
<adapters key="com.cloud.deploy.DeploymentPlanner">
<adapter name="Simple" class="com.cloud.deploy.SimplePlanner"/>
</adapters>
<manager name="agent manager" class="com.cloud.agent.manager.AgentManagerImpl">
</manager>
<manager name="account manager" class="com.cloud.user.AccountManagerImpl">
</manager>
<manager name="configuration manager" class="com.cloud.configuration.ConfigurationManagerImpl">
</manager>
<manager name="network manager" class="com.cloud.network.NetworkManagerImpl">
</manager>
<manager name="download manager" class="com.cloud.storage.download.DownloadMonitorImpl">
</manager>
<manager name="upload manager" class="com.cloud.storage.upload.UploadMonitorImpl">
</manager>
<manager name="console proxy manager" class="com.cloud.consoleproxy.AgentBasedStandaloneConsoleProxyManager">
</manager>
<manager name="secondary storage vm manager" class="com.cloud.storage.secondary.SecondaryStorageManagerImpl">
</manager>
<manager name="vm manager" class="com.cloud.vm.UserVmManagerImpl"/>
<manager name="upgrade manager" class="com.cloud.maint.UpgradeManagerImpl">
</manager>
<manager name="StorageManager" class="com.cloud.storage.StorageManagerImpl">
</manager>
<manager name="Cluster Manager" class="com.cloud.cluster.DummyClusterManagerImpl">
</manager>
<manager name="SyncQueueManager" class="com.cloud.async.SyncQueueManagerImpl">
</manager>
<manager name="AsyncJobManager" class="com.cloud.async.AsyncJobManagerImpl">
</manager>
<manager name="AsyncJobExecutorContext" class="com.cloud.async.AsyncJobExecutorContextImpl">
</manager>
<manager name="HA Manager" class="com.cloud.ha.HighAvailabilityManagerImpl">
</manager>
<manager name="Alert Manager" class="com.cloud.alert.AlertManagerImpl">
</manager>
<manager name="Template Manager" class="com.cloud.template.TemplateManagerImpl">
</manager>
<manager name="Snapshot Manager" class="com.cloud.storage.snapshot.SnapshotManagerImpl">
</manager>
<manager name="SnapshotScheduler" class="com.cloud.storage.snapshot.SnapshotSchedulerImpl">
</manager>
<manager name="NetworkGroupManager" class="com.cloud.network.security.NetworkGroupManagerImpl">
</manager>
<manager name="VmManager" class="com.cloud.vm.MauriceMoss"/>
<manager name="DomainRouterManager" class="com.cloud.network.router.DomainRouterManagerImpl"/>
<management-server class="com.cloud.server.ManagementServerImpl" library="com.cloud.configuration.DefaultComponentLibrary">
</management-server>
<configuration-server class="com.cloud.server.ConfigurationServerImpl">
<dao name="Configuration configuration server" class="com.cloud.configuration.dao.ConfigurationDaoImpl">
<param name="premium">false</param>
</dao>
<dao name="Snapshot policy defaults" class="com.cloud.storage.dao.SnapshotPolicyDaoImpl"/>
<dao name="DiskOffering configuration server" class="com.cloud.storage.dao.DiskOfferingDaoImpl"/>
<dao name="ServiceOffering configuration server" class="com.cloud.service.dao.ServiceOfferingDaoImpl">
<param name="cache.size">50</param>
<param name="cache.time.to.live">-1</param>
</dao>
<dao name="host zone configuration server" class="com.cloud.dc.dao.DataCenterDaoImpl"/>
<dao name="host pod configuration server" class="com.cloud.dc.dao.HostPodDaoImpl"/>
<configuration-server class="com.cloud.server.ConfigurationServerImpl" extends="management-server">
</configuration-server>
</components.xml>

View File

@ -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 <http://www.gnu.org/licenses/>.
*
*/
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() {
}
}

View File

@ -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 <http://www.gnu.org/licenses/>.
*
*/
package com.cloud.storage.dao;
import com.cloud.storage.DiskTemplateVO;
import com.cloud.utils.db.GenericDao;
public interface DiskTemplateDao extends GenericDao<DiskTemplateVO, Long> {
public DiskTemplateVO findByTypeAndSize(String type, long size);
}

View File

@ -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 <http://www.gnu.org/licenses/>.
*
*/
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<DiskTemplateVO, Long> implements DiskTemplateDao {
protected SearchBuilder<DiskTemplateVO> 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<DiskTemplateVO> sc = TypeSizeSearch.create();
sc.setParameters("type", type);
sc.setParameters("size", size);
List<DiskTemplateVO> 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);
}
}

View File

@ -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<Processor> processors = new ArrayList<Processor>();
List<ComponentInfo<Adapter>> processors = new ArrayList<ComponentInfo<Adapter>>();
Processor processor = new VhdProcessor();
processor.configure("VHD Processor", params);
processors.add(processor);
processors.add(new ComponentInfo<Adapter>("VHD Processor", VhdProcessor.class, processor));
processor = new IsoProcessor();
processor.configure("ISO Processor", params);
processors.add(processor);
processors.add(new ComponentInfo<Adapter>("ISO Processor", IsoProcessor.class, processor));
processor = new QCOW2Processor();
processor.configure("QCOW2 Processor", params);
processors.add(processor);
processors.add(new ComponentInfo<Adapter>("QCOW2 Processor", QCOW2Processor.class, processor));
processor = new VmdkProcessor();
processor.configure("VMDK Processor", params);
processors.add(processor);
processors.add(new ComponentInfo<Adapter>("VMDK Processor", VmdkProcessor.class, processor));
_processors = new Adapters<Processor>("processors", processors);
// Add more processors here.

View File

@ -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;

View File

@ -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<Processor> processors = new ArrayList<Processor>();
_processors = new Adapters<Processor>("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);

View File

@ -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);

View File

@ -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);

View File

@ -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());

View File

@ -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<String, ComponentInfo<GenericDao<?, ? extends Serializable>>> _daos = new LinkedHashMap<String, ComponentInfo<GenericDao<?, ?>>>();
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<Pair<String, Object>>(), true);
}
protected void addDao(String name, Class<? extends GenericDao<?, ? extends Serializable>> clazz, List<Pair<String, Object>> params,
boolean singleton) {
ComponentInfo<GenericDao<?, ? extends Serializable>> ComponentInfo = new ComponentInfo<GenericDao<?, ? extends Serializable>>(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<Pair<String, Object>> params, boolean singleton) {
ComponentInfo<GenericDao<?, ? extends Serializable>> componentInfo = new ComponentInfo<GenericDao<?, ? extends Serializable>>(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<String, ComponentInfo<Manager>> _managers = new HashMap<String, ComponentInfo<Manager>>();
@ -242,23 +265,24 @@ public class DefaultComponentLibrary implements ComponentLibrary {
@Override
public synchronized Map<String, ComponentInfo<GenericDao<?, ?>>> getDaos() {
if (_daos.size() == 0) {
addDaos();
populateDaos();
}
return _daos;
}
protected void addManager(String name, Class<? extends Manager> clazz, List<Pair<String, Object>> params, boolean singleton) {
ComponentInfo<Manager> ComponentInfo = new ComponentInfo<Manager>(name, clazz, params, singleton);
for (String key : ComponentInfo.getKeys()) {
_managers.put(key, ComponentInfo);
protected ComponentInfo<Manager> addManager(String name, Class<? extends Manager> clazz, List<Pair<String, Object>> params, boolean singleton) {
ComponentInfo<Manager> info = new ComponentInfo<Manager>(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<Manager> addManager(String name, Class<? extends Manager> clazz) {
return addManager(name, clazz, new ArrayList<Pair<String, Object>>(), 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 <T> void addAdapterChain(Class<T> interphace, List<Pair<String, Class<? extends T>>> adapters) {
protected <T> List<ComponentInfo<Adapter>> addAdapterChain(Class<T> interphace, List<Pair<String, Class<? extends T>>> adapters) {
ArrayList<ComponentInfo<Adapter>> lst = new ArrayList<ComponentInfo<Adapter>>(adapters.size());
for (Pair<String, Class<? extends T>> adapter : adapters) {
@SuppressWarnings("unchecked")
@ -293,17 +317,24 @@ public class DefaultComponentLibrary implements ComponentLibrary {
lst.add(new ComponentInfo<Adapter>(adapter.first(), clazz));
}
_adapters.put(interphace.getName(), lst);
return lst;
}
protected <T> void addOneAdapter(Class<T> interphace, String name, Class<? extends T> adapterClass) {
List<Pair<String, Class<? extends T>>> adapters = new ArrayList<Pair<String, Class<? extends T>>>();
adapters.add(new Pair<String, Class<? extends T>>(name, adapterClass));
addAdapterChain(interphace, adapters);
}
@Override
public synchronized Map<String, ComponentInfo<Manager>> getManagers() {
if (_managers.size() == 0) {
addManagers();
populateManagers();
}
return _managers;
}
public void addAllAdapters() {
protected void populateAdapters() {
List<Pair<String, Class<? extends HostAllocator>>> hostAllocators = new ArrayList<Pair<String, Class<? extends HostAllocator>>>();
hostAllocators.add(new Pair<String, Class<? extends HostAllocator>>("FirstFitRouting", RecreateHostAllocator.class));
@ -317,51 +348,42 @@ public class DefaultComponentLibrary implements ComponentLibrary {
poolAllocators.add(new Pair<String, Class<? extends StoragePoolAllocator>>("GarbageCollecting", GarbageCollectingStoragePoolAllocator.class));
addAdapterChain(StoragePoolAllocator.class, poolAllocators);
List<Pair<String, Class<? extends PodAllocator>>> podAllocators = new ArrayList<Pair<String, Class<? extends PodAllocator>>>();
podAllocators.add(new Pair<String, Class<? extends PodAllocator>>("User First", UserConcentratedAllocator.class));
addAdapterChain(PodAllocator.class, podAllocators);
List<Pair<String, Class<? extends NetworkGuru>>> networkGurus = new ArrayList<Pair<String, Class<? extends NetworkGuru>>>();
networkGurus.add(new Pair<String, Class<? extends NetworkGuru>>("GuestNetworkGuru", GuestNetworkGuru.class));
networkGurus.add(new Pair<String, Class<? extends NetworkGuru>>("PublicNetworkGuru", PublicNetworkGuru.class));
networkGurus.add(new Pair<String, Class<? extends NetworkGuru>>("PodBasedNetworkGuru", PodBasedNetworkGuru.class));
networkGurus.add(new Pair<String, Class<? extends NetworkGuru>>("ControlNetworkGuru", ControlNetworkGuru.class));
addAdapterChain(NetworkGuru.class, networkGurus);
List<Pair<String, Class<? extends ConsoleProxyAllocator>>> proxyAllocators = new ArrayList<Pair<String, Class<? extends ConsoleProxyAllocator>>>();
proxyAllocators.add(new Pair<String, Class<? extends ConsoleProxyAllocator>>("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);
// 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);
List<Pair<String, Class<? extends Investigator>>> investigators = new ArrayList<Pair<String, Class<? extends Investigator>>>();
investigators.add(new Pair<String, Class<? extends Investigator>>("SimpleInvestigator", CheckOnAgentInvestigator.class));
investigators.add(new Pair<String, Class<? extends Investigator>>("XenServerInvestigator", XenServerInvestigator.class));
investigators.add(new Pair<String, Class<? extends Investigator>>("PingInvestigator", InvestigatorImpl.class));
addAdapterChain(Investigator.class, investigators);
// HA Investigator
addAdapterChain("SimpleInvestigator", CheckOnAgentInvestigator.class);
addAdapterChain("XenServerInvestigator", XenServerInvestigator.class);
addAdapterChain("PingInvestigator", InvestigatorImpl.class);
addOneAdapter(FenceBuilder.class, "StorageFenceBuilder", StorageFence.class);
// HA Fence Builder
addAdapterChain("StorageFenceBuilder", StorageFence.class);
List<Pair<String, Class<? extends Discoverer>>> discovers = new ArrayList<Pair<String, Class<? extends Discoverer>>>();
discovers.add(new Pair<String, Class<? extends Discoverer>>("XCP Agent", XcpServerDiscoverer.class));
discovers.add(new Pair<String, Class<? extends Discoverer>>("SecondaryStorage", SecondaryStorageDiscoverer.class));
discovers.add(new Pair<String, Class<? extends Discoverer>>("KVM Agent", KvmServerDiscoverer.class));
addAdapterChain(Discoverer.class, discovers);
// 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<String, List<ComponentInfo<Adapter>>> getAdapters() {
if (_adapters.size() == 0) {
addAdapters();
populateAdapters();
}
return _adapters;
}

View File

@ -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<String, Object> context = createProxyInstance2(dataCenterId);
Map<String, Object> 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<String, Object> context = createProxyInstance2(dataCenterId);
Map<String, Object> 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();
}

View File

@ -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;

View File

@ -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;

View File

@ -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<UsageVO> searchForUsage(Criteria c);
*/
/**
* Obtains a list of all active DiskTemplates.
* @return list of DiskTemplates
*/
List<DiskTemplateVO> listAllActiveDiskTemplates();
/**
* Obtains a list of all templates.
* @return list of VMTemplates

View File

@ -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<DiskTemplateVO> listAllActiveDiskTemplates() {
return _diskTemplateDao.listAll();
}
@Override
public UserAccount authenticateUser(String username, String password, Long domainId, Map<String, Object[]> requestParameters) {
UserAccount user = null;

View File

@ -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;

View File

@ -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`);

View File

@ -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',

View File

@ -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<T extends Adapter> implements Iterable<T> {
private Map<String, T> _map;
public class Adapters<T> implements Iterable<T> {
protected Map<String, T> _map;
protected List<ComponentInfo<Adapter>> _infos;
protected String _name;
public Adapters(String name, List<T> adapters) {
public Adapters(String name, List<ComponentInfo<Adapter>> adapters) {
_name = name;
set(adapters);
}
@ -65,12 +68,15 @@ public class Adapters<T extends Adapter> implements Iterable<T> {
return _map.values();
}
protected void set(List<T> adapters) {
protected void set(List<ComponentInfo<Adapter>> adapters) {
HashMap<String, T> map = new HashMap<String, T>(adapters.size());
for (T adapter : adapters) {
map.put(adapter.getName(), adapter);
for (ComponentInfo<Adapter> 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) {

View File

@ -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,28 +73,26 @@ 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<String, Object> s_singletons = new HashMap<String, Object>(111);
protected static ConcurrentHashMap<Class<?>, Singleton> s_singletons = new ConcurrentHashMap<Class<?>, Singleton>(111);
static HashMap<String, ComponentLocator> s_locators = new HashMap<String, ComponentLocator>();
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<Class<?>, InjectInfo> s_factories = new HashMap<Class<?>, InjectInfo>();
protected static HashMap<String, ComponentLocator> s_locatorMap = new HashMap<String, ComponentLocator>();
protected static HashMap<String, Object> _componentMap = new HashMap<String, Object>();
protected static HashMap<String, String> _implementationClassMap = new HashMap<String, String>();
protected HashMap<String, Adapters<? extends Adapter>> _adapterMap;
protected HashMap<String, ComponentInfo<Manager>> _managerMap;
protected LinkedHashMap<String, ComponentInfo<GenericDao<?, ?>>> _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() {
@ -101,25 +100,10 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
}
@Override
public synchronized void run() {
Iterator<Adapters<? extends Adapter>> 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();
}
public String getName() {
return getLocatorName();
}
Iterator<ComponentInfo<Manager>> itManagers = _managerMap.values().iterator();
while (itManagers.hasNext()) {
ComponentInfo<Manager> manager = itManagers.next();
itManagers.remove();
manager.instance.stop();
}
}
protected void parse(String filename, String log4jFile) {
try {
@ -139,32 +123,44 @@ 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<String, ComponentInfo<GenericDao<?, ? extends Serializable>>>();
_managerMap = new LinkedHashMap<String, ComponentInfo<Manager>>();
_adapterMap = new HashMap<String, Adapters<? extends Adapter>>();
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);
}
}
}
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());
}
_managerMap.putAll(handler.managers);
_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);
System.exit(1);
@ -192,14 +188,30 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
for (Map.Entry<String, ComponentInfo<GenericDao<?, ?>>> entry : entries) {
ComponentInfo<GenericDao<?, ?>> info = entry.getValue();
s_logger.info("Starting DAO: " + info.name);
try {
info.instance = (GenericDao<?, ?>)createInstance(info.clazz, true, info.singleton);
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);
System.exit(1);
@ -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 extends GenericDao<?, ?>> T getDao(Class<T> clazz) {
public <T extends GenericDao<?, ? extends Serializable>> T getDao(Class<T> clazz) {
ComponentInfo<GenericDao<?, ?>> info = getDao(clazz.getName());
return info != null ? (T)info.instance : null;
}
@ -356,11 +341,33 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
Set<Map.Entry<String, ComponentInfo<Manager>>> entries = _managerMap.entrySet();
for (Map.Entry<String, ComponentInfo<Manager>> entry : entries) {
ComponentInfo<Manager> info = entry.getValue();
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<String, ComponentInfo<Manager>> entry : entries) {
ComponentInfo<Manager> info = entry.getValue();
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);
@ -370,6 +377,7 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
}
}
}
}
protected static void inject(Class<?> clazz, Object entity) {
ComponentLocator locator = ComponentLocator.getCurrentLocator();
@ -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,6 +426,20 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
Set<Map.Entry<String, ComponentInfo<Manager>>> entries = _managerMap.entrySet();
for (Map.Entry<String, ComponentInfo<Manager>> entry : entries) {
ComponentInfo<Manager> info = entry.getValue();
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);
@ -424,6 +450,7 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
s_logger.info("Started Manager: " + info.name);
}
}
}
protected void registerMBean(ManagementBean mbean) {
try {
@ -469,19 +496,35 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
return (T)info.instance;
}
protected void instantiateAdapters(Map<String, List<ComponentInfo<Adapter>>> map) {
Set<Map.Entry<String, List<ComponentInfo<Adapter>>>> entries = map.entrySet();
for (Map.Entry<String, List<ComponentInfo<Adapter>>> entry : entries) {
Adapters<Adapter> adapters = (Adapters<Adapter>)_adapterMap.get(entry.getKey());
List<Adapter> lst = new ArrayList<Adapter>();
for (ComponentInfo<Adapter> 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<ComponentInfo<Adapter>> infos = adapters._infos;
for (ComponentInfo<Adapter> info : infos) {
try {
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);
System.exit(1);
@ -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<String, List<ComponentInfo<Adapter>>> map) {
protected void instantiateAdapters(Map<String, List<ComponentInfo<Adapter>>> map) {
Set<Map.Entry<String, List<ComponentInfo<Adapter>>>> entries = map.entrySet();
for (Map.Entry<String, List<ComponentInfo<Adapter>>> entry : entries) {
List<? extends Adapter> lst = new ArrayList<Adapter>(entry.getValue().size());
_adapterMap.put(entry.getKey(), new Adapters(entry.getKey(), lst));
for (ComponentInfo<Adapter> info : entry.getValue()) {
s_logger.info("Instantiating Adapter: " + info.name);
info.instance = (Adapter)createInstance(info.clazz, false, info.singleton);
}
Adapters<Adapter> adapters = new Adapters<Adapter>(entry.getKey(), entry.getValue());
_adapterMap.put(entry.getKey(), adapters);
}
}
protected void startAdapters() {
for (Map.Entry<String, Adapters<? extends Adapter>> entry : _adapterMap.entrySet()) {
for (Adapter adapter : entry.getValue().get()) {
s_logger.info("Starting Adapter: " + adapter.getName());
if (!adapter.start()) {
for (ComponentInfo<Adapter> 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 instanceof ManagementBean) {
registerMBean((ManagementBean)adapter);
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());
}
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<Adapter>());
return new Adapters<Adapter>(key, new ArrayList<ComponentInfo<Adapter>>());
}
static HashMap<String, ComponentLocator> s_locators = new HashMap<String, ComponentLocator>();
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<Pair<String, Object>>(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<Pair<String, Object>> 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);
}
}
/**
@ -724,6 +792,7 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
String serverName;
boolean parse;
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<Adapters<? extends Adapter>> itAdapters = locator._adapterMap.values().iterator();
while (itAdapters.hasNext()) {
Adapters<? extends Adapter> adapters = itAdapters.next();
itAdapters.remove();
for (ComponentInfo<Adapter> 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<ComponentInfo<Manager>> itManagers = locator._managerMap.values().iterator();
while (itManagers.hasNext()) {
ComponentInfo<Manager> 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;
}
}
}