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. documented, please contact the author.
--> -->
<components.xml> <components.xml>
<management-server class="com.cloud.server.ManagementServerImpl"> <management-server class="com.cloud.server.ManagementServerImpl" library="com.cloud.configuration.DefaultComponentLibrary">
<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> </management-server>
<configuration-server class="com.cloud.server.ConfigurationServerImpl"> <configuration-server class="com.cloud.server.ConfigurationServerImpl" extends="management-server">
<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> </configuration-server>
</components.xml> </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.DownloadCompleteCallback;
import com.cloud.storage.template.TemplateDownloader.Status; import com.cloud.storage.template.TemplateDownloader.Status;
import com.cloud.utils.NumbersUtil; import com.cloud.utils.NumbersUtil;
import com.cloud.utils.component.Adapter;
import com.cloud.utils.component.Adapters; import com.cloud.utils.component.Adapters;
import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.ComponentLocator;
import com.cloud.utils.component.ComponentLocator.ComponentInfo;
import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.script.OutputInterpreter; import com.cloud.utils.script.OutputInterpreter;
import com.cloud.utils.script.Script; import com.cloud.utils.script.Script;
@ -770,24 +772,23 @@ public class DownloadManagerImpl implements DownloadManager {
} }
s_logger.info("createtmplt.sh found in " + createTmpltScr); 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 processor = new VhdProcessor();
processor.configure("VHD Processor", params); processor.configure("VHD Processor", params);
processors.add(processor); processors.add(new ComponentInfo<Adapter>("VHD Processor", VhdProcessor.class, processor));
processor = new IsoProcessor(); processor = new IsoProcessor();
processor.configure("ISO Processor", params); processor.configure("ISO Processor", params);
processors.add(processor); processors.add(new ComponentInfo<Adapter>("ISO Processor", IsoProcessor.class, processor));
processor = new QCOW2Processor(); processor = new QCOW2Processor();
processor.configure("QCOW2 Processor", params); processor.configure("QCOW2 Processor", params);
processors.add(processor); processors.add(new ComponentInfo<Adapter>("QCOW2 Processor", QCOW2Processor.class, processor));
processor = new VmdkProcessor(); processor = new VmdkProcessor();
processor.configure("VMDK Processor", params); processor.configure("VMDK Processor", params);
processors.add(processor); processors.add(new ComponentInfo<Adapter>("VMDK Processor", VmdkProcessor.class, processor));
_processors = new Adapters<Processor>("processors", processors); _processors = new Adapters<Processor>("processors", processors);
// Add more processors here. // Add more processors here.

View File

@ -23,14 +23,16 @@ import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.util.Map; import java.util.Map;
import javax.ejb.Local;
import javax.naming.ConfigurationException; import javax.naming.ConfigurationException;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import com.cloud.storage.StorageLayer;
import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.StorageLayer;
import com.cloud.utils.NumbersUtil; import com.cloud.utils.NumbersUtil;
@Local(value=Processor.class)
public class QCOW2Processor implements Processor { public class QCOW2Processor implements Processor {
private static final Logger s_logger = Logger.getLogger(QCOW2Processor.class); private static final Logger s_logger = Logger.getLogger(QCOW2Processor.class);
String _name; String _name;

View File

@ -4,9 +4,7 @@ import java.io.File;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -457,20 +455,6 @@ public class UploadManagerImpl implements UploadManager {
scriptsDir = "scripts/storage/secondary"; 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. // Add more processors here.
threadPool = Executors.newFixedThreadPool(numInstallThreads); threadPool = Executors.newFixedThreadPool(numInstallThreads);

View File

@ -23,13 +23,14 @@ import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.Map; import java.util.Map;
import javax.ejb.Local;
import javax.naming.ConfigurationException; import javax.naming.ConfigurationException;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import com.cloud.exception.InternalErrorException; import com.cloud.exception.InternalErrorException;
import com.cloud.storage.StorageLayer;
import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.StorageLayer;
import com.cloud.utils.NumbersUtil; import com.cloud.utils.NumbersUtil;
/** /**
@ -38,6 +39,7 @@ import com.cloud.utils.NumbersUtil;
* into the VHD format. * into the VHD format.
* *
*/ */
@Local(value=Processor.class)
public class VhdProcessor implements Processor { public class VhdProcessor implements Processor {
private static final Logger s_logger = Logger.getLogger(VhdProcessor.class); 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.io.File;
import java.util.Map; import java.util.Map;
import javax.ejb.Local;
import javax.naming.ConfigurationException; import javax.naming.ConfigurationException;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import com.cloud.exception.InternalErrorException; import com.cloud.exception.InternalErrorException;
import com.cloud.storage.StorageLayer;
import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.StorageLayer;
import com.cloud.utils.script.Script; import com.cloud.utils.script.Script;
@Local(value=Processor.class)
public class VmdkProcessor implements Processor { public class VmdkProcessor implements Processor {
private static final Logger s_logger = Logger.getLogger(VmdkProcessor.class); 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.user.Account;
import com.cloud.uservm.UserVm; 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 class DestroyVm2Cmd extends BaseAsyncCmd {
public static final Logger s_logger = Logger.getLogger(DestroyVm2Cmd.class.getName()); 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.List;
import java.util.Map; 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.AgentManagerImpl;
import com.cloud.agent.manager.allocator.HostAllocator; import com.cloud.agent.manager.allocator.HostAllocator;
import com.cloud.agent.manager.allocator.PodAllocator; 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.HostPodDaoImpl;
import com.cloud.dc.dao.PodVlanMapDaoImpl; import com.cloud.dc.dao.PodVlanMapDaoImpl;
import com.cloud.dc.dao.VlanDaoImpl; import com.cloud.dc.dao.VlanDaoImpl;
import com.cloud.deploy.DeploymentPlanner;
import com.cloud.deploy.SimplePlanner; import com.cloud.deploy.SimplePlanner;
import com.cloud.domain.dao.DomainDaoImpl; import com.cloud.domain.dao.DomainDaoImpl;
import com.cloud.event.dao.EventDaoImpl; import com.cloud.event.dao.EventDaoImpl;
import com.cloud.ha.CheckOnAgentInvestigator; import com.cloud.ha.CheckOnAgentInvestigator;
import com.cloud.ha.FenceBuilder;
import com.cloud.ha.HighAvailabilityManagerImpl; import com.cloud.ha.HighAvailabilityManagerImpl;
import com.cloud.ha.Investigator;
import com.cloud.ha.InvestigatorImpl; import com.cloud.ha.InvestigatorImpl;
import com.cloud.ha.StorageFence; import com.cloud.ha.StorageFence;
import com.cloud.ha.XenServerInvestigator; import com.cloud.ha.XenServerInvestigator;
@ -72,9 +77,11 @@ import com.cloud.maid.dao.StackMaidDaoImpl;
import com.cloud.maint.UpgradeManagerImpl; import com.cloud.maint.UpgradeManagerImpl;
import com.cloud.maint.dao.AgentUpgradeDaoImpl; import com.cloud.maint.dao.AgentUpgradeDaoImpl;
import com.cloud.network.ExteralIpAddressAllocator; import com.cloud.network.ExteralIpAddressAllocator;
import com.cloud.network.IpAddrAllocator;
import com.cloud.network.NetworkManagerImpl; import com.cloud.network.NetworkManagerImpl;
import com.cloud.network.configuration.ControlNetworkGuru; import com.cloud.network.configuration.ControlNetworkGuru;
import com.cloud.network.configuration.GuestNetworkGuru; import com.cloud.network.configuration.GuestNetworkGuru;
import com.cloud.network.configuration.NetworkGuru;
import com.cloud.network.configuration.PodBasedNetworkGuru; import com.cloud.network.configuration.PodBasedNetworkGuru;
import com.cloud.network.configuration.PublicNetworkGuru; import com.cloud.network.configuration.PublicNetworkGuru;
import com.cloud.network.dao.FirewallRulesDaoImpl; 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.NetworkGroupWorkDaoImpl;
import com.cloud.network.security.dao.VmRulesetLogDaoImpl; import com.cloud.network.security.dao.VmRulesetLogDaoImpl;
import com.cloud.offerings.dao.NetworkOfferingDaoImpl; import com.cloud.offerings.dao.NetworkOfferingDaoImpl;
import com.cloud.resource.Discoverer;
import com.cloud.server.auth.MD5UserAuthenticator; import com.cloud.server.auth.MD5UserAuthenticator;
import com.cloud.server.auth.UserAuthenticator;
import com.cloud.service.dao.ServiceOfferingDaoImpl; import com.cloud.service.dao.ServiceOfferingDaoImpl;
import com.cloud.storage.StorageManagerImpl; import com.cloud.storage.StorageManagerImpl;
import com.cloud.storage.allocator.FirstFitStoragePoolAllocator; 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.LocalStoragePoolAllocator;
import com.cloud.storage.allocator.StoragePoolAllocator; import com.cloud.storage.allocator.StoragePoolAllocator;
import com.cloud.storage.dao.DiskOfferingDaoImpl; import com.cloud.storage.dao.DiskOfferingDaoImpl;
import com.cloud.storage.dao.DiskTemplateDaoImpl;
import com.cloud.storage.dao.GuestOSCategoryDaoImpl; import com.cloud.storage.dao.GuestOSCategoryDaoImpl;
import com.cloud.storage.dao.GuestOSDaoImpl; import com.cloud.storage.dao.GuestOSDaoImpl;
import com.cloud.storage.dao.LaunchPermissionDaoImpl; 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.preallocatedlun.dao.PreallocatedLunDaoImpl;
import com.cloud.storage.secondary.SecondaryStorageDiscoverer; import com.cloud.storage.secondary.SecondaryStorageDiscoverer;
import com.cloud.storage.secondary.SecondaryStorageManagerImpl; import com.cloud.storage.secondary.SecondaryStorageManagerImpl;
import com.cloud.storage.secondary.SecondaryStorageVmAllocator;
import com.cloud.storage.secondary.SecondaryStorageVmDefaultAllocator; import com.cloud.storage.secondary.SecondaryStorageVmDefaultAllocator;
import com.cloud.storage.snapshot.SnapshotManagerImpl; import com.cloud.storage.snapshot.SnapshotManagerImpl;
import com.cloud.storage.snapshot.SnapshotSchedulerImpl; 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.ComponentLocator.ComponentInfo;
import com.cloud.utils.component.Manager; import com.cloud.utils.component.Manager;
import com.cloud.utils.db.GenericDao; import com.cloud.utils.db.GenericDao;
import com.cloud.vm.ItWorkDaoImpl;
import com.cloud.vm.MauriceMoss; import com.cloud.vm.MauriceMoss;
import com.cloud.vm.UserVmManagerImpl; import com.cloud.vm.UserVmManagerImpl;
import com.cloud.vm.dao.ConsoleProxyDaoImpl; 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 final Map<String, ComponentInfo<GenericDao<?, ? extends Serializable>>> _daos = new LinkedHashMap<String, ComponentInfo<GenericDao<?, ?>>>();
protected void addDao(String name, Class<? extends GenericDao<?, ? extends Serializable>> clazz) { protected ComponentInfo<? extends GenericDao<?, ? extends Serializable>> addDao(String name, Class<? extends GenericDao<?, ? extends Serializable>> clazz) {
addDao(name, clazz, null, true); 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, protected ComponentInfo<? extends GenericDao<?, ? extends Serializable>> addDao(String name, Class<? extends GenericDao<?, ? extends Serializable>> clazz, List<Pair<String, Object>> params, boolean singleton) {
boolean singleton) { ComponentInfo<GenericDao<?, ? extends Serializable>> componentInfo = new ComponentInfo<GenericDao<?, ? extends Serializable>>(name, clazz, params, singleton);
ComponentInfo<GenericDao<?, ? extends Serializable>> ComponentInfo = new ComponentInfo<GenericDao<?, ? extends Serializable>>(name, clazz, params, singleton); for (String key : componentInfo.getKeys()) {
for (String key : ComponentInfo.getKeys()) { _daos.put(key, componentInfo);
_daos.put(key, ComponentInfo);
} }
return componentInfo;
} }
protected void addDaos() { protected void populateDaos() {
addDao("StackMaidDao", StackMaidDaoImpl.class); addDao("StackMaidDao", StackMaidDaoImpl.class);
addDao("VMTemplateZoneDao", VMTemplateZoneDaoImpl.class); addDao("VMTemplateZoneDao", VMTemplateZoneDaoImpl.class);
addDao("DomainRouterDao", DomainRouterDaoImpl.class); addDao("DomainRouterDao", DomainRouterDaoImpl.class);
addDao("HostDao", HostDaoImpl.class); addDao("HostDao", HostDaoImpl.class);
addDao("VMInstanceDao", VMInstanceDaoImpl.class); addDao("VMInstanceDao", VMInstanceDaoImpl.class);
addDao("UserVmDao", UserVmDaoImpl.class); addDao("UserVmDao", UserVmDaoImpl.class);
addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class); ComponentInfo<? extends GenericDao<?, ? extends Serializable>> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class);
addDao("DiskOfferingDao", DiskOfferingDaoImpl.class); info.addParameter("cache.size", "50");
addDao("DataCenterDao", DataCenterDaoImpl.class); info.addParameter("cache.time.to.live", "600");
addDao("HostPodDao", HostPodDaoImpl.class); 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("IPAddressDao", IPAddressDaoImpl.class);
addDao("VlanDao", VlanDaoImpl.class); addDao("VlanDao", VlanDaoImpl.class);
addDao("PodVlanMapDao", PodVlanMapDaoImpl.class); addDao("PodVlanMapDao", PodVlanMapDaoImpl.class);
addDao("AccountVlanMapDao", AccountVlanMapDaoImpl.class); addDao("AccountVlanMapDao", AccountVlanMapDaoImpl.class);
addDao("VolumeDao", VolumeDaoImpl.class); addDao("VolumeDao", VolumeDaoImpl.class);
addDao("EventDao", EventDaoImpl.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("UserStatisticsDao", UserStatisticsDaoImpl.class);
addDao("DiskTemplateDao", DiskTemplateDaoImpl.class);
addDao("FirewallRulesDao", FirewallRulesDaoImpl.class); addDao("FirewallRulesDao", FirewallRulesDaoImpl.class);
addDao("LoadBalancerDao", LoadBalancerDaoImpl.class); addDao("LoadBalancerDao", LoadBalancerDaoImpl.class);
addDao("NetworkRuleConfigDao", NetworkRuleConfigDaoImpl.class); addDao("NetworkRuleConfigDao", NetworkRuleConfigDaoImpl.class);
@ -207,7 +226,10 @@ public class DefaultComponentLibrary implements ComponentLibrary {
addDao("VMTemplatePoolDao", VMTemplatePoolDaoImpl.class); addDao("VMTemplatePoolDao", VMTemplatePoolDaoImpl.class);
addDao("LaunchPermissionDao", LaunchPermissionDaoImpl.class); addDao("LaunchPermissionDao", LaunchPermissionDaoImpl.class);
addDao("ConfigurationDao", ConfigurationDaoImpl.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("HighAvailabilityDao", HighAvailabilityDaoImpl.class);
addDao("ConsoleProxyDao", ConsoleProxyDaoImpl.class); addDao("ConsoleProxyDao", ConsoleProxyDaoImpl.class);
addDao("SecondaryStorageVmDao", SecondaryStorageVmDaoImpl.class); addDao("SecondaryStorageVmDao", SecondaryStorageVmDaoImpl.class);
@ -234,6 +256,7 @@ public class DefaultComponentLibrary implements ComponentLibrary {
addDao("InstanceGroupVMMapDao", InstanceGroupVMMapDaoImpl.class); addDao("InstanceGroupVMMapDao", InstanceGroupVMMapDaoImpl.class);
addDao("RemoteAccessVpnDao", RemoteAccessVpnDaoImpl.class); addDao("RemoteAccessVpnDao", RemoteAccessVpnDaoImpl.class);
addDao("VpnUserDao", VpnUserDaoImpl.class); addDao("VpnUserDao", VpnUserDaoImpl.class);
addDao("ItWorkDao", ItWorkDaoImpl.class);
} }
Map<String, ComponentInfo<Manager>> _managers = new HashMap<String, ComponentInfo<Manager>>(); Map<String, ComponentInfo<Manager>> _managers = new HashMap<String, ComponentInfo<Manager>>();
@ -242,23 +265,24 @@ public class DefaultComponentLibrary implements ComponentLibrary {
@Override @Override
public synchronized Map<String, ComponentInfo<GenericDao<?, ?>>> getDaos() { public synchronized Map<String, ComponentInfo<GenericDao<?, ?>>> getDaos() {
if (_daos.size() == 0) { if (_daos.size() == 0) {
addDaos(); populateDaos();
} }
return _daos; return _daos;
} }
protected void addManager(String name, Class<? extends Manager> clazz, List<Pair<String, Object>> params, boolean singleton) { protected ComponentInfo<Manager> addManager(String name, Class<? extends Manager> clazz, List<Pair<String, Object>> params, boolean singleton) {
ComponentInfo<Manager> ComponentInfo = new ComponentInfo<Manager>(name, clazz, params, singleton); ComponentInfo<Manager> info = new ComponentInfo<Manager>(name, clazz, params, singleton);
for (String key : ComponentInfo.getKeys()) { for (String key : info.getKeys()) {
_managers.put(key, ComponentInfo); _managers.put(key, info);
} }
return info;
} }
protected void addManager(String name, Class<? extends Manager> clazz) { protected ComponentInfo<Manager> addManager(String name, Class<? extends Manager> clazz) {
addManager(name, clazz, null, true); return addManager(name, clazz, new ArrayList<Pair<String, Object>>(), true);
} }
protected void addManagers() { protected void populateManagers() {
addManager("StackMaidManager", StackMaidManagerImpl.class); addManager("StackMaidManager", StackMaidManagerImpl.class);
addManager("agent manager", AgentManagerImpl.class); addManager("agent manager", AgentManagerImpl.class);
addManager("account manager", AccountManagerImpl.class); addManager("account manager", AccountManagerImpl.class);
@ -285,7 +309,7 @@ public class DefaultComponentLibrary implements ComponentLibrary {
addManager("DomainRouterManager", DomainRouterManagerImpl.class); 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()); ArrayList<ComponentInfo<Adapter>> lst = new ArrayList<ComponentInfo<Adapter>>(adapters.size());
for (Pair<String, Class<? extends T>> adapter : adapters) { for (Pair<String, Class<? extends T>> adapter : adapters) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@ -293,17 +317,24 @@ public class DefaultComponentLibrary implements ComponentLibrary {
lst.add(new ComponentInfo<Adapter>(adapter.first(), clazz)); lst.add(new ComponentInfo<Adapter>(adapter.first(), clazz));
} }
_adapters.put(interphace.getName(), lst); _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 @Override
public synchronized Map<String, ComponentInfo<Manager>> getManagers() { public synchronized Map<String, ComponentInfo<Manager>> getManagers() {
if (_managers.size() == 0) { if (_managers.size() == 0) {
addManagers(); populateManagers();
} }
return _managers; return _managers;
} }
public void addAllAdapters() { protected void populateAdapters() {
List<Pair<String, Class<? extends HostAllocator>>> hostAllocators = new ArrayList<Pair<String, Class<? extends HostAllocator>>>(); 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)); 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)); poolAllocators.add(new Pair<String, Class<? extends StoragePoolAllocator>>("GarbageCollecting", GarbageCollectingStoragePoolAllocator.class));
addAdapterChain(StoragePoolAllocator.class, poolAllocators); addAdapterChain(StoragePoolAllocator.class, poolAllocators);
List<Pair<String, Class<? extends PodAllocator>>> podAllocators = new ArrayList<Pair<String, Class<? extends PodAllocator>>>(); List<Pair<String, Class<? extends NetworkGuru>>> networkGurus = new ArrayList<Pair<String, Class<? extends NetworkGuru>>>();
podAllocators.add(new Pair<String, Class<? extends PodAllocator>>("User First", UserConcentratedAllocator.class)); networkGurus.add(new Pair<String, Class<? extends NetworkGuru>>("GuestNetworkGuru", GuestNetworkGuru.class));
addAdapterChain(PodAllocator.class, podAllocators); networkGurus.add(new Pair<String, Class<? extends NetworkGuru>>("PublicNetworkGuru", PublicNetworkGuru.class));
networkGurus.add(new Pair<String, Class<? extends NetworkGuru>>("PodBasedNetworkGuru", PodBasedNetworkGuru.class));
List<Pair<String, Class<? extends ConsoleProxyAllocator>>> proxyAllocators = new ArrayList<Pair<String, Class<? extends ConsoleProxyAllocator>>>(); networkGurus.add(new Pair<String, Class<? extends NetworkGuru>>("ControlNetworkGuru", ControlNetworkGuru.class));
proxyAllocators.add(new Pair<String, Class<? extends ConsoleProxyAllocator>>("Balance", ConsoleProxyBalanceAllocator.class)); addAdapterChain(NetworkGuru.class, networkGurus);
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 addOneAdapter(PodAllocator.class, "UserConcentratedPodAllocator", UserConcentratedAllocator.class);
addAdapterChain("Basic", ExteralIpAddressAllocator.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 List<Pair<String, Class<? extends Investigator>>> investigators = new ArrayList<Pair<String, Class<? extends Investigator>>>();
addAdapterChain("SimpleInvestigator", CheckOnAgentInvestigator.class); investigators.add(new Pair<String, Class<? extends Investigator>>("SimpleInvestigator", CheckOnAgentInvestigator.class));
addAdapterChain("XenServerInvestigator", XenServerInvestigator.class); investigators.add(new Pair<String, Class<? extends Investigator>>("XenServerInvestigator", XenServerInvestigator.class));
addAdapterChain("PingInvestigator", InvestigatorImpl.class); investigators.add(new Pair<String, Class<? extends Investigator>>("PingInvestigator", InvestigatorImpl.class));
addAdapterChain(Investigator.class, investigators);
addOneAdapter(FenceBuilder.class, "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);
// HA Fence Builder addOneAdapter(SecurityChecker.class, "DomainChecker", DomainChecker.class);
addAdapterChain("StorageFenceBuilder", StorageFence.class); addOneAdapter(DeploymentPlanner.class, "SimpleDeploymentPlanner", SimplePlanner.class);
// Discoverer
addAdapterChain("XCP Agent", XcpServerDiscoverer.class);
addAdapterChain("SecondaryStorage", SecondaryStorageDiscoverer.class);
addAdapterChain("KVM Agent", KvmServerDiscoverer.class);
// Deployment Planner
addAdapterChain("Simple", SimplePlanner.class);
} }
@Override @Override
public synchronized Map<String, List<ComponentInfo<Adapter>>> getAdapters() { public synchronized Map<String, List<ComponentInfo<Adapter>>> getAdapters() {
if (_adapters.size() == 0) { if (_adapters.size() == 0) {
addAdapters(); populateAdapters();
} }
return _adapters; return _adapters;
} }

View File

@ -531,7 +531,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach
@Override @Override
public ConsoleProxyVO startProxy(long proxyVmId, long startEventId) { public ConsoleProxyVO startProxy(long proxyVmId, long startEventId) {
try { try {
return start2(proxyVmId, startEventId); return start(proxyVmId, startEventId);
} catch (StorageUnavailableException e) { } catch (StorageUnavailableException e) {
s_logger.warn("Exception while trying to start console proxy", e); s_logger.warn("Exception while trying to start console proxy", e);
return null; return null;
@ -881,7 +881,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach
if (s_logger.isDebugEnabled()) if (s_logger.isDebugEnabled())
s_logger.debug("Assign console proxy from a newly started instance for request from data center : " + dataCenterId); 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"); long proxyVmId = (Long) context.get("proxyVmId");
if (proxyVmId == 0) { if (proxyVmId == 0) {
@ -921,7 +921,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach
if (s_logger.isDebugEnabled()) if (s_logger.isDebugEnabled())
s_logger.debug("Assign console proxy from a newly started instance for request from data center : " + dataCenterId); 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"); long proxyVmId = (Long) context.get("proxyVmId");
if (proxyVmId == 0) { if (proxyVmId == 0) {
@ -1468,7 +1468,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach
try { try {
if (proxyLock.lock(ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_SYNC)) { if (proxyLock.lock(ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_SYNC)) {
try { try {
readyProxy = start2(readyProxy.getId(), 0); readyProxy = start(readyProxy.getId(), 0);
} finally { } finally {
proxyLock.unlock(); proxyLock.unlock();
} }

View File

@ -49,13 +49,11 @@ import com.cloud.api.ServerApiException;
import com.cloud.api.commands.AddVpnUserCmd; import com.cloud.api.commands.AddVpnUserCmd;
import com.cloud.api.commands.AssignToLoadBalancerRuleCmd; import com.cloud.api.commands.AssignToLoadBalancerRuleCmd;
import com.cloud.api.commands.AssociateIPAddrCmd; 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.CreateLoadBalancerRuleCmd;
import com.cloud.api.commands.CreatePortForwardingRuleCmd;
import com.cloud.api.commands.CreateRemoteAccessVpnCmd; 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.DeleteLoadBalancerRuleCmd;
import com.cloud.api.commands.DeletePortForwardingRuleCmd;
import com.cloud.api.commands.DeleteRemoteAccessVpnCmd; import com.cloud.api.commands.DeleteRemoteAccessVpnCmd;
import com.cloud.api.commands.DisassociateIPAddrCmd; import com.cloud.api.commands.DisassociateIPAddrCmd;
import com.cloud.api.commands.ListPortForwardingRulesCmd; 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.ServiceOfferingVO;
import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.storage.StorageManager; import com.cloud.storage.StorageManager;
import com.cloud.storage.dao.DiskTemplateDao;
import com.cloud.storage.dao.GuestOSDao; import com.cloud.storage.dao.GuestOSDao;
import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.StoragePoolDao;
import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplateDao;
@ -167,7 +164,6 @@ import com.cloud.vm.UserVmVO;
import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineProfile; import com.cloud.vm.VirtualMachineProfile;
import com.cloud.vm.dao.DomainRouterDao;
import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.NicDao;
import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.UserVmDao;
@ -186,7 +182,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
@Inject LoadBalancerVMMapDao _loadBalancerVMMapDao = null; @Inject LoadBalancerVMMapDao _loadBalancerVMMapDao = null;
@Inject IPAddressDao _ipAddressDao = null; @Inject IPAddressDao _ipAddressDao = null;
@Inject VMTemplateDao _templateDao = null; @Inject VMTemplateDao _templateDao = null;
@Inject DiskTemplateDao _diskDao = null;
@Inject UserDao _userDao = null; @Inject UserDao _userDao = null;
@Inject AccountDao _accountDao = null; @Inject AccountDao _accountDao = null;
@Inject DomainDao _domainDao = 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.StoragePoolVO;
import com.cloud.storage.VMTemplateVO; import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.VolumeVO; import com.cloud.storage.VolumeVO;
import com.cloud.storage.dao.DiskTemplateDao;
import com.cloud.storage.dao.GuestOSDao; import com.cloud.storage.dao.GuestOSDao;
import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.StoragePoolDao;
import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplateDao;
@ -195,7 +194,6 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute
@Inject LoadBalancerVMMapDao _loadBalancerVMMapDao = null; @Inject LoadBalancerVMMapDao _loadBalancerVMMapDao = null;
@Inject IPAddressDao _ipAddressDao = null; @Inject IPAddressDao _ipAddressDao = null;
@Inject VMTemplateDao _templateDao = null; @Inject VMTemplateDao _templateDao = null;
@Inject DiskTemplateDao _diskDao = null;
@Inject DomainRouterDao _routerDao = null; @Inject DomainRouterDao _routerDao = null;
@Inject UserDao _userDao = null; @Inject UserDao _userDao = null;
@Inject AccountDao _accountDao = 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.StopSystemVm2Cmd;
import com.cloud.api.commands.StopSystemVmCmd; import com.cloud.api.commands.StopSystemVmCmd;
import com.cloud.api.commands.UpdateDomainCmd; import com.cloud.api.commands.UpdateDomainCmd;
import com.cloud.api.commands.UpdatePortForwardingRuleCmd;
import com.cloud.api.commands.UpdateIsoCmd; import com.cloud.api.commands.UpdateIsoCmd;
import com.cloud.api.commands.UpdateIsoPermissionsCmd; import com.cloud.api.commands.UpdateIsoPermissionsCmd;
import com.cloud.api.commands.UpdatePortForwardingRuleCmd;
import com.cloud.api.commands.UpdateTemplateCmd; import com.cloud.api.commands.UpdateTemplateCmd;
import com.cloud.api.commands.UpdateTemplatePermissionsCmd; import com.cloud.api.commands.UpdateTemplatePermissionsCmd;
import com.cloud.api.commands.UpdateVMGroupCmd; import com.cloud.api.commands.UpdateVMGroupCmd;
@ -111,7 +111,6 @@ import com.cloud.network.VpnUserVO;
import com.cloud.network.security.NetworkGroupVO; import com.cloud.network.security.NetworkGroupVO;
import com.cloud.service.ServiceOfferingVO; import com.cloud.service.ServiceOfferingVO;
import com.cloud.storage.DiskOfferingVO; import com.cloud.storage.DiskOfferingVO;
import com.cloud.storage.DiskTemplateVO;
import com.cloud.storage.GuestOSCategoryVO; import com.cloud.storage.GuestOSCategoryVO;
import com.cloud.storage.GuestOSVO; import com.cloud.storage.GuestOSVO;
import com.cloud.storage.SnapshotPolicyVO; import com.cloud.storage.SnapshotPolicyVO;
@ -642,12 +641,6 @@ public interface ManagementServer {
List<UsageVO> searchForUsage(Criteria c); 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. * Obtains a list of all templates.
* @return list of VMTemplates * @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.AccountVlanMapDao;
import com.cloud.dc.dao.ClusterDao; import com.cloud.dc.dao.ClusterDao;
import com.cloud.dc.dao.DataCenterDao; 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.HostPodDao;
import com.cloud.dc.dao.PodVlanMapDao; import com.cloud.dc.dao.PodVlanMapDao;
import com.cloud.dc.dao.VlanDao; 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.ServiceOfferingVO;
import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.storage.DiskOfferingVO; import com.cloud.storage.DiskOfferingVO;
import com.cloud.storage.DiskTemplateVO;
import com.cloud.storage.GuestOSCategoryVO; import com.cloud.storage.GuestOSCategoryVO;
import com.cloud.storage.GuestOSVO; import com.cloud.storage.GuestOSVO;
import com.cloud.storage.LaunchPermissionVO; import com.cloud.storage.LaunchPermissionVO;
@ -237,7 +236,6 @@ import com.cloud.storage.Volume.VolumeType;
import com.cloud.storage.VolumeStats; import com.cloud.storage.VolumeStats;
import com.cloud.storage.VolumeVO; import com.cloud.storage.VolumeVO;
import com.cloud.storage.dao.DiskOfferingDao; import com.cloud.storage.dao.DiskOfferingDao;
import com.cloud.storage.dao.DiskTemplateDao;
import com.cloud.storage.dao.GuestOSCategoryDao; import com.cloud.storage.dao.GuestOSCategoryDao;
import com.cloud.storage.dao.GuestOSDao; import com.cloud.storage.dao.GuestOSDao;
import com.cloud.storage.dao.LaunchPermissionDao; import com.cloud.storage.dao.LaunchPermissionDao;
@ -316,7 +314,7 @@ public class ManagementServerImpl implements ManagementServer {
private final NetworkGroupDao _networkSecurityGroupDao; private final NetworkGroupDao _networkSecurityGroupDao;
private final LoadBalancerDao _loadBalancerDao; private final LoadBalancerDao _loadBalancerDao;
private final IPAddressDao _publicIpAddressDao; private final IPAddressDao _publicIpAddressDao;
private final DataCenterIpAddressDaoImpl _privateIpAddressDao; private final DataCenterIpAddressDao _privateIpAddressDao;
private final LoadBalancerVMMapDao _loadBalancerVMMapDao; private final LoadBalancerVMMapDao _loadBalancerVMMapDao;
private final DomainRouterDao _routerDao; private final DomainRouterDao _routerDao;
private final ConsoleProxyDao _consoleProxyDao; private final ConsoleProxyDao _consoleProxyDao;
@ -359,7 +357,6 @@ public class ManagementServerImpl implements ManagementServer {
private final UserStatisticsDao _userStatsDao; private final UserStatisticsDao _userStatsDao;
private final VMInstanceDao _vmInstanceDao; private final VMInstanceDao _vmInstanceDao;
private final VolumeDao _volumeDao; private final VolumeDao _volumeDao;
private final DiskTemplateDao _diskTemplateDao;
private final AlertManager _alertMgr; private final AlertManager _alertMgr;
private final AsyncJobDao _jobDao; private final AsyncJobDao _jobDao;
private final AsyncJobManager _asyncMgr; private final AsyncJobManager _asyncMgr;
@ -425,7 +422,7 @@ public class ManagementServerImpl implements ManagementServer {
_networkSecurityGroupDao = locator.getDao(NetworkGroupDao.class); _networkSecurityGroupDao = locator.getDao(NetworkGroupDao.class);
_loadBalancerDao = locator.getDao(LoadBalancerDao.class); _loadBalancerDao = locator.getDao(LoadBalancerDao.class);
_publicIpAddressDao = locator.getDao(IPAddressDao.class); _publicIpAddressDao = locator.getDao(IPAddressDao.class);
_privateIpAddressDao = locator.getDao(DataCenterIpAddressDaoImpl.class); _privateIpAddressDao = locator.getDao(DataCenterIpAddressDao.class);
_loadBalancerVMMapDao = locator.getDao(LoadBalancerVMMapDao.class); _loadBalancerVMMapDao = locator.getDao(LoadBalancerVMMapDao.class);
_consoleProxyDao = locator.getDao(ConsoleProxyDao.class); _consoleProxyDao = locator.getDao(ConsoleProxyDao.class);
_secStorageVmDao = locator.getDao(SecondaryStorageVmDao.class); _secStorageVmDao = locator.getDao(SecondaryStorageVmDao.class);
@ -458,7 +455,6 @@ public class ManagementServerImpl implements ManagementServer {
_userStatsDao = locator.getDao(UserStatisticsDao.class); _userStatsDao = locator.getDao(UserStatisticsDao.class);
_vmInstanceDao = locator.getDao(VMInstanceDao.class); _vmInstanceDao = locator.getDao(VMInstanceDao.class);
_volumeDao = locator.getDao(VolumeDao.class); _volumeDao = locator.getDao(VolumeDao.class);
_diskTemplateDao = locator.getDao(DiskTemplateDao.class);
_alertMgr = locator.getManager(AlertManager.class); _alertMgr = locator.getManager(AlertManager.class);
_asyncMgr = locator.getManager(AsyncJobManager.class); _asyncMgr = locator.getManager(AsyncJobManager.class);
_tmpltMgr = locator.getManager(TemplateManager.class); _tmpltMgr = locator.getManager(TemplateManager.class);
@ -3195,11 +3191,6 @@ public class ManagementServerImpl implements ManagementServer {
return _publicIpAddressDao.search(sc, searchFilter); return _publicIpAddressDao.search(sc, searchFilter);
} }
@Override
public List<DiskTemplateVO> listAllActiveDiskTemplates() {
return _diskTemplateDao.listAll();
}
@Override @Override
public UserAccount authenticateUser(String username, String password, Long domainId, Map<String, Object[]> requestParameters) { public UserAccount authenticateUser(String username, String password, Long domainId, Map<String, Object[]> requestParameters) {
UserAccount user = null; UserAccount user = null;

View File

@ -161,7 +161,6 @@ import com.cloud.storage.Volume;
import com.cloud.storage.Volume.VolumeType; import com.cloud.storage.Volume.VolumeType;
import com.cloud.storage.VolumeVO; import com.cloud.storage.VolumeVO;
import com.cloud.storage.dao.DiskOfferingDao; import com.cloud.storage.dao.DiskOfferingDao;
import com.cloud.storage.dao.DiskTemplateDao;
import com.cloud.storage.dao.GuestOSCategoryDao; import com.cloud.storage.dao.GuestOSCategoryDao;
import com.cloud.storage.dao.GuestOSDao; import com.cloud.storage.dao.GuestOSDao;
import com.cloud.storage.dao.SnapshotDao; import com.cloud.storage.dao.SnapshotDao;
@ -218,7 +217,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
@Inject UserStatisticsDao _userStatsDao = null; @Inject UserStatisticsDao _userStatsDao = null;
@Inject VMTemplateDao _templateDao = null; @Inject VMTemplateDao _templateDao = null;
@Inject VMTemplateHostDao _templateHostDao = null; @Inject VMTemplateHostDao _templateHostDao = null;
@Inject DiskTemplateDao _diskDao = null;
@Inject DomainDao _domainDao = null; @Inject DomainDao _domainDao = null;
@Inject ResourceLimitDao _limitDao = null; @Inject ResourceLimitDao _limitDao = null;
@Inject UserVmDao _vmDao = 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__removed`(`removed`);
ALTER TABLE `cloud`.`volumes` ADD INDEX `i_volumes__pod_id`(`pod_id`); 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`); 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`.`data_ceneter`;
DROP TABLE IF EXISTS `cloud`.`volumes`; DROP TABLE IF EXISTS `cloud`.`volumes`;
DROP TABLE IF EXISTS `cloud`.`storage`; 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`.`data_center`;
DROP TABLE IF EXISTS `cloud`.`pricing`; DROP TABLE IF EXISTS `cloud`.`pricing`;
DROP TABLE IF EXISTS `cloud`.`sequence`; 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 ('volume_seq', 1);
INSERT INTO `cloud`.`sequence` (name, value) VALUES ('network_configuration_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` ( CREATE TABLE `cloud`.`volumes` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primary Key', `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primary Key',
`account_id` bigint unsigned NOT NULL COMMENT 'owner. foreign key to account table', `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 java.util.Map;
import com.cloud.utils.EnumerationImpl; 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 * 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. * the iterator even during dynamic reloading.
* *
**/ **/
public class Adapters<T extends Adapter> implements Iterable<T> { public class Adapters<T> implements Iterable<T> {
private Map<String, T> _map; protected Map<String, T> _map;
protected List<ComponentInfo<Adapter>> _infos;
protected String _name; protected String _name;
public Adapters(String name, List<T> adapters) { public Adapters(String name, List<ComponentInfo<Adapter>> adapters) {
_name = name; _name = name;
set(adapters); set(adapters);
} }
@ -65,12 +68,15 @@ public class Adapters<T extends Adapter> implements Iterable<T> {
return _map.values(); 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()); HashMap<String, T> map = new HashMap<String, T>(adapters.size());
for (T adapter : adapters) { for (ComponentInfo<Adapter> adapter : adapters) {
map.put(adapter.getName(), adapter); @SuppressWarnings("unchecked")
T t = (T)adapter.instance;
map.put(adapter.getName(), t);
} }
this._map = map; this._map = map;
this._infos = adapters;
} }
public T get(String name) { public T get(String name) {

View File

@ -32,6 +32,7 @@ import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import javax.ejb.Local; import javax.ejb.Local;
import javax.management.InstanceAlreadyExistsException; import javax.management.InstanceAlreadyExistsException;
@ -72,55 +73,38 @@ import com.cloud.utils.mgmt.ManagementBean;
* *
**/ **/
@SuppressWarnings("unchecked") @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 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; private static boolean s_doOnce = false;
protected static final Callback[] s_callbacks = new Callback[] { NoOp.INSTANCE, new DatabaseCallback() }; protected static final Callback[] s_callbacks = new Callback[] { NoOp.INSTANCE, new DatabaseCallback() };
protected static final CallbackFilter s_callbackFilter = new DatabaseCallbackFilter(); protected static final CallbackFilter s_callbackFilter = new DatabaseCallbackFilter();
protected static final HashMap<Class<?>, InjectInfo> s_factories = new HashMap<Class<?>, InjectInfo>(); 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, Adapters<? extends Adapter>> _adapterMap;
protected HashMap<String, ComponentInfo<Manager>> _managerMap; protected HashMap<String, ComponentInfo<Manager>> _managerMap;
protected LinkedHashMap<String, ComponentInfo<GenericDao<?, ?>>> _daoMap; protected LinkedHashMap<String, ComponentInfo<GenericDao<?, ?>>> _daoMap;
protected ComponentLocator _parentLocator; protected ComponentLocator _parentLocator;
protected String _serverName; protected String _serverName;
protected Object _component;
public ComponentLocator(String server) { public ComponentLocator(String server) {
_parentLocator = null; _parentLocator = null;
_serverName = server; _serverName = server;
Runtime.getRuntime().addShutdownHook(this);
} }
public String getLocatorName() { public String getLocatorName() {
return _serverName; return _serverName;
} }
@Override @Override
public synchronized void run() { public String getName() {
Iterator<Adapters<? extends Adapter>> itAdapters = _adapterMap.values().iterator(); return getLocatorName();
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<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) { protected void parse(String filename, String log4jFile) {
try { try {
SAXParserFactory spfactory = SAXParserFactory.newInstance(); SAXParserFactory spfactory = SAXParserFactory.newInstance();
@ -139,31 +123,43 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
XmlHandler handler = new XmlHandler(_serverName); XmlHandler handler = new XmlHandler(_serverName);
saxParser.parse(file, handler); saxParser.parse(file, handler);
if (handler.parent != null) {
_parentLocator = getLocatorInternal(handler.parent, false, filename, log4jFile);
}
_daoMap = new LinkedHashMap<String, ComponentInfo<GenericDao<?, ? extends Serializable>>>(); _daoMap = new LinkedHashMap<String, ComponentInfo<GenericDao<?, ? extends Serializable>>>();
_managerMap = new LinkedHashMap<String, ComponentInfo<Manager>>(); _managerMap = new LinkedHashMap<String, ComponentInfo<Manager>>();
_adapterMap = new HashMap<String, Adapters<? extends Adapter>>(); _adapterMap = new HashMap<String, Adapters<? extends Adapter>>();
if (handler.library != null) { if (handler.parent != null) {
Class<?> clazz = Class.forName(handler.library); synchronized(s_locators) {
ComponentLibrary library = (ComponentLibrary)clazz.newInstance(); _parentLocator = s_locators.get(handler.parent);
_managerMap.putAll(library.getManagers()); if (_parentLocator == null) {
_daoMap.putAll(library.getDaos()); _parentLocator = new ComponentLocator(handler.parent);
createAdaptersMap(library.getAdapters()); s_locators.put(handler.parent, _parentLocator);
_parentLocator.parse(filename, log4jFile);
}
}
} }
_managerMap.putAll(handler.managers); ComponentLibrary library = null;
_daoMap.putAll(handler.daos); 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. startDaos(); // daos should not be using managers and adapters.
createAdaptersMap(handler.adapters); if (library != null) {
instantiateManagers(); instantiateAdapters(library.getAdapters());
}
instantiateAdapters(handler.adapters); instantiateAdapters(handler.adapters);
instantiateManagers();
_component = createInstance(handler.componentClass, true, true);
configureManagers(); configureManagers();
configureAdapters();
startManagers(); startManagers();
startAdapters(); startAdapters();
} catch (ParserConfigurationException e) { } catch (ParserConfigurationException e) {
s_logger.error("Unable to load " + _serverName + " due to errors while parsing " + filename, 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<String, ComponentInfo<GenericDao<?, ?>>> entry : entries) { for (Map.Entry<String, ComponentInfo<GenericDao<?, ?>>> entry : entries) {
ComponentInfo<GenericDao<?, ?>> info = entry.getValue(); ComponentInfo<GenericDao<?, ?>> info = entry.getValue();
s_logger.info("Starting DAO: " + info.name);
try { try {
info.instance = (GenericDao<?, ?>)createInstance(info.clazz, true, info.singleton); info.instance = (GenericDao<?, ?>)createInstance(info.clazz, true, info.singleton);
inject(info.clazz, info.instance); if (info.singleton) {
if (!info.instance.configure(info.name, info.params)) { s_logger.info("Starting singleton DAO: " + info.name);
s_logger.error("Unable to configure DAO: " + info.name); Singleton singleton = s_singletons.get(info.clazz);
System.exit(1); 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) { } catch (ConfigurationException e) {
s_logger.error("Unable to configure DAO: " + info.name, 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) { private static Object createInstance(Class<?> clazz, boolean inject, boolean singleton, Object... args) {
Factory factory = null; Factory factory = null;
Object entity = null; Singleton entity = null;
synchronized(s_factories) { synchronized(s_factories) {
if (singleton) { if (singleton) {
entity = s_singletons.get(clazz.toString()); entity = s_singletons.get(clazz);
if (entity != null) { if (entity != null) {
s_logger.debug("Found singleton instantiation for " + clazz.toString()); s_logger.debug("Found singleton instantiation for " + clazz.toString());
return entity; return entity.singleton;
} }
} }
InjectInfo info = s_factories.get(clazz); 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()); 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 { } else {
entity = factory.newInstance(s_callbacks); entity = new Singleton(factory.newInstance(s_callbacks));
} }
if (inject) { if (inject) {
inject(clazz, entity); inject(clazz, entity.singleton);
entity.state = Singleton.State.Injected;
} }
if (singleton) { if (singleton) {
synchronized(s_factories) { 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) { if (info == null) {
return null; throw new CloudRuntimeException("Unable to find DAO " + name);
} }
_daoMap.put(name, info); _daoMap.put(name, info);
return 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) { public static synchronized Object getComponent(String componentName) {
ComponentLocator locator = s_locators.get(componentName); ComponentLocator locator = s_locators.get(componentName);
if (locator == null) { if (locator == null) {
ComponentLocator.getLocator(componentName); locator = ComponentLocator.getLocator(componentName);
} }
String implementationClass = _implementationClassMap.get(componentName); return locator._component;
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;
} }
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()); ComponentInfo<GenericDao<?, ?>> info = getDao(clazz.getName());
return info != null ? (T)info.instance : null; return info != null ? (T)info.instance : null;
} }
@ -356,17 +341,40 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
Set<Map.Entry<String, ComponentInfo<Manager>>> entries = _managerMap.entrySet(); Set<Map.Entry<String, ComponentInfo<Manager>>> entries = _managerMap.entrySet();
for (Map.Entry<String, ComponentInfo<Manager>> entry : entries) { for (Map.Entry<String, ComponentInfo<Manager>> entry : entries) {
ComponentInfo<Manager> info = entry.getValue(); ComponentInfo<Manager> info = entry.getValue();
s_logger.info("Injecting Manager: " + info.name); if (info.singleton) {
inject(info.clazz, info.instance); 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) { for (Map.Entry<String, ComponentInfo<Manager>> entry : entries) {
ComponentInfo<Manager> info = entry.getValue(); ComponentInfo<Manager> info = entry.getValue();
s_logger.info("Configuring Manager: " + info.name); if (info.singleton) {
try { Singleton s = s_singletons.get(info.clazz);
info.instance.configure(info.name, info.params); if (s.state == Singleton.State.Injected) {
} catch (ConfigurationException e) { s_logger.info("Configuring singleton Manager: " + info.name);
s_logger.error("Unable to configure manager: " + info.name, e); try {
System.exit(1); 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(); Class<?> fc = field.getType();
Object instance = null; Object instance = null;
if (Manager.class.isAssignableFrom(fc)) { if (Manager.class.isAssignableFrom(fc)) {
s_logger.trace("Manager: " + fc.getName());
instance = locator.getManager(fc); instance = locator.getManager(fc);
} else if (GenericDao.class.isAssignableFrom(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)) { } else if (Adapters.class.isAssignableFrom(fc)) {
s_logger.trace("Adapter" + fc.getName());
instance = locator.getAdapters(inject.adapter()); instance = locator.getAdapters(inject.adapter());
} else { } else {
s_logger.trace("Other:" + fc.getName());
instance = locator.getManager(fc); instance = locator.getManager(fc);
} }
@ -414,14 +426,29 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
Set<Map.Entry<String, ComponentInfo<Manager>>> entries = _managerMap.entrySet(); Set<Map.Entry<String, ComponentInfo<Manager>>> entries = _managerMap.entrySet();
for (Map.Entry<String, ComponentInfo<Manager>> entry : entries) { for (Map.Entry<String, ComponentInfo<Manager>> entry : entries) {
ComponentInfo<Manager> info = entry.getValue(); ComponentInfo<Manager> info = entry.getValue();
s_logger.info("Starting Manager: " + info.name); if (info.singleton) {
if (!info.instance.start()) { Singleton s = s_singletons.get(info.clazz);
throw new CloudRuntimeException("Incorrect Configuration: " + info.name); 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; return (T)info.instance;
} }
protected void instantiateAdapters(Map<String, List<ComponentInfo<Adapter>>> map) { protected void configureAdapters() {
Set<Map.Entry<String, List<ComponentInfo<Adapter>>>> entries = map.entrySet(); for (Adapters<? extends Adapter> adapters : _adapterMap.values()) {
for (Map.Entry<String, List<ComponentInfo<Adapter>>> entry : entries) { List<ComponentInfo<Adapter>> infos = adapters._infos;
Adapters<Adapter> adapters = (Adapters<Adapter>)_adapterMap.get(entry.getKey()); for (ComponentInfo<Adapter> info : infos) {
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);
try { try {
if (!info.instance.configure(info.name, info.params)) { if (info.singleton) {
s_logger.error("Unable to configure adapter: " + info.name); Singleton singleton = s_singletons.get(info.clazz);
System.exit(1); 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) { } catch (ConfigurationException e) {
s_logger.error("Unable to configure adapter: " + info.name, 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); s_logger.error("Unable to configure adapter: " + info.name, e);
System.exit(1); 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(); Set<Map.Entry<String, List<ComponentInfo<Adapter>>>> entries = map.entrySet();
for (Map.Entry<String, List<ComponentInfo<Adapter>>> entry : entries) { for (Map.Entry<String, List<ComponentInfo<Adapter>>> entry : entries) {
List<? extends Adapter> lst = new ArrayList<Adapter>(entry.getValue().size()); for (ComponentInfo<Adapter> info : entry.getValue()) {
_adapterMap.put(entry.getKey(), new Adapters(entry.getKey(), lst)); 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() { protected void startAdapters() {
for (Map.Entry<String, Adapters<? extends Adapter>> entry : _adapterMap.entrySet()) { for (Map.Entry<String, Adapters<? extends Adapter>> entry : _adapterMap.entrySet()) {
for (Adapter adapter : entry.getValue().get()) { for (ComponentInfo<Adapter> adapter : entry.getValue()._infos) {
s_logger.info("Starting Adapter: " + adapter.getName()); if (adapter.singleton) {
if (!adapter.start()) { Singleton s = s_singletons.get(adapter.clazz);
throw new CloudRuntimeException("Unable to start adapter: " + adapter.getName()); 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 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) { protected static ComponentLocator getLocatorInternal(String server, boolean setInThreadLocal, String configFileName, String log4jFile) {
// init log4j based on the passed in configuration // init log4j based on the passed in configuration
if (s_doOnce == false) { if (s_doOnce == false) {
@ -605,6 +663,7 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
PropertyConfigurator.configureAndWatch(file.getAbsolutePath()); PropertyConfigurator.configureAndWatch(file.getAbsolutePath());
} }
} }
Runtime.getRuntime().addShutdownHook(new CleanupThread());
s_doOnce = true; s_doOnce = true;
} }
@ -669,6 +728,11 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
this(name, clazz, new ArrayList<Pair<String, Object>>(0)); 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) { public ComponentInfo(String name, Class<? extends T> clazz, List<Pair<String, Object>> params) {
this(name, clazz, params, true); 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; StringBuilder value;
String serverName; String serverName;
boolean parse; boolean parse;
ComponentInfo<?> currentInfo; ComponentInfo<?> currentInfo;
Class<?> componentClass;
public XmlHandler(String serverName) { public XmlHandler(String serverName) {
this.serverName = serverName; this.serverName = serverName;
@ -770,8 +839,10 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
parent = getAttribute(atts, "extends"); parent = getAttribute(atts, "extends");
String implementationClass = getAttribute(atts, "class"); String implementationClass = getAttribute(atts, "class");
if (implementationClass != null) { try {
_implementationClassMap.put(_serverName, implementationClass); componentClass = Class.forName(implementationClass);
} catch (ClassNotFoundException e) {
throw new CloudRuntimeException("Unable to find " + implementationClass, e);
} }
library = getAttribute(atts, "library"); library = getAttribute(atts, "library");
@ -860,4 +931,68 @@ public class ComponentLocator extends Thread implements ComponentLocatorMBean {
this.enhancer = enhancer; 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;
}
}
} }