From 56e5fbdee29af94b7c3ffeebe1e757292b9f09ae Mon Sep 17 00:00:00 2001 From: Alex Huang Date: Thu, 10 Jan 2013 11:44:47 -0800 Subject: [PATCH] removed import of componentlocator and inject from all files --- .../org/apache/cloudstack/api/BaseCmd.java | 2 +- .../storage/template/UploadManagerImpl.java | 551 ++++++------ .../ObjectInDataStoreManagerImpl.java | 2 +- .../storage/volume/db/VolumeDao2Impl.java | 2 +- .../api/commands/netapp/AssociateLunCmd.java | 2 +- .../api/commands/netapp/CreateLunCmd.java | 2 +- .../netapp/CreateVolumeOnFilerCmd.java | 2 +- .../commands/netapp/CreateVolumePoolCmd.java | 2 +- .../commands/netapp/DeleteVolumePoolCmd.java | 2 +- .../api/commands/netapp/DestroyLunCmd.java | 2 +- .../netapp/DestroyVolumeOnFilerCmd.java | 2 +- .../api/commands/netapp/DissociateLunCmd.java | 2 +- .../api/commands/netapp/ListLunsCmd.java | 2 +- .../commands/netapp/ListVolumePoolsCmd.java | 2 +- .../netapp/ListVolumesOnFilerCmd.java | 2 +- .../commands/netapp/ModifyVolumePoolCmd.java | 2 +- .../allocator/impl/RandomAllocator.java | 43 +- .../resource/LibvirtComputingResource.java | 2 +- .../agent/manager/MockAgentManagerImpl.java | 2 +- .../agent/manager/MockStorageManagerImpl.java | 2 +- .../agent/manager/MockVmManagerImpl.java | 2 +- .../agent/manager/SimulatorManagerImpl.java | 2 +- .../api/commands/ConfigureSimulator.java | 2 +- .../com/cloud/resource/AgentResourceBase.java | 2 +- .../cloud/resource/SimulatorDiscoverer.java | 2 +- .../SimulatorSecondaryDiscoverer.java | 2 +- .../com/cloud/simulator/SimulatorGuru.java | 2 +- .../cloud/simulator/dao/MockVMDaoImpl.java | 2 +- .../vmware/VmwareServerDiscoverer.java | 2 +- .../vmware/manager/VmwareManagerImpl.java | 2 +- .../vmware/resource/VmwareContextFactory.java | 2 +- .../vmware/resource/VmwareResource.java | 2 +- .../network/lb/dao/ElasticLbVmMapDaoImpl.java | 2 +- .../server/auth/MD5UserAuthenticator.java | 2 +- .../auth/PlainTextUserAuthenticator.java | 2 +- .../auth/SHA256SaltedUserAuthenticator.java | 4 +- .../cloud/agent/manager/AgentManagerImpl.java | 5 - .../manager/ClusteredAgentManagerImpl.java | 3 - server/src/com/cloud/api/ApiServer.java | 24 +- server/src/com/cloud/api/ApiServlet.java | 28 +- .../api/commands/AddTrafficMonitorCmd.java | 128 +-- .../api/commands/DeleteTrafficMonitorCmd.java | 93 +-- .../api/commands/ListTrafficMonitorsCmd.java | 2 +- .../query/dao/DomainRouterJoinDaoImpl.java | 14 +- .../cloud/api/query/dao/HostJoinDaoImpl.java | 30 +- .../api/query/dao/ProjectJoinDaoImpl.java | 12 +- .../api/query/dao/ResourceTagJoinDaoImpl.java | 12 +- .../query/dao/SecurityGroupJoinDaoImpl.java | 14 +- .../api/query/dao/StoragePoolJoinDaoImpl.java | 14 +- .../api/query/dao/UserVmJoinDaoImpl.java | 20 +- .../api/query/dao/VolumeJoinDaoImpl.java | 24 +- .../async/AsyncJobExecutorContextImpl.java | 155 ++-- .../com/cloud/async/AsyncJobManagerImpl.java | 784 +++++++++--------- .../com/cloud/async/SyncQueueManagerImpl.java | 351 ++++---- .../cloud/capacity/dao/CapacityDaoImpl.java | 560 +++++++------ .../com/cloud/cluster/CheckPointManager.java | 52 -- .../cloud/cluster/CheckPointManagerImpl.java | 247 ------ server/src/com/cloud/cluster/CleanupMaid.java | 41 - .../com/cloud/cluster/ClusterManagerImpl.java | 405 ++++----- server/src/com/cloud/cluster/StackMaid.java | 153 ---- .../dao/ResourceCountDaoImpl.java | 255 +++--- .../AgentBasedConsoleProxyManager.java | 33 +- .../ConsoleProxyBalanceAllocator.java | 77 +- .../consoleproxy/ConsoleProxyManagerImpl.java | 133 ++- .../StaticConsoleProxyManager.java | 17 +- .../src/com/cloud/dc/dao/ClusterDaoImpl.java | 111 ++- .../src/com/cloud/dc/dao/HostPodDaoImpl.java | 118 +-- server/src/com/cloud/dc/dao/VlanDaoImpl.java | 377 +++++---- .../src/com/cloud/deploy/FirstFitPlanner.java | 148 ++-- .../cloud/ha/HighAvailabilityManagerImpl.java | 76 +- .../src/com/cloud/host/dao/HostDaoImpl.java | 283 ++++--- .../hypervisor/HypervisorGuruManagerImpl.java | 90 +- .../com/cloud/maint/UpgradeManagerImpl.java | 29 +- .../migration/Db21to22MigrationUtil.java | 162 ++-- .../network/ExteralIpAddressAllocator.java | 236 +++--- .../ExternalNetworkDeviceManagerImpl.java | 44 +- .../network/as/AutoScaleManagerImpl.java | 19 +- .../network/dao/FirewallRulesDaoImpl.java | 6 +- .../cloud/network/dao/IPAddressDaoImpl.java | 58 +- .../network/dao/LoadBalancerDaoImpl.java | 3 +- .../com/cloud/network/dao/NetworkDaoImpl.java | 1 - .../network/dao/PhysicalNetworkDaoImpl.java | 9 +- .../dao/Site2SiteVpnConnectionDaoImpl.java | 12 +- .../dao/Site2SiteVpnGatewayDaoImpl.java | 7 +- .../network/guru/ControlNetworkGuru.java | 2 +- .../VirtualNetworkApplianceManagerImpl.java | 2 +- .../rules/dao/PortForwardingRulesDaoImpl.java | 2 +- .../security/SecurityGroupManagerImpl.java | 2 +- .../security/dao/SecurityGroupDaoImpl.java | 2 +- .../com/cloud/network/vpc/VpcManagerImpl.java | 2 +- .../network/vpc/dao/StaticRouteDaoImpl.java | 2 +- .../com/cloud/network/vpc/dao/VpcDaoImpl.java | 2 +- .../vpn/RemoteAccessVpnManagerImpl.java | 2 +- .../network/vpn/Site2SiteVpnManagerImpl.java | 2 +- .../cloud/projects/dao/ProjectDaoImpl.java | 2 +- .../com/cloud/resource/DiscovererBase.java | 2 +- .../cloud/servlet/ConsoleProxyServlet.java | 2 +- .../servlet/RegisterCompleteServlet.java | 2 +- .../com/cloud/storage/StorageManagerImpl.java | 2 +- .../storage/StorageMigrationCleanupMaid.java | 2 +- ...GarbageCollectingStoragePoolAllocator.java | 2 +- .../allocator/UseLocalForRootAllocator.java | 2 +- .../cloud/storage/dao/SnapshotDaoImpl.java | 2 +- .../cloud/storage/dao/StoragePoolDaoImpl.java | 2 +- .../cloud/storage/dao/VMTemplateDaoImpl.java | 2 +- .../com/cloud/storage/dao/VolumeDaoImpl.java | 2 +- .../storage/listener/StoragePoolMonitor.java | 2 +- .../DummySecondaryStorageResource.java | 2 +- .../com/cloud/storage/s3/S3ManagerImpl.java | 2 +- .../storage/snapshot/SnapshotManagerImpl.java | 2 +- .../snapshot/SnapshotSchedulerImpl.java | 2 +- .../cloud/template/TemplateManagerImpl.java | 2 +- server/src/com/cloud/test/IPRangeConfig.java | 2 +- server/src/com/cloud/test/PodZoneConfig.java | 2 +- .../com/cloud/upgrade/DatabaseCreator.java | 2 +- .../upgrade/DatabaseIntegrityChecker.java | 2 +- .../cloud/upgrade/DatabaseUpgradeChecker.java | 2 +- .../PremiumDatabaseUpgradeChecker.java | 2 +- .../com/cloud/user/AccountManagerImpl.java | 2 +- .../src/com/cloud/vm/UserVmManagerImpl.java | 2 +- .../src/com/cloud/vm/dao/UserVmDaoImpl.java | 2 +- .../com/cloud/vm/dao/VMInstanceDaoImpl.java | 2 +- .../SecurityGroupManagerImpl2Test.java | 2 +- .../com/cloud/snapshot/SnapshotDaoTest.java | 2 +- .../cloud/storage/dao/StoragePoolDaoTest.java | 2 +- .../AdvanceZone217To224UpgradeTest.java | 2 +- .../AdvanceZone223To224UpgradeTest.java | 2 +- .../upgrade/BasicZone218To224UpgradeTest.java | 2 +- .../upgrade/HostCapacity218to22Test.java | 2 +- .../InstanceGroup218To224UpgradeTest.java | 2 +- .../PortForwarding218To224UpgradeTest.java | 2 +- .../upgrade/Sanity220To224UpgradeTest.java | 2 +- .../upgrade/Sanity222To224UpgradeTest.java | 2 +- .../upgrade/Sanity223To225UpgradeTest.java | 2 +- .../upgrade/Sanity224To225UpgradeTest.java | 2 +- .../upgrade/Template2214To30UpgradeTest.java | 2 +- .../cloud/upgrade/Test2214To30DBUpgrade.java | 2 +- .../upgrade/Usage217To224UpgradeTest.java | 2 +- .../UsageEvents218To224UpgradeTest.java | 2 +- .../com/cloud/vm/dao/UserVmDaoImplTest.java | 2 +- .../com/cloud/vpc/MockVpcManagerImpl.java | 2 +- server/test/com/cloud/vpc/VpcApiUnitTest.java | 2 +- .../cloud/usage/UsageAlertManagerImpl.java | 2 +- .../src/com/cloud/usage/UsageManagerImpl.java | 4 +- usage/src/com/cloud/usage/UsageServer.java | 2 +- .../usage/parser/IPAddressUsageParser.java | 2 +- .../usage/parser/LoadBalancerUsageParser.java | 2 +- .../parser/NetworkOfferingUsageParser.java | 2 +- .../usage/parser/NetworkUsageParser.java | 2 +- .../parser/PortForwardingUsageParser.java | 2 +- .../parser/SecurityGroupUsageParser.java | 2 +- .../usage/parser/StorageUsageParser.java | 2 +- .../usage/parser/VMInstanceUsageParser.java | 2 +- .../usage/parser/VPNUserUsageParser.java | 2 +- .../cloud/usage/parser/VolumeUsageParser.java | 2 +- .../com/cloud/utils/db/TransactionTest.java | 2 +- .../utils/log/CglibThrowableRendererTest.java | 2 +- 157 files changed, 2856 insertions(+), 3431 deletions(-) delete mode 100644 server/src/com/cloud/cluster/CheckPointManager.java delete mode 100644 server/src/com/cloud/cluster/CheckPointManagerImpl.java delete mode 100644 server/src/com/cloud/cluster/CleanupMaid.java delete mode 100644 server/src/com/cloud/cluster/StackMaid.java diff --git a/api/src/org/apache/cloudstack/api/BaseCmd.java b/api/src/org/apache/cloudstack/api/BaseCmd.java index c0ef8a0985e..ba2c4d21a50 100644 --- a/api/src/org/apache/cloudstack/api/BaseCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseCmd.java @@ -141,7 +141,7 @@ public abstract class BaseCmd { public static QueryService _queryService; - static void setComponents(ResponseGenerator generator) { + public static void setComponents(ResponseGenerator generator) { _mgr = ComponentContext.getComponent(ManagementService.class); _accountService = ComponentContext.getComponent(AccountService.class); _configService = ComponentContext.getComponent(ConfigurationService.class); diff --git a/core/src/com/cloud/storage/template/UploadManagerImpl.java b/core/src/com/cloud/storage/template/UploadManagerImpl.java index 2dd1751aeaa..0de1c6ccf67 100755 --- a/core/src/com/cloud/storage/template/UploadManagerImpl.java +++ b/core/src/com/cloud/storage/template/UploadManagerImpl.java @@ -21,6 +21,7 @@ import java.net.URI; import java.net.URISyntaxException; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.List; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -46,15 +47,13 @@ import com.cloud.storage.resource.SecondaryStorageResource; import com.cloud.storage.template.TemplateUploader.Status; import com.cloud.storage.template.TemplateUploader.UploadCompleteCallback; import com.cloud.utils.NumbersUtil; -import com.cloud.utils.component.Adapters; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; public class UploadManagerImpl implements UploadManager { - public class Completion implements UploadCompleteCallback { + public class Completion implements UploadCompleteCallback { private final String jobId; public Completion(String jobId) { @@ -66,180 +65,180 @@ public class UploadManagerImpl implements UploadManager { setUploadStatus(jobId, status); } } - - private static class UploadJob { - private final TemplateUploader tu; - private final String jobId; - private final String name; - private final ImageFormat format; - private String tmpltPath; - private String description; - private String checksum; - private Long accountId; - private String installPathPrefix; - private long templatesize; - private long id; - public UploadJob(TemplateUploader tu, String jobId, long id, String name, ImageFormat format, boolean hvm, Long accountId, String descr, String cksum, String installPathPrefix) { - super(); - this.tu = tu; - this.jobId = jobId; - this.name = name; - this.format = format; - this.accountId = accountId; - this.description = descr; - this.checksum = cksum; - this.installPathPrefix = installPathPrefix; - this.templatesize = 0; - this.id = id; - } + private static class UploadJob { + private final TemplateUploader tu; + private final String jobId; + private final String name; + private final ImageFormat format; + private String tmpltPath; + private String description; + private String checksum; + private Long accountId; + private String installPathPrefix; + private long templatesize; + private long id; - public TemplateUploader getTd() { - return tu; - } + public UploadJob(TemplateUploader tu, String jobId, long id, String name, ImageFormat format, boolean hvm, Long accountId, String descr, String cksum, String installPathPrefix) { + super(); + this.tu = tu; + this.jobId = jobId; + this.name = name; + this.format = format; + this.accountId = accountId; + this.description = descr; + this.checksum = cksum; + this.installPathPrefix = installPathPrefix; + this.templatesize = 0; + this.id = id; + } - public String getDescription() { - return description; - } + public TemplateUploader getTd() { + return tu; + } - public String getChecksum() { - return checksum; - } + public String getDescription() { + return description; + } - public UploadJob(TemplateUploader td, String jobId, UploadCommand cmd) { - this.tu = td; - this.jobId = jobId; - this.name = cmd.getName(); - this.format = cmd.getFormat(); - } + public String getChecksum() { + return checksum; + } - public TemplateUploader getTemplateUploader() { - return tu; - } + public UploadJob(TemplateUploader td, String jobId, UploadCommand cmd) { + this.tu = td; + this.jobId = jobId; + this.name = cmd.getName(); + this.format = cmd.getFormat(); + } - public String getJobId() { - return jobId; - } + public TemplateUploader getTemplateUploader() { + return tu; + } - public String getTmpltName() { - return name; - } + public String getJobId() { + return jobId; + } - public ImageFormat getFormat() { - return format; - } + public String getTmpltName() { + return name; + } - public Long getAccountId() { - return accountId; - } + public ImageFormat getFormat() { + return format; + } - public long getId() { - return id; - } + public Long getAccountId() { + return accountId; + } - public void setTmpltPath(String tmpltPath) { - this.tmpltPath = tmpltPath; - } + public long getId() { + return id; + } - public String getTmpltPath() { - return tmpltPath; - } + public void setTmpltPath(String tmpltPath) { + this.tmpltPath = tmpltPath; + } - public String getInstallPathPrefix() { - return installPathPrefix; - } + public String getTmpltPath() { + return tmpltPath; + } - public void cleanup() { - if (tu != null) { - String upldPath = tu.getUploadLocalPath(); - if (upldPath != null) { - File f = new File(upldPath); - f.delete(); - } - } - } + public String getInstallPathPrefix() { + return installPathPrefix; + } - public void setTemplatesize(long templatesize) { - this.templatesize = templatesize; - } + public void cleanup() { + if (tu != null) { + String upldPath = tu.getUploadLocalPath(); + if (upldPath != null) { + File f = new File(upldPath); + f.delete(); + } + } + } + + public void setTemplatesize(long templatesize) { + this.templatesize = templatesize; + } + + public long getTemplatesize() { + return templatesize; + } + } + public static final Logger s_logger = Logger.getLogger(UploadManagerImpl.class); + private ExecutorService threadPool; + private final Map jobs = new ConcurrentHashMap(); + private String parentDir; + private List _processors; + private String publicTemplateRepo; + private final String extractMountPoint = "/mnt/SecStorage/extractmnt"; + private StorageLayer _storage; + private int installTimeoutPerGig; + private boolean _sslCopy; + private String _name; + private boolean hvm; + + + @Override + public String uploadPublicTemplate(long id, String url, String name, + ImageFormat format, Long accountId, String descr, + String cksum, String installPathPrefix, String userName, + String passwd, long templateSizeInBytes) { - public long getTemplatesize() { - return templatesize; - } - } - public static final Logger s_logger = Logger.getLogger(UploadManagerImpl.class); - private ExecutorService threadPool; - private final Map jobs = new ConcurrentHashMap(); - private String parentDir; - private Adapters _processors; - private String publicTemplateRepo; - private String extractMountPoint = "/mnt/SecStorage/extractmnt"; - private StorageLayer _storage; - private int installTimeoutPerGig; - private boolean _sslCopy; - private String _name; - private boolean hvm; - - - @Override - public String uploadPublicTemplate(long id, String url, String name, - ImageFormat format, Long accountId, String descr, - String cksum, String installPathPrefix, String userName, - String passwd, long templateSizeInBytes) { - UUID uuid = UUID.randomUUID(); String jobId = uuid.toString(); String completePath = parentDir + File.separator + installPathPrefix; s_logger.debug("Starting upload from " + completePath); - + URI uri; - try { - uri = new URI(url); - } catch (URISyntaxException e) { - s_logger.error("URI is incorrect: " + url); - throw new CloudRuntimeException("URI is incorrect: " + url); - } - TemplateUploader tu; - if ((uri != null) && (uri.getScheme() != null)) { - if (uri.getScheme().equalsIgnoreCase("ftp")) { - tu = new FtpTemplateUploader(completePath, url, new Completion(jobId), templateSizeInBytes); - } else { - s_logger.error("Scheme is not supported " + url); - throw new CloudRuntimeException("Scheme is not supported " + url); - } - } else { - s_logger.error("Unable to download from URL: " + url); - throw new CloudRuntimeException("Unable to download from URL: " + url); - } - UploadJob uj = new UploadJob(tu, jobId, id, name, format, hvm, accountId, descr, cksum, installPathPrefix); - jobs.put(jobId, uj); - threadPool.execute(tu); + try { + uri = new URI(url); + } catch (URISyntaxException e) { + s_logger.error("URI is incorrect: " + url); + throw new CloudRuntimeException("URI is incorrect: " + url); + } + TemplateUploader tu; + if ((uri != null) && (uri.getScheme() != null)) { + if (uri.getScheme().equalsIgnoreCase("ftp")) { + tu = new FtpTemplateUploader(completePath, url, new Completion(jobId), templateSizeInBytes); + } else { + s_logger.error("Scheme is not supported " + url); + throw new CloudRuntimeException("Scheme is not supported " + url); + } + } else { + s_logger.error("Unable to download from URL: " + url); + throw new CloudRuntimeException("Unable to download from URL: " + url); + } + UploadJob uj = new UploadJob(tu, jobId, id, name, format, hvm, accountId, descr, cksum, installPathPrefix); + jobs.put(jobId, uj); + threadPool.execute(tu); - return jobId; - - } + return jobId; - @Override - public String getUploadError(String jobId) { + } + + @Override + public String getUploadError(String jobId) { UploadJob uj = jobs.get(jobId); if (uj != null) { return uj.getTemplateUploader().getUploadError(); } return null; - } + } - @Override - public int getUploadPct(String jobId) { - UploadJob uj = jobs.get(jobId); + @Override + public int getUploadPct(String jobId) { + UploadJob uj = jobs.get(jobId); if (uj != null) { return uj.getTemplateUploader().getUploadPercent(); } return 0; - } + } - @Override - public Status getUploadStatus(String jobId) { + @Override + public Status getUploadStatus(String jobId) { UploadJob job = jobs.get(jobId); if (job != null) { TemplateUploader tu = job.getTemplateUploader(); @@ -248,8 +247,8 @@ public class UploadManagerImpl implements UploadManager { } } return Status.UNKNOWN; - } - + } + public static UploadVO.Status convertStatus(Status tds) { switch (tds) { case ABORTED: @@ -277,11 +276,11 @@ public class UploadManagerImpl implements UploadManager { public com.cloud.storage.UploadVO.Status getUploadStatus2(String jobId) { return convertStatus(getUploadStatus(jobId)); } - @Override - public String getPublicTemplateRepo() { - // TODO Auto-generated method stub - return null; - } + @Override + public String getPublicTemplateRepo() { + // TODO Auto-generated method stub + return null; + } private UploadAnswer handleUploadProgressCmd(UploadProgressCommand cmd) { String jobId = cmd.getJobId(); @@ -290,7 +289,7 @@ public class UploadManagerImpl implements UploadManager { if (jobId != null) uj = jobs.get(jobId); if (uj == null) { - return new UploadAnswer(null, 0, "Cannot find job", com.cloud.storage.UploadVO.Status.UNKNOWN, "", "", 0); + return new UploadAnswer(null, 0, "Cannot find job", com.cloud.storage.UploadVO.Status.UNKNOWN, "", "", 0); } TemplateUploader td = uj.getTemplateUploader(); switch (cmd.getRequest()) { @@ -300,7 +299,7 @@ public class UploadManagerImpl implements UploadManager { td.stopUpload(); sleep(); break; - /*case RESTART: + /*case RESTART: td.stopUpload(); sleep(); threadPool.execute(td); @@ -316,10 +315,10 @@ public class UploadManagerImpl implements UploadManager { return new UploadAnswer(jobId, getUploadPct(jobId), getUploadError(jobId), getUploadStatus2(jobId), getUploadLocalPath(jobId), getInstallPath(jobId), getUploadTemplateSize(jobId)); } - + @Override public UploadAnswer handleUploadCommand(SecondaryStorageResource resource, UploadCommand cmd) { - s_logger.warn("Handling the upload " +cmd.getInstallPath() + " " + cmd.getId()); + s_logger.warn("Handling the upload " +cmd.getInstallPath() + " " + cmd.getId()); if (cmd instanceof UploadProgressCommand) { return handleUploadProgressCmd((UploadProgressCommand) cmd); } @@ -327,9 +326,9 @@ public class UploadManagerImpl implements UploadManager { String user = null; String password = null; String jobId = uploadPublicTemplate(cmd.getId(), cmd.getUrl(), cmd.getName(), - cmd.getFormat(), cmd.getAccountId(), cmd.getDescription(), - cmd.getChecksum(), cmd.getInstallPath(), user, password, - cmd.getTemplateSizeInBytes()); + cmd.getFormat(), cmd.getAccountId(), cmd.getDescription(), + cmd.getChecksum(), cmd.getInstallPath(), user, password, + cmd.getTemplateSizeInBytes()); sleep(); if (jobId == null) { return new UploadAnswer(null, 0, "Internal Error", com.cloud.storage.UploadVO.Status.UPLOAD_ERROR, "", "", 0); @@ -337,18 +336,18 @@ public class UploadManagerImpl implements UploadManager { return new UploadAnswer(jobId, getUploadPct(jobId), getUploadError(jobId), getUploadStatus2(jobId), getUploadLocalPath(jobId), getInstallPath(jobId), getUploadTemplateSize(jobId)); } - + @Override public CreateEntityDownloadURLAnswer handleCreateEntityURLCommand(CreateEntityDownloadURLCommand cmd){ - - boolean isApacheUp = checkAndStartApache(); - if (!isApacheUp){ - String errorString = "Error in starting Apache server "; + + boolean isApacheUp = checkAndStartApache(); + if (!isApacheUp){ + String errorString = "Error in starting Apache server "; s_logger.error(errorString); return new CreateEntityDownloadURLAnswer(errorString, CreateEntityDownloadURLAnswer.RESULT_FAILURE); - } + } // Create the directory structure so that its visible under apache server root - String extractDir = "/var/www/html/userdata/"; + String extractDir = "/var/www/html/userdata/"; Script command = new Script("mkdir", s_logger); command.add("-p"); command.add(extractDir); @@ -358,19 +357,19 @@ public class UploadManagerImpl implements UploadManager { s_logger.error(errorString); return new CreateEntityDownloadURLAnswer(errorString, CreateEntityDownloadURLAnswer.RESULT_FAILURE); } - + // Create a random file under the directory for security reasons. String uuid = cmd.getExtractLinkUUID(); - command = new Script("touch", s_logger); - command.add(extractDir + uuid); - result = command.execute(); - if (result != null) { - String errorString = "Error in creating file " +uuid+ " ,error: " + result; - s_logger.warn(errorString); - return new CreateEntityDownloadURLAnswer(errorString, CreateEntityDownloadURLAnswer.RESULT_FAILURE); - } + command = new Script("touch", s_logger); + command.add(extractDir + uuid); + result = command.execute(); + if (result != null) { + String errorString = "Error in creating file " +uuid+ " ,error: " + result; + s_logger.warn(errorString); + return new CreateEntityDownloadURLAnswer(errorString, CreateEntityDownloadURLAnswer.RESULT_FAILURE); + } + - // Create a symbolic link from the actual directory to the template location. The entity would be directly visible under /var/www/html/userdata/cmd.getInstallPath(); command = new Script("/bin/bash", s_logger); command.add("-c"); @@ -381,11 +380,11 @@ public class UploadManagerImpl implements UploadManager { s_logger.error(errorString); return new CreateEntityDownloadURLAnswer(errorString, CreateEntityDownloadURLAnswer.RESULT_FAILURE); } - + return new CreateEntityDownloadURLAnswer("", CreateEntityDownloadURLAnswer.RESULT_SUCCESS); - + } - + @Override public DeleteEntityDownloadURLAnswer handleDeleteEntityDownloadURLCommand(DeleteEntityDownloadURLCommand cmd){ @@ -394,8 +393,8 @@ public class UploadManagerImpl implements UploadManager { String path = cmd.getPath(); Script command = new Script("/bin/bash", s_logger); command.add("-c"); - - //We just need to remove the UUID.vhd + + //We just need to remove the UUID.vhd String extractUrl = cmd.getExtractUrl(); command.add("unlink /var/www/html/userdata/" +extractUrl.substring(extractUrl.lastIndexOf(File.separator) + 1)); String result = command.execute(); @@ -404,7 +403,7 @@ public class UploadManagerImpl implements UploadManager { s_logger.warn(errorString); return new DeleteEntityDownloadURLAnswer(errorString, CreateEntityDownloadURLAnswer.RESULT_FAILURE); } - + // If its a volume also delete the Hard link since it was created only for the purpose of download. if(cmd.getType() == Upload.Type.VOLUME){ command = new Script("/bin/bash", s_logger); @@ -418,31 +417,31 @@ public class UploadManagerImpl implements UploadManager { return new DeleteEntityDownloadURLAnswer(errorString, CreateEntityDownloadURLAnswer.RESULT_FAILURE); } } - + return new DeleteEntityDownloadURLAnswer("", CreateEntityDownloadURLAnswer.RESULT_SUCCESS); } - private String getInstallPath(String jobId) { - // TODO Auto-generated method stub - return null; - } + private String getInstallPath(String jobId) { + // TODO Auto-generated method stub + return null; + } - private String getUploadLocalPath(String jobId) { - // TODO Auto-generated method stub - return null; - } + private String getUploadLocalPath(String jobId) { + // TODO Auto-generated method stub + return null; + } - private long getUploadTemplateSize(String jobId){ - UploadJob uj = jobs.get(jobId); + private long getUploadTemplateSize(String jobId){ + UploadJob uj = jobs.get(jobId); if (uj != null) { return uj.getTemplatesize(); } return 0; - } + } - @Override - public boolean configure(String name, Map params) - throws ConfigurationException { + @Override + public boolean configure(String name, Map params) + throws ConfigurationException { _name = name; String value = null; @@ -457,21 +456,25 @@ public class UploadManagerImpl implements UploadManager { Class clazz; try { clazz = (Class) Class.forName(value); + _storage = clazz.newInstance(); } catch (ClassNotFoundException e) { throw new ConfigurationException("Unable to instantiate " + value); + } catch (InstantiationException e) { + throw new ConfigurationException("Unable to instantiate " + value); + } catch (IllegalAccessException e) { + throw new ConfigurationException("Unable to instantiate " + value); } - _storage = ComponentLocator.inject(clazz); } String useSsl = (String)params.get("sslcopy"); if (useSsl != null) { - _sslCopy = Boolean.parseBoolean(useSsl); - + _sslCopy = Boolean.parseBoolean(useSsl); + } String inSystemVM = (String)params.get("secondary.storage.vm"); if (inSystemVM != null && "true".equalsIgnoreCase(inSystemVM)) { - s_logger.info("UploadManager: starting additional services since we are inside system vm"); - startAdditionalServices(); - //blockOutgoingOnPrivate(); + s_logger.info("UploadManager: starting additional services since we are inside system vm"); + startAdditionalServices(); + //blockOutgoingOnPrivate(); } value = (String) params.get("install.timeout.pergig"); @@ -489,53 +492,53 @@ public class UploadManagerImpl implements UploadManager { threadPool = Executors.newFixedThreadPool(numInstallThreads); return true; - } - - private void startAdditionalServices() { - - - Script command = new Script("rm", s_logger); - command.add("-rf"); - command.add(extractMountPoint); - String result = command.execute(); - if (result != null) { - s_logger.warn("Error in creating file " +extractMountPoint+ " ,error: " + result ); - return; - } - - command = new Script("touch", s_logger); - command.add(extractMountPoint); - result = command.execute(); - if (result != null) { - s_logger.warn("Error in creating file " +extractMountPoint+ " ,error: " + result ); - return; - } - - command = new Script("/bin/bash", s_logger); - command.add("-c"); - command.add("ln -sf " + parentDir + " " +extractMountPoint); - result = command.execute(); - if (result != null) { - s_logger.warn("Error in linking err=" + result ); - return; - } - - } + } - @Override - public String getName() { - return _name; - } + private void startAdditionalServices() { - @Override - public boolean start() { - return true; - } - @Override - public boolean stop() { - return true; - } + Script command = new Script("rm", s_logger); + command.add("-rf"); + command.add(extractMountPoint); + String result = command.execute(); + if (result != null) { + s_logger.warn("Error in creating file " +extractMountPoint+ " ,error: " + result ); + return; + } + + command = new Script("touch", s_logger); + command.add(extractMountPoint); + result = command.execute(); + if (result != null) { + s_logger.warn("Error in creating file " +extractMountPoint+ " ,error: " + result ); + return; + } + + command = new Script("/bin/bash", s_logger); + command.add("-c"); + command.add("ln -sf " + parentDir + " " +extractMountPoint); + result = command.execute(); + if (result != null) { + s_logger.warn("Error in linking err=" + result ); + return; + } + + } + + @Override + public String getName() { + return _name; + } + + @Override + public boolean start() { + return true; + } + + @Override + public boolean stop() { + return true; + } /** * Get notified of change of job status. Executed in context of uploader thread @@ -582,7 +585,7 @@ public class UploadManagerImpl implements UploadManager { tu.setStatus(Status.UNRECOVERABLE_ERROR); tu.setUploadError("Failed post upload script: " + result); } else { - s_logger.warn("Upload completed successfully at " + new SimpleDateFormat().format(new Date())); + s_logger.warn("Upload completed successfully at " + new SimpleDateFormat().format(new Date())); tu.setStatus(Status.POST_UPLOAD_FINISHED); tu.setUploadError("Upload completed successfully at " + new SimpleDateFormat().format(new Date())); } @@ -596,9 +599,9 @@ public class UploadManagerImpl implements UploadManager { } } - private String postUpload(String jobId) { - return null; - } + private String postUpload(String jobId) { + return null; + } private void sleep() { try { @@ -608,21 +611,21 @@ public class UploadManagerImpl implements UploadManager { } } - private boolean checkAndStartApache() { - - //Check whether the Apache server is running - Script command = new Script("/bin/bash", s_logger); - command.add("-c"); - command.add("if [ -d /etc/apache2 ] ; then service apache2 status | grep pid; else service httpd status | grep pid; fi "); - String result = command.execute(); - - //Apache Server is not running. Try to start it. - if (result != null) { - - /*s_logger.warn("Apache server not running, trying to start it"); + private boolean checkAndStartApache() { + + //Check whether the Apache server is running + Script command = new Script("/bin/bash", s_logger); + command.add("-c"); + command.add("if [ -d /etc/apache2 ] ; then service apache2 status | grep pid; else service httpd status | grep pid; fi "); + String result = command.execute(); + + //Apache Server is not running. Try to start it. + if (result != null) { + + /*s_logger.warn("Apache server not running, trying to start it"); String port = Integer.toString(TemplateConstants.DEFAULT_TMPLT_COPY_PORT); String intf = TemplateConstants.DEFAULT_TMPLT_COPY_INTF; - + command = new Script("/bin/bash", s_logger); command.add("-c"); command.add("iptables -D INPUT -i " + intf + " -p tcp -m state --state NEW -m tcp --dport " + port + " -j DROP;" + @@ -636,23 +639,23 @@ public class UploadManagerImpl implements UploadManager { "iptables -I INPUT -i " + intf + " -p tcp -m state --state NEW -m tcp --dport " + "443" + " -j DROP;" + "iptables -I INPUT -i " + intf + " -p tcp -m state --state NEW -m tcp --dport " + port + " -j HTTP;" + "iptables -I INPUT -i " + intf + " -p tcp -m state --state NEW -m tcp --dport " + "443" + " -j HTTP;"); - + result = command.execute(); if (result != null) { s_logger.warn("Error in opening up httpd port err=" + result ); return false; }*/ - - command = new Script("/bin/bash", s_logger); - command.add("-c"); - command.add("if [ -d /etc/apache2 ] ; then service apache2 start; else service httpd start; fi "); - result = command.execute(); - if (result != null) { - s_logger.warn("Error in starting httpd service err=" + result ); - return false; - } - } - - return true; - } + + command = new Script("/bin/bash", s_logger); + command.add("-c"); + command.add("if [ -d /etc/apache2 ] ; then service apache2 start; else service httpd start; fi "); + result = command.execute(); + if (result != null) { + s_logger.warn("Error in starting httpd service err=" + result ); + return false; + } + } + + return true; + } } diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java index 2cc72dd11b7..26cd5592bab 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java @@ -8,7 +8,7 @@ import org.apache.cloudstack.storage.snapshot.SnapshotInfo; import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.Event; import org.springframework.stereotype.Component; -import com.cloud.utils.component.Inject; + @Component public class ObjectInDataStoreManagerImpl implements ObjectInDataStoreManager { diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java index 0eb0ac30d5c..1e12498dff6 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java @@ -38,7 +38,7 @@ import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Volume; import com.cloud.tags.dao.ResourceTagsDaoImpl; import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericSearchBuilder; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java index c87c9242010..64865bb0777 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java @@ -29,7 +29,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.netapp.NetappManager; import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.AssociateLunCmdResponse; -import com.cloud.utils.component.ComponentLocator; + @APICommand(name = "associateLun", description="Associate a LUN with a guest IQN", responseObject = AssociateLunCmdResponse.class) public class AssociateLunCmd extends BaseCmd { diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java index 8c89730b978..c8d8d04e6f1 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java @@ -33,7 +33,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.netapp.NetappManager; import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.CreateLunCmdResponse; -import com.cloud.utils.component.ComponentLocator; + @APICommand(name = "createLunOnFiler", description="Create a LUN from a pool", responseObject = CreateLunCmdResponse.class) public class CreateLunCmd extends BaseCmd { diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java index a2d4b96e6dd..72a9efae978 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java @@ -32,7 +32,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.netapp.NetappManager; import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.CreateVolumeOnFilerCmdResponse; -import com.cloud.utils.component.ComponentLocator; + @APICommand(name = "createVolumeOnFiler", description="Create a volume", responseObject = CreateVolumeOnFilerCmdResponse.class) public class CreateVolumeOnFilerCmd extends BaseCmd { diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java index 9e38c5fc097..f7ff567e838 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java @@ -31,7 +31,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.netapp.NetappManager; import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.CreateVolumePoolCmdResponse; -import com.cloud.utils.component.ComponentLocator; + @APICommand(name = "createPool", description="Create a pool", responseObject = CreateVolumePoolCmdResponse.class) public class CreateVolumePoolCmd extends BaseCmd { diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java index 1105ea53e9d..7106c580125 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java @@ -33,7 +33,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.netapp.NetappManager; import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.DeleteVolumePoolCmdResponse; -import com.cloud.utils.component.ComponentLocator; + @APICommand(name = "deletePool", description="Delete a pool", responseObject = DeleteVolumePoolCmdResponse.class) public class DeleteVolumePoolCmd extends BaseCmd { diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java index c5f7b117f5b..8afd14342d4 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java @@ -33,7 +33,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.netapp.NetappManager; import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.DeleteLUNCmdResponse; -import com.cloud.utils.component.ComponentLocator; + @APICommand(name = "destroyLunOnFiler", description="Destroy a LUN", responseObject = DeleteLUNCmdResponse.class) public class DestroyLunCmd extends BaseCmd { diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java index 4ddc0c9f6d0..730f1c0bb43 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java @@ -31,7 +31,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.netapp.NetappManager; import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.DeleteVolumeOnFilerCmdResponse; -import com.cloud.utils.component.ComponentLocator; + @APICommand(name = "destroyVolumeOnFiler", description="Destroy a Volume", responseObject = DeleteVolumeOnFilerCmdResponse.class) public class DestroyVolumeOnFilerCmd extends BaseCmd { diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java index 0a6c1a70ef1..5061f497521 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java @@ -30,7 +30,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.netapp.NetappManager; import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.DissociateLunCmdResponse; -import com.cloud.utils.component.ComponentLocator; + @APICommand(name = "dissociateLun", description="Dissociate a LUN", responseObject = DissociateLunCmdResponse.class) public class DissociateLunCmd extends BaseCmd { diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java index 630b14994e7..7c2ed45ebc3 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java @@ -36,7 +36,7 @@ import com.cloud.netapp.LunVO; import com.cloud.netapp.NetappManager; import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.ListLunsCmdResponse; -import com.cloud.utils.component.ComponentLocator; + @APICommand(name = "listLunsOnFiler", description="List LUN", responseObject = ListLunsCmdResponse.class) public class ListLunsCmd extends BaseCmd diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java index d77f4fad849..5857f4340af 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java @@ -34,7 +34,7 @@ import com.cloud.netapp.NetappManager; import com.cloud.netapp.PoolVO; import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.ListVolumePoolsCmdResponse; -import com.cloud.utils.component.ComponentLocator; + @APICommand(name = "listPools", description="List Pool", responseObject = ListVolumePoolsCmdResponse.class) public class ListVolumePoolsCmd extends BaseCmd { diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java index 66a96f3a221..17548cd65be 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java @@ -33,7 +33,7 @@ import com.cloud.netapp.NetappManager; import com.cloud.netapp.NetappVolumeVO; import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.ListVolumesOnFilerCmdResponse; -import com.cloud.utils.component.ComponentLocator; + @APICommand(name = "listVolumesOnFiler", description="List Volumes", responseObject = ListVolumesOnFilerCmdResponse.class) public class ListVolumesOnFilerCmd extends BaseCmd { diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java index 3e32caebef3..6282a648a99 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java @@ -31,7 +31,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.netapp.NetappManager; import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.ModifyVolumePoolCmdResponse; -import com.cloud.utils.component.ComponentLocator; + @APICommand(name = "modifyPool", description="Modify pool", responseObject = ModifyVolumePoolCmdResponse.class) public class ModifyVolumePoolCmd extends BaseCmd { diff --git a/plugins/host-allocators/random/src/com/cloud/agent/manager/allocator/impl/RandomAllocator.java b/plugins/host-allocators/random/src/com/cloud/agent/manager/allocator/impl/RandomAllocator.java index 241b114589a..c302cdd293f 100755 --- a/plugins/host-allocators/random/src/com/cloud/agent/manager/allocator/impl/RandomAllocator.java +++ b/plugins/host-allocators/random/src/com/cloud/agent/manager/allocator/impl/RandomAllocator.java @@ -36,7 +36,6 @@ import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.offering.ServiceOffering; import com.cloud.resource.ResourceManager; -import com.cloud.utils.component.ComponentLocator; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; @@ -53,39 +52,39 @@ public class RandomAllocator implements HostAllocator { ExcludeList avoid, int returnUpTo) { return allocateTo(vmProfile, plan, type, avoid, returnUpTo, true); } - + @Override public List allocateTo(VirtualMachineProfile vmProfile, DeploymentPlan plan, Type type, - ExcludeList avoid, int returnUpTo, boolean considerReservedCapacity) { + ExcludeList avoid, int returnUpTo, boolean considerReservedCapacity) { + + long dcId = plan.getDataCenterId(); + Long podId = plan.getPodId(); + Long clusterId = plan.getClusterId(); + ServiceOffering offering = vmProfile.getServiceOffering(); + + List suitableHosts = new ArrayList(); - long dcId = plan.getDataCenterId(); - Long podId = plan.getPodId(); - Long clusterId = plan.getClusterId(); - ServiceOffering offering = vmProfile.getServiceOffering(); - - List suitableHosts = new ArrayList(); - if (type == Host.Type.Storage) { return suitableHosts; } String hostTag = offering.getHostTag(); if(hostTag != null){ - s_logger.debug("Looking for hosts in dc: " + dcId + " pod:" + podId + " cluster:" + clusterId + " having host tag:" + hostTag); + s_logger.debug("Looking for hosts in dc: " + dcId + " pod:" + podId + " cluster:" + clusterId + " having host tag:" + hostTag); }else{ - s_logger.debug("Looking for hosts in dc: " + dcId + " pod:" + podId + " cluster:" + clusterId); + s_logger.debug("Looking for hosts in dc: " + dcId + " pod:" + podId + " cluster:" + clusterId); } // list all computing hosts, regardless of whether they support routing...it's random after all List hosts = new ArrayList(); if(hostTag != null){ - hosts = _hostDao.listByHostTag(type, clusterId, podId, dcId, hostTag); + hosts = _hostDao.listByHostTag(type, clusterId, podId, dcId, hostTag); }else{ - hosts = _resourceMgr.listAllUpAndEnabledHosts(type, clusterId, podId, dcId); + hosts = _resourceMgr.listAllUpAndEnabledHosts(type, clusterId, podId, dcId); } - + s_logger.debug("Random Allocator found " + hosts.size() + " hosts"); - + if (hosts.size() == 0) { return suitableHosts; } @@ -93,12 +92,12 @@ public class RandomAllocator implements HostAllocator { Collections.shuffle(hosts); for (Host host : hosts) { - if(suitableHosts.size() == returnUpTo){ - break; - } - + if(suitableHosts.size() == returnUpTo){ + break; + } + if (!avoid.shouldAvoid(host)) { - suitableHosts.add(host); + suitableHosts.add(host); }else{ if (s_logger.isDebugEnabled()) { s_logger.debug("Host name: " + host.getName() + ", hostId: "+ host.getId() +" is in avoid set, skipping this and trying other available hosts"); @@ -121,7 +120,7 @@ public class RandomAllocator implements HostAllocator { @Override public boolean configure(String name, Map params) { _name=name; - + return true; } diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index b52e2d8a0b0..cd1971dd427 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -212,7 +212,7 @@ import com.cloud.storage.template.TemplateLocation; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.PropertiesUtil; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; import com.cloud.utils.script.OutputInterpreter; diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java index f6bc8fc7fee..506fbe02d02 100755 --- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java @@ -58,7 +58,7 @@ import com.cloud.simulator.MockVMVO; import com.cloud.simulator.dao.MockHostDao; import com.cloud.simulator.dao.MockVMDao; import com.cloud.utils.Pair; -import com.cloud.utils.component.Inject; + import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; import com.cloud.utils.db.Transaction; diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java index 1076089dcd6..f13925440c8 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java @@ -77,7 +77,7 @@ import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.storage.template.TemplateInfo; -import com.cloud.utils.component.Inject; + import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.DiskProfile; diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java index 40cd80acf8e..69c066d4577 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java @@ -46,7 +46,7 @@ import com.cloud.simulator.dao.MockSecurityRulesDao; import com.cloud.simulator.dao.MockVMDao; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; -import com.cloud.utils.component.Inject; + import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.VirtualMachine.State; diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java index 2bed2efec6a..25e7d481a06 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java @@ -28,7 +28,7 @@ import com.cloud.simulator.MockVMVO; import com.cloud.simulator.dao.MockConfigurationDao; import com.cloud.simulator.dao.MockHostDao; import com.cloud.utils.Pair; -import com.cloud.utils.component.Inject; + import com.cloud.utils.db.ConnectionConcierge; import com.cloud.utils.db.DB; import com.cloud.utils.db.Transaction; diff --git a/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java b/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java index df81249538d..e4e76bb65f9 100755 --- a/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java +++ b/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java @@ -31,7 +31,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.server.ManagementService; import com.cloud.user.Account; -import com.cloud.utils.component.ComponentLocator; + @APICommand(name = "configureSimulator", description="configure simulator", responseObject=SuccessResponse.class) public class ConfigureSimulator extends BaseCmd { diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/AgentResourceBase.java b/plugins/hypervisors/simulator/src/com/cloud/resource/AgentResourceBase.java index 808ca070d4d..ee6d8a34825 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/resource/AgentResourceBase.java +++ b/plugins/hypervisors/simulator/src/com/cloud/resource/AgentResourceBase.java @@ -43,7 +43,7 @@ import com.cloud.agent.manager.SimulatorManager.AgentType; import com.cloud.host.Host; import com.cloud.host.Host.Type; import com.cloud.simulator.MockHost; -import com.cloud.utils.component.ComponentLocator; + public class AgentResourceBase implements ServerResource { private static final Logger s_logger = Logger diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorDiscoverer.java b/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorDiscoverer.java index b6d40d49589..69ada1467ef 100755 --- a/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorDiscoverer.java +++ b/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorDiscoverer.java @@ -54,7 +54,7 @@ import com.cloud.storage.VMTemplateZoneVO; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplateHostDao; import com.cloud.storage.dao.VMTemplateZoneDao; -import com.cloud.utils.component.Inject; + @Local(value = Discoverer.class) public class SimulatorDiscoverer extends DiscovererBase implements Discoverer, Listener, ResourceStateAdapter { diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java b/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java index 3f7cea5b6b1..3b22ad51fba 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java +++ b/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java @@ -38,7 +38,7 @@ import com.cloud.host.Status; import com.cloud.storage.SnapshotVO; import com.cloud.storage.dao.SnapshotDao; import com.cloud.storage.secondary.SecondaryStorageDiscoverer; -import com.cloud.utils.component.Inject; + import com.cloud.utils.exception.CloudRuntimeException; import org.apache.log4j.Logger; diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorGuru.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorGuru.java index b9c404b66a1..102ce4ec1cc 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorGuru.java +++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorGuru.java @@ -24,7 +24,7 @@ import com.cloud.hypervisor.HypervisorGuruBase; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.storage.GuestOSVO; import com.cloud.storage.dao.GuestOSDao; -import com.cloud.utils.component.Inject; + import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDaoImpl.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDaoImpl.java index 86264f2c039..e5b30f04c25 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDaoImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDaoImpl.java @@ -25,7 +25,7 @@ import javax.naming.ConfigurationException; import com.cloud.simulator.MockHostVO; import com.cloud.simulator.MockVMVO; -import com.cloud.utils.component.Inject; + import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.SearchBuilder; diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java index b5d58dc2619..7286ada5798 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java @@ -66,7 +66,7 @@ import com.cloud.storage.VMTemplateVO; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.user.Account; import com.cloud.utils.UriUtils; -import com.cloud.utils.component.ComponentLocator; + import com.vmware.vim25.ClusterDasConfigInfo; import com.vmware.vim25.ManagedObjectReference; diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java index 75e10c9f36a..618d996f955 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java @@ -86,7 +86,7 @@ import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.utils.FileUtil; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java index 053ed6eaf46..7ec06575208 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import com.cloud.hypervisor.vmware.manager.VmwareManager; import com.cloud.hypervisor.vmware.util.VmwareContext; import com.cloud.utils.StringUtils; -import com.cloud.utils.component.ComponentLocator; + import com.vmware.apputils.version.ExtendedAppUtil; public class VmwareContextFactory { diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index a444cfec197..47fcb86b5c9 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -200,7 +200,7 @@ import com.cloud.storage.template.TemplateInfo; import com.cloud.utils.DateUtil; import com.cloud.utils.Pair; import com.cloud.utils.StringUtils; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DB; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.exception.ExceptionUtil; diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/dao/ElasticLbVmMapDaoImpl.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/dao/ElasticLbVmMapDaoImpl.java index ba8c82d01c2..be61f580f75 100644 --- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/dao/ElasticLbVmMapDaoImpl.java +++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/dao/ElasticLbVmMapDaoImpl.java @@ -30,7 +30,7 @@ import com.cloud.network.dao.LoadBalancerDao; import com.cloud.network.dao.LoadBalancerDaoImpl; import com.cloud.network.router.VirtualRouter.Role; import com.cloud.network.router.VirtualRouter.Role; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.JoinBuilder.JoinType; import com.cloud.utils.db.SearchBuilder; diff --git a/plugins/user-authenticators/md5/src/com/cloud/server/auth/MD5UserAuthenticator.java b/plugins/user-authenticators/md5/src/com/cloud/server/auth/MD5UserAuthenticator.java index 9d217e6f2c9..43d35662ee9 100644 --- a/plugins/user-authenticators/md5/src/com/cloud/server/auth/MD5UserAuthenticator.java +++ b/plugins/user-authenticators/md5/src/com/cloud/server/auth/MD5UserAuthenticator.java @@ -30,7 +30,7 @@ import org.springframework.stereotype.Component; import com.cloud.server.ManagementServer; import com.cloud.user.UserAccount; import com.cloud.user.dao.UserAccountDao; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.exception.CloudRuntimeException; /** diff --git a/plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java b/plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java index 0bf650bfe53..d2f43471366 100644 --- a/plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java +++ b/plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java @@ -30,7 +30,7 @@ import org.springframework.stereotype.Component; import com.cloud.server.ManagementServer; import com.cloud.user.UserAccount; import com.cloud.user.dao.UserAccountDao; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.exception.CloudRuntimeException; diff --git a/plugins/user-authenticators/sha256salted/src/com/cloud/server/auth/SHA256SaltedUserAuthenticator.java b/plugins/user-authenticators/sha256salted/src/com/cloud/server/auth/SHA256SaltedUserAuthenticator.java index 26c33a5a9ec..28ed92ded0c 100644 --- a/plugins/user-authenticators/sha256salted/src/com/cloud/server/auth/SHA256SaltedUserAuthenticator.java +++ b/plugins/user-authenticators/sha256salted/src/com/cloud/server/auth/SHA256SaltedUserAuthenticator.java @@ -32,8 +32,8 @@ import com.cloud.server.ManagementServer; import com.cloud.servlet.CloudStartupServlet; import com.cloud.user.UserAccount; import com.cloud.user.dao.UserAccountDao; -import com.cloud.utils.component.ComponentLocator; -import com.cloud.utils.component.Inject; + + import com.cloud.utils.exception.CloudRuntimeException; @Local(value={UserAuthenticator.class}) diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java index f7ca0349450..77f131ad222 100755 --- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -66,7 +66,6 @@ import com.cloud.agent.transport.Response; import com.cloud.alert.AlertManager; import com.cloud.capacity.dao.CapacityDao; import com.cloud.cluster.ManagementServerNode; -import com.cloud.cluster.StackMaid; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.ClusterDetailsDao; @@ -977,8 +976,6 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { } } catch (final Exception e) { s_logger.error("Exception caught while handling disconnect: ", e); - } finally { - StackMaid.current().exitCleanup(); } } } @@ -1150,7 +1147,6 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { if (actionDelegate != null) { actionDelegate.action(new Long(id)); } - StackMaid.current().exitCleanup(); } } } @@ -1381,7 +1377,6 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { } } } finally { - StackMaid.current().exitCleanup(); txn.close(); } } diff --git a/server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java b/server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java index dbd7cd3ed47..25c71687bed 100755 --- a/server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java @@ -62,7 +62,6 @@ import com.cloud.cluster.ClusterManagerListener; import com.cloud.cluster.ClusteredAgentRebalanceService; import com.cloud.cluster.ManagementServerHost; import com.cloud.cluster.ManagementServerHostVO; -import com.cloud.cluster.StackMaid; import com.cloud.cluster.agentlb.AgentLoadBalancerPlanner; import com.cloud.cluster.agentlb.HostTransferMapVO; import com.cloud.cluster.agentlb.HostTransferMapVO.HostTransferState; @@ -1120,8 +1119,6 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust rebalanceHost(hostId, currentOwnerId, futureOwnerId); } catch (Exception e) { s_logger.warn("Unable to rebalance host id=" + hostId, e); - } finally { - StackMaid.current().exitCleanup(); } } } diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 6e13f13fbdf..b6f82c3e8e6 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -104,12 +104,12 @@ import org.apache.http.protocol.ResponseContent; import org.apache.http.protocol.ResponseDate; import org.apache.http.protocol.ResponseServer; import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; import com.cloud.api.response.ApiResponseSerializer; import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; -import com.cloud.cluster.StackMaid; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationVO; import com.cloud.configuration.dao.ConfigurationDao; @@ -136,19 +136,20 @@ import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CSExceptionErrorCode; import com.cloud.uuididentity.dao.IdentityDao; +@Component public class ApiServer implements HttpRequestHandler { private static final Logger s_logger = Logger.getLogger(ApiServer.class.getName()); private static final Logger s_accessLogger = Logger.getLogger("apiserver." + ApiServer.class.getName()); public static boolean encodeApiResponse = false; public static String jsonContentType = "text/javascript"; - private ApiDispatcher _dispatcher; + @Inject ApiDispatcher _dispatcher; - @Inject private final AccountManager _accountMgr = null; - @Inject private final DomainManager _domainMgr = null; - @Inject private final AsyncJobManager _asyncMgr = null; - @Inject private ConfigurationDao _configDao; - @Inject protected List _apiAccessCheckers; + @Inject AccountManager _accountMgr; + @Inject DomainManager _domainMgr; + @Inject AsyncJobManager _asyncMgr; + @Inject ConfigurationDao _configDao; + @Inject List _apiAccessCheckers; @Inject List _pluggableServices; @Inject IdentityDao _identityDao; @@ -190,7 +191,6 @@ public class ApiServer implements HttpRequestHandler { _systemAccount = _accountMgr.getSystemAccount(); _systemUser = _accountMgr.getSystemUser(); - _dispatcher = ApiDispatcher.getInstance(); Integer apiPort = null; // api port, null by default SearchCriteria sc = _configDao.createSearchCriteria(); @@ -907,12 +907,8 @@ public class ApiServer implements HttpRequestHandler { HttpContext context = new BasicHttpContext(null); try { while (!Thread.interrupted() && _conn.isOpen()) { - try { - _httpService.handleRequest(_conn, context); - _conn.close(); - } finally { - StackMaid.current().exitCleanup(); - } + _httpService.handleRequest(_conn, context); + _conn.close(); } } catch (ConnectionClosedException ex) { if (s_logger.isTraceEnabled()) { diff --git a/server/src/com/cloud/api/ApiServlet.java b/server/src/com/cloud/api/ApiServlet.java index 19091f25ff2..1a8a04ee237 100755 --- a/server/src/com/cloud/api/ApiServlet.java +++ b/server/src/com/cloud/api/ApiServlet.java @@ -23,6 +23,7 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.Map; +import javax.inject.Inject; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -32,14 +33,11 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.ServerApiException; import org.apache.log4j.Logger; -import com.cloud.cluster.StackMaid; import com.cloud.exception.CloudAuthenticationException; -import com.cloud.server.ManagementServer; import com.cloud.user.Account; import com.cloud.user.AccountService; import com.cloud.user.UserContext; import com.cloud.utils.StringUtils; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; @SuppressWarnings("serial") @@ -47,8 +45,8 @@ public class ApiServlet extends HttpServlet { public static final Logger s_logger = Logger.getLogger(ApiServlet.class.getName()); private static final Logger s_accessLogger = Logger.getLogger("apiserver." + ApiServer.class.getName()); - private ApiServer _apiServer = null; - private AccountService _accountMgr = null; + ApiServer _apiServer; + @Inject AccountService _accountMgr; public ApiServlet() { super(); @@ -56,26 +54,16 @@ public class ApiServlet extends HttpServlet { if (_apiServer == null) { throw new CloudRuntimeException("ApiServer not initialized"); } - ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); - _accountMgr = locator.getManager(AccountService.class); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) { - try { - processRequest(req, resp); - } finally { - StackMaid.current().exitCleanup(); - } + processRequest(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) { - try { - processRequest(req, resp); - } finally { - StackMaid.current().exitCleanup(); - } + processRequest(req, resp); } private void utf8Fixup(HttpServletRequest req, Map params) { @@ -128,7 +116,7 @@ public class ApiServlet extends HttpServlet { reqStr = auditTrailSb.toString() + " " + req.getQueryString(); s_logger.debug("===START=== " + StringUtils.cleanString(reqStr)); } - + try { HttpSession session = req.getSession(false); Object[] responseTypeParam = params.get("response"); @@ -305,7 +293,7 @@ public class ApiServlet extends HttpServlet { auditTrailSb.insert(0, "(userId=" + UserContext.current().getCallerUserId() + " accountId=" + UserContext.current().getCaller().getId() + " sessionId=" + (session != null ? session.getId() : null) - + ")"); + + ")"); try { String response = _apiServer.handleRequest(params, false, responseType, auditTrailSb); @@ -386,7 +374,7 @@ public class ApiServlet extends HttpServlet { private String getLoginSuccessResponse(HttpSession session, String responseType) { StringBuffer sb = new StringBuffer(); int inactiveInterval = session.getMaxInactiveInterval(); - + String user_UUID = (String)session.getAttribute("user_UUID"); session.removeAttribute("user_UUID"); diff --git a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java index fdbbbe4ca3c..c80a62b3b01 100644 --- a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java +++ b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java @@ -16,91 +16,93 @@ // under the License. package com.cloud.api.commands; -import org.apache.cloudstack.api.*; +import javax.inject.Inject; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.TrafficMonitorResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.APICommand; import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; import com.cloud.network.NetworkUsageManager; -import com.cloud.server.ManagementService; -import org.apache.cloudstack.api.response.TrafficMonitorResponse; import com.cloud.user.Account; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; @APICommand(name = "addTrafficMonitor", description="Adds Traffic Monitor Host for Direct Network Usage", responseObject = TrafficMonitorResponse.class) public class AddTrafficMonitorCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(AddTrafficMonitorCmd.class.getName()); - private static final String s_name = "addtrafficmonitorresponse"; - - ///////////////////////////////////////////////////// + public static final Logger s_logger = Logger.getLogger(AddTrafficMonitorCmd.class.getName()); + private static final String s_name = "addtrafficmonitorresponse"; + @Inject NetworkUsageManager networkUsageMgr; + + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, required = true, description="Zone in which to add the external firewall appliance.") - private Long zoneId; - - @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required = true, description="URL of the traffic monitor Host") - private String url; + private Long zoneId; - @Parameter(name=ApiConstants.INCL_ZONES, type=CommandType.STRING, description="Traffic going into the listed zones will be metered") - private String inclZones; - - @Parameter(name=ApiConstants.EXCL_ZONES, type=CommandType.STRING, description="Traffic going into the listed zones will not be metered") - private String exclZones; - - /////////////////////////////////////////////////// - /////////////////// Accessors /////////////////////// - ///////////////////////////////////////////////////// - - public String getInclZones() { - return inclZones; - } - - public String getExclZones() { - return exclZones; - } + @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required = true, description="URL of the traffic monitor Host") + private String url; - public Long getZoneId() { - return zoneId; - } + @Parameter(name=ApiConstants.INCL_ZONES, type=CommandType.STRING, description="Traffic going into the listed zones will be metered") + private String inclZones; - public String getUrl() { - return url; - } - - ///////////////////////////////////////////////////// - /////////////// API Implementation/////////////////// - ///////////////////////////////////////////////////// + @Parameter(name=ApiConstants.EXCL_ZONES, type=CommandType.STRING, description="Traffic going into the listed zones will not be metered") + private String exclZones; - @Override - public String getCommandName() { - return s_name; - } - - @Override + /////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public String getInclZones() { + return inclZones; + } + + public String getExclZones() { + return exclZones; + } + + public Long getZoneId() { + return zoneId; + } + + public String getUrl() { + return url; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - - @Override + + @Override public void execute(){ - try { - ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); - NetworkUsageManager networkUsageMgr = locator.getManager(NetworkUsageManager.class); - Host trafficMonitor = networkUsageMgr.addTrafficMonitor(this); - TrafficMonitorResponse response = networkUsageMgr.getApiResponse(trafficMonitor); - response.setObjectName("trafficmonitor"); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } catch (InvalidParameterValueException ipve) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); - } catch (CloudRuntimeException cre) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); - } + try { + Host trafficMonitor = networkUsageMgr.addTrafficMonitor(this); + TrafficMonitorResponse response = networkUsageMgr.getApiResponse(trafficMonitor); + response.setObjectName("trafficmonitor"); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } catch (InvalidParameterValueException ipve) { + throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); + } catch (CloudRuntimeException cre) { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); + } } } diff --git a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java index 4c7d3a70546..9e84f03d8e9 100644 --- a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java +++ b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java @@ -16,71 +16,70 @@ // under the License. package com.cloud.api.commands; -import org.apache.cloudstack.api.response.HostResponse; -import org.apache.log4j.Logger; +import javax.inject.Inject; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.log4j.Logger; + import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.NetworkUsageManager; -import com.cloud.server.ManagementService; import com.cloud.user.Account; -import com.cloud.utils.component.ComponentLocator; @APICommand(name = "deleteTrafficMonitor", description="Deletes an traffic monitor host.", responseObject = SuccessResponse.class) public class DeleteTrafficMonitorCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(DeleteTrafficMonitorCmd.class.getName()); - private static final String s_name = "deletetrafficmonitorresponse"; - - ///////////////////////////////////////////////////// + public static final Logger s_logger = Logger.getLogger(DeleteTrafficMonitorCmd.class.getName()); + private static final String s_name = "deletetrafficmonitorresponse"; + @Inject NetworkUsageManager _networkUsageMgr; + + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - - @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = HostResponse.class, - required = true, description="Id of the Traffic Monitor Host.") - private Long id; - - /////////////////////////////////////////////////// - /////////////////// Accessors /////////////////////// - ///////////////////////////////////////////////////// - - public Long getId() { - return id; - } - - ///////////////////////////////////////////////////// - /////////////// API Implementation/////////////////// - ///////////////////////////////////////////////////// - @Override - public String getCommandName() { - return s_name; - } - - @Override + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = HostResponse.class, + required = true, description="Id of the Traffic Monitor Host.") + private Long id; + + /////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public Long getId() { + return id; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - - @Override + + @Override public void execute(){ - try { - ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); - NetworkUsageManager _networkUsageMgr = locator.getManager(NetworkUsageManager.class); - boolean result = _networkUsageMgr.deleteTrafficMonitor(this); - if (result) { - SuccessResponse response = new SuccessResponse(getCommandName()); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete traffic monitor."); - } - } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Failed to delete traffic monitor."); - } + try { + boolean result = _networkUsageMgr.deleteTrafficMonitor(this); + if (result) { + SuccessResponse response = new SuccessResponse(getCommandName()); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete traffic monitor."); + } + } catch (InvalidParameterValueException e) { + throw new ServerApiException(BaseCmd.PARAM_ERROR, "Failed to delete traffic monitor."); + } } } diff --git a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java index 21ad339137a..02f51a8d002 100644 --- a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java +++ b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java @@ -32,7 +32,7 @@ import com.cloud.host.Host; import com.cloud.network.NetworkUsageManager; import com.cloud.server.ManagementService; import org.apache.cloudstack.api.response.TrafficMonitorResponse; -import com.cloud.utils.component.ComponentLocator; + @APICommand(name = "listTrafficMonitors", description="List traffic monitor Hosts.", responseObject = TrafficMonitorResponse.class) public class ListTrafficMonitorsCmd extends BaseListCmd { diff --git a/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java index cdfac3a8247..96b91df79f9 100644 --- a/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java @@ -20,21 +20,19 @@ import java.util.ArrayList; import java.util.List; import javax.ejb.Local; +import javax.inject.Inject; +import org.apache.cloudstack.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.NicResponse; import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; import com.cloud.api.ApiResponseHelper; import com.cloud.api.query.vo.DomainRouterJoinVO; import com.cloud.configuration.dao.ConfigurationDao; - -import org.apache.cloudstack.api.response.DomainRouterResponse; -import org.apache.cloudstack.api.response.NicResponse; -import org.springframework.stereotype.Component; - import com.cloud.network.Networks.TrafficType; import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; -import com.cloud.utils.component.Inject; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -47,9 +45,9 @@ public class DomainRouterJoinDaoImpl extends GenericDaoBase vrSearch; + private final SearchBuilder vrSearch; - private SearchBuilder vrIdSearch; + private final SearchBuilder vrIdSearch; protected DomainRouterJoinDaoImpl() { diff --git a/server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java index 9a7ba468227..fa7618cbd3f 100644 --- a/server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java @@ -25,21 +25,19 @@ import java.util.List; import java.util.Set; import javax.ejb.Local; +import javax.inject.Inject; +import org.apache.cloudstack.api.ApiConstants.HostDetails; +import org.apache.cloudstack.api.response.HostResponse; import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; import com.cloud.api.ApiDBUtils; import com.cloud.api.query.vo.HostJoinVO; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.host.Host; import com.cloud.host.HostStats; - -import org.apache.cloudstack.api.ApiConstants.HostDetails; -import org.apache.cloudstack.api.response.HostResponse; -import org.springframework.stereotype.Component; - import com.cloud.storage.StorageStats; -import com.cloud.utils.component.Inject; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -52,9 +50,9 @@ public class HostJoinDaoImpl extends GenericDaoBase implements @Inject private ConfigurationDao _configDao; - private SearchBuilder hostSearch; + private final SearchBuilder hostSearch; - private SearchBuilder hostIdSearch; + private final SearchBuilder hostIdSearch; protected HostJoinDaoImpl() { @@ -97,14 +95,14 @@ public class HostJoinDaoImpl extends GenericDaoBase implements if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity) || details.contains(HostDetails.stats) || details.contains(HostDetails.events)) { - hostResponse.setOsCategoryId(host.getOsCategoryUuid()); - hostResponse.setOsCategoryName(host.getOsCategoryName()); - hostResponse.setZoneName(host.getZoneName()); - hostResponse.setPodName(host.getPodName()); - if ( host.getClusterId() > 0) { - hostResponse.setClusterName(host.getClusterName()); - hostResponse.setClusterType(host.getClusterType().toString()); - } + hostResponse.setOsCategoryId(host.getOsCategoryUuid()); + hostResponse.setOsCategoryName(host.getOsCategoryName()); + hostResponse.setZoneName(host.getZoneName()); + hostResponse.setPodName(host.getPodName()); + if ( host.getClusterId() > 0) { + hostResponse.setClusterName(host.getClusterName()); + hostResponse.setClusterType(host.getClusterType().toString()); + } } DecimalFormat decimalFormat = new DecimalFormat("#.##"); diff --git a/server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java index 77f930343bf..5b2a350a56b 100644 --- a/server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java @@ -20,19 +20,17 @@ import java.util.ArrayList; import java.util.List; import javax.ejb.Local; +import javax.inject.Inject; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; import com.cloud.api.ApiDBUtils; import com.cloud.api.query.vo.ProjectJoinVO; import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.configuration.dao.ConfigurationDao; - -import org.apache.cloudstack.api.response.ProjectResponse; -import org.springframework.stereotype.Component; - import com.cloud.projects.Project; -import com.cloud.utils.component.Inject; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -45,9 +43,9 @@ public class ProjectJoinDaoImpl extends GenericDaoBase impl @Inject private ConfigurationDao _configDao; - private SearchBuilder prjSearch; + private final SearchBuilder prjSearch; - private SearchBuilder prjIdSearch; + private final SearchBuilder prjIdSearch; protected ProjectJoinDaoImpl() { diff --git a/server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java index 2d86ca03d7c..76316577525 100644 --- a/server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java @@ -20,18 +20,16 @@ import java.util.ArrayList; import java.util.List; import javax.ejb.Local; +import javax.inject.Inject; +import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; import com.cloud.api.ApiResponseHelper; import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.configuration.dao.ConfigurationDao; - -import org.apache.cloudstack.api.response.ResourceTagResponse; -import org.springframework.stereotype.Component; - import com.cloud.server.ResourceTag; -import com.cloud.utils.component.Inject; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -44,9 +42,9 @@ public class ResourceTagJoinDaoImpl extends GenericDaoBase tagSearch; + private final SearchBuilder tagSearch; - private SearchBuilder tagIdSearch; + private final SearchBuilder tagIdSearch; protected ResourceTagJoinDaoImpl() { diff --git a/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java index f6847aa9d2b..3e579c179e2 100644 --- a/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java @@ -20,23 +20,21 @@ import java.util.ArrayList; import java.util.List; import javax.ejb.Local; +import javax.inject.Inject; +import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; import com.cloud.api.ApiDBUtils; import com.cloud.api.ApiResponseHelper; import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.api.query.vo.SecurityGroupJoinVO; import com.cloud.configuration.dao.ConfigurationDao; - -import org.apache.cloudstack.api.response.SecurityGroupResponse; -import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; -import org.springframework.stereotype.Component; - import com.cloud.network.security.SecurityGroup; import com.cloud.network.security.SecurityRule.SecurityRuleType; import com.cloud.user.Account; -import com.cloud.utils.component.Inject; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -49,9 +47,9 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase sgSearch; + private final SearchBuilder sgSearch; - private SearchBuilder sgIdSearch; + private final SearchBuilder sgIdSearch; protected SecurityGroupJoinDaoImpl() { diff --git a/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java index 53a0ffed445..66aecc212d8 100644 --- a/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java @@ -18,19 +18,19 @@ package com.cloud.api.query.dao; import java.util.ArrayList; import java.util.List; -import javax.ejb.Local; +import javax.ejb.Local; +import javax.inject.Inject; + +import org.apache.cloudstack.api.response.StoragePoolResponse; import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; import com.cloud.api.ApiDBUtils; import com.cloud.api.query.vo.StoragePoolJoinVO; import com.cloud.configuration.dao.ConfigurationDao; -import org.apache.cloudstack.api.response.StoragePoolResponse; -import org.springframework.stereotype.Component; - import com.cloud.storage.StoragePool; import com.cloud.storage.StorageStats; -import com.cloud.utils.component.Inject; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -44,9 +44,9 @@ public class StoragePoolJoinDaoImpl extends GenericDaoBase spSearch; + private final SearchBuilder spSearch; - private SearchBuilder spIdSearch; + private final SearchBuilder spIdSearch; protected StoragePoolJoinDaoImpl() { diff --git a/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java index ce3d8083767..6f5587f87ea 100644 --- a/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java @@ -24,23 +24,21 @@ import java.util.List; import java.util.Set; import javax.ejb.Local; - -import org.apache.log4j.Logger; - -import com.cloud.api.ApiDBUtils; -import com.cloud.api.query.vo.ResourceTagJoinVO; -import com.cloud.api.query.vo.UserVmJoinVO; -import com.cloud.configuration.dao.ConfigurationDao; +import javax.inject.Inject; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.response.NicResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.log4j.Logger; import org.springframework.stereotype.Component; +import com.cloud.api.ApiDBUtils; +import com.cloud.api.query.vo.ResourceTagJoinVO; +import com.cloud.api.query.vo.UserVmJoinVO; +import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.user.Account; import com.cloud.uservm.UserVm; -import com.cloud.utils.component.Inject; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -55,7 +53,7 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem @Inject private ConfigurationDao _configDao; - private SearchBuilder VmDetailSearch; + private final SearchBuilder VmDetailSearch; protected UserVmJoinDaoImpl() { @@ -68,6 +66,7 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem } + @Override public UserVmResponse newUserVmResponse(String objectName, UserVmJoinVO userVm, EnumSet details, Account caller) { UserVmResponse userVmResponse = new UserVmResponse(); @@ -216,8 +215,9 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem userVmResponse.setObjectName(objectName); return userVmResponse; - } + } + @Override public UserVmResponse setUserVmResponse(UserVmResponse userVmData, UserVmJoinVO uvo) { Long securityGroupId = uvo.getSecurityGroupId(); if (securityGroupId != null && securityGroupId.longValue() != 0) { diff --git a/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java index 65ecd1bc57e..495c0ebc18c 100644 --- a/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java @@ -20,26 +20,24 @@ import java.util.ArrayList; import java.util.List; import javax.ejb.Local; +import javax.inject.Inject; +import org.apache.cloudstack.api.response.VolumeResponse; import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; import com.cloud.api.ApiDBUtils; import com.cloud.api.ApiResponseHelper; import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.api.query.vo.VolumeJoinVO; import com.cloud.configuration.dao.ConfigurationDao; - -import org.apache.cloudstack.api.response.VolumeResponse; -import org.springframework.stereotype.Component; - import com.cloud.offering.ServiceOffering; import com.cloud.storage.Storage; import com.cloud.storage.VMTemplateHostVO; -import com.cloud.storage.Volume; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; +import com.cloud.storage.Volume; import com.cloud.user.Account; import com.cloud.user.UserContext; -import com.cloud.utils.component.Inject; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -53,9 +51,9 @@ public class VolumeJoinDaoImpl extends GenericDaoBase implem @Inject private ConfigurationDao _configDao; - private SearchBuilder volSearch; + private final SearchBuilder volSearch; - private SearchBuilder volIdSearch; + private final SearchBuilder volIdSearch; protected VolumeJoinDaoImpl() { @@ -176,12 +174,12 @@ public class VolumeJoinDaoImpl extends GenericDaoBase implem volResponse.setDestroyed(volume.getState() == Volume.State.Destroy); boolean isExtractable = true; if (volume.getVolumeType() != Volume.Type.DATADISK) { // Datadisk dont - // have any - // template - // dependence. + // have any + // template + // dependence. if (volume.getTemplateId() > 0) { // For ISO based volumes template - // = null and we allow extraction - // of all ISO based volumes + // = null and we allow extraction + // of all ISO based volumes isExtractable = volume.isExtractable() && volume.getTemplateType() != Storage.TemplateType.SYSTEM; } } diff --git a/server/src/com/cloud/async/AsyncJobExecutorContextImpl.java b/server/src/com/cloud/async/AsyncJobExecutorContextImpl.java index ed6441994eb..41814480d64 100644 --- a/server/src/com/cloud/async/AsyncJobExecutorContextImpl.java +++ b/server/src/com/cloud/async/AsyncJobExecutorContextImpl.java @@ -36,7 +36,6 @@ import com.cloud.storage.snapshot.SnapshotManager; import com.cloud.user.AccountManager; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.UserDao; -import com.cloud.utils.component.ComponentLocator; import com.cloud.vm.UserVmManager; import com.cloud.vm.VirtualMachineManager; import com.cloud.vm.dao.DomainRouterDao; @@ -45,8 +44,8 @@ import com.cloud.vm.dao.UserVmDao; @Component @Local(value={AsyncJobExecutorContext.class}) public class AsyncJobExecutorContextImpl implements AsyncJobExecutorContext { - private String _name; - + private String _name; + @Inject private AgentManager _agentMgr; @Inject private NetworkManager _networkMgr; @Inject private UserVmManager _vmMgr; @@ -62,98 +61,98 @@ public class AsyncJobExecutorContextImpl implements AsyncJobExecutorContext { @Inject private AsyncJobDao _jobDao; @Inject private UserDao _userDao; @Inject private VirtualMachineManager _itMgr; - - @Inject private ManagementServer _managementServer; - - @Override - public ManagementServer getManagementServer() { - return _managementServer; - } - @Override - public AgentManager getAgentMgr() { - return _agentMgr; - } - - @Override - public NetworkManager getNetworkMgr() { - return _networkMgr; - } - - @Override - public UserVmManager getVmMgr() { - return _vmMgr; - } - - @Override - public StorageManager getStorageMgr() { - return _storageMgr; - } - - /**server/src/com/cloud/async/AsyncJobExecutorContext.java + @Inject private ManagementServer _managementServer; + + @Override + public ManagementServer getManagementServer() { + return _managementServer; + } + + @Override + public AgentManager getAgentMgr() { + return _agentMgr; + } + + @Override + public NetworkManager getNetworkMgr() { + return _networkMgr; + } + + @Override + public UserVmManager getVmMgr() { + return _vmMgr; + } + + @Override + public StorageManager getStorageMgr() { + return _storageMgr; + } + + /**server/src/com/cloud/async/AsyncJobExecutorContext.java * @return the _snapMgr */ - @Override + @Override public SnapshotManager getSnapshotMgr() { return _snapMgr; } @Override - public AccountManager getAccountMgr() { - return _accountMgr; - } - - @Override - public EventDao getEventDao() { - return _eventDao; - } - - @Override - public UserVmDao getVmDao() { - return _vmDao; - } - - @Override - public AccountDao getAccountDao() { - return _accountDao; - } - - @Override - public VolumeDao getVolumeDao() { - return _volumeDao; - } + public AccountManager getAccountMgr() { + return _accountMgr; + } - @Override + @Override + public EventDao getEventDao() { + return _eventDao; + } + + @Override + public UserVmDao getVmDao() { + return _vmDao; + } + + @Override + public AccountDao getAccountDao() { + return _accountDao; + } + + @Override + public VolumeDao getVolumeDao() { + return _volumeDao; + } + + @Override public DomainRouterDao getRouterDao() { - return _routerDao; - } - - @Override + return _routerDao; + } + + @Override public IPAddressDao getIpAddressDao() { - return _ipAddressDao; + return _ipAddressDao; } - - @Override + + @Override public AsyncJobDao getJobDao() { - return _jobDao; + return _jobDao; } - - @Override + + @Override public UserDao getUserDao() { - return _userDao; + return _userDao; } - - @Override - public VirtualMachineManager getItMgr() { - return _itMgr; - } - + + @Override + public VirtualMachineManager getItMgr() { + return _itMgr; + } + @Override public boolean configure(String name, Map params) throws ConfigurationException { - _name = name; - return true; + _name = name; + return true; } - + @Override public boolean start() { return true; @@ -163,9 +162,9 @@ public class AsyncJobExecutorContextImpl implements AsyncJobExecutorContext { public boolean stop() { return true; } - + @Override public String getName() { - return _name; + return _name; } } diff --git a/server/src/com/cloud/async/AsyncJobManagerImpl.java b/server/src/com/cloud/async/AsyncJobManagerImpl.java index 25b7e6086fd..1446236445a 100644 --- a/server/src/com/cloud/async/AsyncJobManagerImpl.java +++ b/server/src/com/cloud/async/AsyncJobManagerImpl.java @@ -35,7 +35,11 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd; +import org.apache.cloudstack.api.response.ExceptionResponse; import org.apache.log4j.Logger; import org.apache.log4j.NDC; import org.springframework.stereotype.Component; @@ -43,15 +47,10 @@ import org.springframework.stereotype.Component; import com.cloud.api.ApiDispatcher; import com.cloud.api.ApiGsonHelper; import com.cloud.api.ApiSerializerHelper; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.ServerApiException; -import org.apache.cloudstack.api.response.ExceptionResponse; import com.cloud.async.dao.AsyncJobDao; import com.cloud.cluster.ClusterManager; import com.cloud.cluster.ClusterManagerListener; import com.cloud.cluster.ManagementServerHostVO; -import com.cloud.cluster.StackMaid; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.exception.InvalidParameterValueException; @@ -64,7 +63,6 @@ import com.cloud.user.dao.AccountDao; import com.cloud.utils.DateUtil; import com.cloud.utils.NumbersUtil; import com.cloud.utils.PropertiesUtil; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; import com.cloud.utils.db.GlobalLock; @@ -80,14 +78,14 @@ import com.google.gson.reflect.TypeToken; @Local(value={AsyncJobManager.class}) public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListener { public static final Logger s_logger = Logger.getLogger(AsyncJobManagerImpl.class.getName()); - private static final int ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_COOPERATION = 3; // 3 seconds - + private static final int ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_COOPERATION = 3; // 3 seconds + private static final int MAX_ONETIME_SCHEDULE_SIZE = 50; private static final int HEARTBEAT_INTERVAL = 2000; private static final int GC_INTERVAL = 10000; // 10 seconds - + private String _name; - + @Inject private AsyncJobExecutorContext _context; @Inject private SyncQueueManager _queueMgr; @Inject private ClusterManager _clusterMgr; @@ -97,201 +95,201 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe @Inject private ConfigurationDao _configDao; private long _jobExpireSeconds = 86400; // 1 day private long _jobCancelThresholdSeconds = 3600; // 1 hour (for cancelling the jobs blocking other jobs) - - private ApiDispatcher _dispatcher; + + @Inject private ApiDispatcher _dispatcher; private final ScheduledExecutorService _heartbeatScheduler = - Executors.newScheduledThreadPool(1, new NamedThreadFactory("AsyncJobMgr-Heartbeat")); + Executors.newScheduledThreadPool(1, new NamedThreadFactory("AsyncJobMgr-Heartbeat")); private ExecutorService _executor; @Override - public AsyncJobExecutorContext getExecutorContext() { - return _context; - } - - @Override - public AsyncJobVO getAsyncJob(long jobId) { - return _jobDao.findById(jobId); + public AsyncJobExecutorContext getExecutorContext() { + return _context; } - + @Override - public AsyncJobVO findInstancePendingAsyncJob(String instanceType, long instanceId) { - return _jobDao.findInstancePendingAsyncJob(instanceType, instanceId); + public AsyncJobVO getAsyncJob(long jobId) { + return _jobDao.findById(jobId); + } + + @Override + public AsyncJobVO findInstancePendingAsyncJob(String instanceType, long instanceId) { + return _jobDao.findInstancePendingAsyncJob(instanceType, instanceId); } - + @Override public List findInstancePendingAsyncJobs(AsyncJob.Type instanceType, Long accountId) { - return _jobDao.findInstancePendingAsyncJobs(instanceType, accountId); + return _jobDao.findInstancePendingAsyncJobs(instanceType, accountId); } - + @Override - public long submitAsyncJob(AsyncJobVO job) { - return submitAsyncJob(job, false); + public long submitAsyncJob(AsyncJobVO job) { + return submitAsyncJob(job, false); } @Override @DB public long submitAsyncJob(AsyncJobVO job, boolean scheduleJobExecutionInContext) { - Transaction txt = Transaction.currentTxn(); - try { - txt.start(); - job.setInitMsid(getMsid()); - _jobDao.persist(job); - txt.commit(); + Transaction txt = Transaction.currentTxn(); + try { + txt.start(); + job.setInitMsid(getMsid()); + _jobDao.persist(job); + txt.commit(); - // no sync source originally - job.setSyncSource(null); - scheduleExecution(job, scheduleJobExecutionInContext); - if(s_logger.isDebugEnabled()) { + // no sync source originally + job.setSyncSource(null); + scheduleExecution(job, scheduleJobExecutionInContext); + if(s_logger.isDebugEnabled()) { s_logger.debug("submit async job-" + job.getId() + ", details: " + job.toString()); } - return job.getId(); - } catch(Exception e) { - txt.rollback(); - String errMsg = "Unable to schedule async job for command " + job.getCmd() + ", unexpected exception."; + return job.getId(); + } catch(Exception e) { + txt.rollback(); + String errMsg = "Unable to schedule async job for command " + job.getCmd() + ", unexpected exception."; s_logger.warn(errMsg, e); throw new CloudRuntimeException(errMsg); - } + } } @Override @DB public void completeAsyncJob(long jobId, int jobStatus, int resultCode, Object resultObject) { - if(s_logger.isDebugEnabled()) { + if(s_logger.isDebugEnabled()) { s_logger.debug("Complete async job-" + jobId + ", jobStatus: " + jobStatus + - ", resultCode: " + resultCode + ", result: " + resultObject); + ", resultCode: " + resultCode + ", result: " + resultObject); } - - Transaction txt = Transaction.currentTxn(); - try { - txt.start(); - AsyncJobVO job = _jobDao.findById(jobId); - if(job == null) { - if(s_logger.isDebugEnabled()) { + + Transaction txt = Transaction.currentTxn(); + try { + txt.start(); + AsyncJobVO job = _jobDao.findById(jobId); + if(job == null) { + if(s_logger.isDebugEnabled()) { s_logger.debug("job-" + jobId + " no longer exists, we just log completion info here. " + jobStatus + - ", resultCode: " + resultCode + ", result: " + resultObject); + ", resultCode: " + resultCode + ", result: " + resultObject); } - - txt.rollback(); - return; - } + + txt.rollback(); + return; + } - job.setCompleteMsid(getMsid()); - job.setStatus(jobStatus); - job.setResultCode(resultCode); + job.setCompleteMsid(getMsid()); + job.setStatus(jobStatus); + job.setResultCode(resultCode); - // reset attached object - job.setInstanceType(null); - job.setInstanceId(null); + // reset attached object + job.setInstanceType(null); + job.setInstanceId(null); - if (resultObject != null) { + if (resultObject != null) { job.setResult(ApiSerializerHelper.toSerializedStringOld(resultObject)); - } + } - job.setLastUpdated(DateUtil.currentGMTTime()); - _jobDao.update(jobId, job); - txt.commit(); - } catch(Exception e) { - s_logger.error("Unexpected exception while completing async job-" + jobId, e); - txt.rollback(); - } + job.setLastUpdated(DateUtil.currentGMTTime()); + _jobDao.update(jobId, job); + txt.commit(); + } catch(Exception e) { + s_logger.error("Unexpected exception while completing async job-" + jobId, e); + txt.rollback(); + } } @Override @DB public void updateAsyncJobStatus(long jobId, int processStatus, Object resultObject) { - if(s_logger.isDebugEnabled()) { + if(s_logger.isDebugEnabled()) { s_logger.debug("Update async-job progress, job-" + jobId + ", processStatus: " + processStatus + - ", result: " + resultObject); + ", result: " + resultObject); } - - Transaction txt = Transaction.currentTxn(); - try { - txt.start(); - AsyncJobVO job = _jobDao.findById(jobId); - if(job == null) { - if(s_logger.isDebugEnabled()) { + + Transaction txt = Transaction.currentTxn(); + try { + txt.start(); + AsyncJobVO job = _jobDao.findById(jobId); + if(job == null) { + if(s_logger.isDebugEnabled()) { s_logger.debug("job-" + jobId + " no longer exists, we just log progress info here. progress status: " + processStatus); } - - txt.rollback(); - return; - } - - job.setProcessStatus(processStatus); - if(resultObject != null) { + + txt.rollback(); + return; + } + + job.setProcessStatus(processStatus); + if(resultObject != null) { job.setResult(ApiSerializerHelper.toSerializedStringOld(resultObject)); } - job.setLastUpdated(DateUtil.currentGMTTime()); - _jobDao.update(jobId, job); - txt.commit(); - } catch(Exception e) { - s_logger.error("Unexpected exception while updating async job-" + jobId + " status: ", e); - txt.rollback(); - } + job.setLastUpdated(DateUtil.currentGMTTime()); + _jobDao.update(jobId, job); + txt.commit(); + } catch(Exception e) { + s_logger.error("Unexpected exception while updating async job-" + jobId + " status: ", e); + txt.rollback(); + } } @Override @DB public void updateAsyncJobAttachment(long jobId, String instanceType, Long instanceId) { - if(s_logger.isDebugEnabled()) { + if(s_logger.isDebugEnabled()) { s_logger.debug("Update async-job attachment, job-" + jobId + ", instanceType: " + instanceType + - ", instanceId: " + instanceId); + ", instanceId: " + instanceId); } - - Transaction txt = Transaction.currentTxn(); - try { - txt.start(); + + Transaction txt = Transaction.currentTxn(); + try { + txt.start(); - AsyncJobVO job = _jobDao.createForUpdate(); - //job.setInstanceType(instanceType); - job.setInstanceId(instanceId); - job.setLastUpdated(DateUtil.currentGMTTime()); - _jobDao.update(jobId, job); + AsyncJobVO job = _jobDao.createForUpdate(); + //job.setInstanceType(instanceType); + job.setInstanceId(instanceId); + job.setLastUpdated(DateUtil.currentGMTTime()); + _jobDao.update(jobId, job); - txt.commit(); - } catch(Exception e) { - s_logger.error("Unexpected exception while updating async job-" + jobId + " attachment: ", e); - txt.rollback(); - } + txt.commit(); + } catch(Exception e) { + s_logger.error("Unexpected exception while updating async job-" + jobId + " attachment: ", e); + txt.rollback(); + } } @Override public void syncAsyncJobExecution(AsyncJob job, String syncObjType, long syncObjId, long queueSizeLimit) { - // This method is re-entrant. If an API developer wants to synchronized on an object, e.g. the router, - // when executing business logic, they will call this method (actually a method in BaseAsyncCmd that calls this). - // This method will get called every time their business logic executes. The first time it exectues for a job - // there will be no sync source, but on subsequent execution there will be a sync souce. If this is the first - // time the job executes we queue the job, otherwise we just return so that the business logic can execute. + // This method is re-entrant. If an API developer wants to synchronized on an object, e.g. the router, + // when executing business logic, they will call this method (actually a method in BaseAsyncCmd that calls this). + // This method will get called every time their business logic executes. The first time it exectues for a job + // there will be no sync source, but on subsequent execution there will be a sync souce. If this is the first + // time the job executes we queue the job, otherwise we just return so that the business logic can execute. if (job.getSyncSource() != null) { return; } - + if(s_logger.isDebugEnabled()) { s_logger.debug("Sync job-" + job.getId() + " execution on object " + syncObjType + "." + syncObjId); } - SyncQueueVO queue = null; + SyncQueueVO queue = null; - // to deal with temporary DB exceptions like DB deadlock/Lock-wait time out cased rollbacks - // we retry five times until we throw an exception - Random random = new Random(); + // to deal with temporary DB exceptions like DB deadlock/Lock-wait time out cased rollbacks + // we retry five times until we throw an exception + Random random = new Random(); - for(int i = 0; i < 5; i++) { + for(int i = 0; i < 5; i++) { queue = _queueMgr.queue(syncObjType, syncObjId, SyncQueueItem.AsyncJobContentType, job.getId(), queueSizeLimit); - if(queue != null) { + if(queue != null) { break; } - try { - Thread.sleep(1000 + random.nextInt(5000)); - } catch (InterruptedException e) { - } - } + try { + Thread.sleep(1000 + random.nextInt(5000)); + } catch (InterruptedException e) { + } + } - if (queue == null) { + if (queue == null) { throw new CloudRuntimeException("Unable to insert queue item into database, DB is full?"); - } else { - throw new AsyncCommandQueued(queue, "job-" + job.getId() + " queued"); - } + } else { + throw new AsyncCommandQueued(queue, "job-" + job.getId() + " queued"); + } } - + @Override public AsyncJob queryAsyncJobResult(QueryAsyncJobResultCmd cmd) { Account caller = UserContext.current().getCaller(); @@ -300,10 +298,10 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe if (job == null) { throw new InvalidParameterValueException("Unable to find a job by id " + cmd.getId()); } - + User userJobOwner = _accountMgr.getUserIncludingRemoved(job.getUserId()); Account jobOwner = _accountMgr.getAccount(userJobOwner.getAccountId()); - + //check permissions if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL) { //regular user can see only jobs he owns @@ -313,7 +311,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe } else if (caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) { _accountMgr.checkAccess(caller, null, true, jobOwner); } - + //poll the job queryAsyncJobResult(cmd.getId()); return _jobDao.findById(cmd.getId()); @@ -321,56 +319,56 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe @Override @DB public AsyncJobResult queryAsyncJobResult(long jobId) { - if(s_logger.isTraceEnabled()) { + if(s_logger.isTraceEnabled()) { s_logger.trace("Query async-job status, job-" + jobId); } - - Transaction txt = Transaction.currentTxn(); - AsyncJobResult jobResult = new AsyncJobResult(jobId); - - try { - txt.start(); - AsyncJobVO job = _jobDao.findById(jobId); - if(job != null) { - jobResult.setCmdOriginator(job.getCmdOriginator()); - jobResult.setJobStatus(job.getStatus()); - jobResult.setProcessStatus(job.getProcessStatus()); - jobResult.setResult(job.getResult()); - jobResult.setResultCode(job.getResultCode()); - jobResult.setUuid(job.getUuid()); - - if(job.getStatus() == AsyncJobResult.STATUS_SUCCEEDED || - job.getStatus() == AsyncJobResult.STATUS_FAILED) { - - if(s_logger.isDebugEnabled()) { + + Transaction txt = Transaction.currentTxn(); + AsyncJobResult jobResult = new AsyncJobResult(jobId); + + try { + txt.start(); + AsyncJobVO job = _jobDao.findById(jobId); + if(job != null) { + jobResult.setCmdOriginator(job.getCmdOriginator()); + jobResult.setJobStatus(job.getStatus()); + jobResult.setProcessStatus(job.getProcessStatus()); + jobResult.setResult(job.getResult()); + jobResult.setResultCode(job.getResultCode()); + jobResult.setUuid(job.getUuid()); + + if(job.getStatus() == AsyncJobResult.STATUS_SUCCEEDED || + job.getStatus() == AsyncJobResult.STATUS_FAILED) { + + if(s_logger.isDebugEnabled()) { s_logger.debug("Async job-" + jobId + " completed"); } - } else { - job.setLastPolled(DateUtil.currentGMTTime()); - _jobDao.update(jobId, job); - } - } else { - if(s_logger.isDebugEnabled()) { + } else { + job.setLastPolled(DateUtil.currentGMTTime()); + _jobDao.update(jobId, job); + } + } else { + if(s_logger.isDebugEnabled()) { s_logger.debug("Async job-" + jobId + " does not exist, invalid job id?"); } - - jobResult.setJobStatus(AsyncJobResult.STATUS_FAILED); - jobResult.setResult("job-" + jobId + " does not exist"); - } - txt.commit(); - } catch(Exception e) { - s_logger.error("Unexpected exception while querying async job-" + jobId + " status: ", e); - - jobResult.setJobStatus(AsyncJobResult.STATUS_FAILED); - jobResult.setResult("Exception: " + e.toString()); - txt.rollback(); - } - - if(s_logger.isTraceEnabled()) { + + jobResult.setJobStatus(AsyncJobResult.STATUS_FAILED); + jobResult.setResult("job-" + jobId + " does not exist"); + } + txt.commit(); + } catch(Exception e) { + s_logger.error("Unexpected exception while querying async job-" + jobId + " status: ", e); + + jobResult.setJobStatus(AsyncJobResult.STATUS_FAILED); + jobResult.setResult("Exception: " + e.toString()); + txt.rollback(); + } + + if(s_logger.isTraceEnabled()) { s_logger.trace("Job status: " + jobResult.toString()); } - - return jobResult; + + return jobResult; } private void scheduleExecution(final AsyncJobVO job) { @@ -382,7 +380,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe if (executeInContext) { runnable.run(); } else { - _executor.submit(runnable); + _executor.submit(runnable); } } @@ -392,66 +390,66 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe public void run() { try { long jobId = 0; - + try { - JmxUtil.registerMBean("AsyncJobManager", "Active Job " + job.getId(), new AsyncJobMBeanImpl(job)); + JmxUtil.registerMBean("AsyncJobManager", "Active Job " + job.getId(), new AsyncJobMBeanImpl(job)); } catch(Exception e) { - s_logger.warn("Unable to register active job " + job.getId() + " to JMX monitoring due to exception " + ExceptionUtil.toString(e)); + s_logger.warn("Unable to register active job " + job.getId() + " to JMX monitoring due to exception " + ExceptionUtil.toString(e)); } - + BaseAsyncCmd cmdObj = null; Transaction txn = Transaction.open(Transaction.CLOUD_DB); try { jobId = job.getId(); NDC.push("job-" + jobId); - + if(s_logger.isDebugEnabled()) { s_logger.debug("Executing " + job.getCmd() + " for job-" + jobId); } - + Class cmdClass = Class.forName(job.getCmd()); cmdObj = (BaseAsyncCmd)cmdClass.newInstance(); cmdObj.setJob(job); - + Type mapType = new TypeToken>() {}.getType(); Gson gson = ApiGsonHelper.getBuilder().create(); Map params = gson.fromJson(job.getCmdInfo(), mapType); - + // whenever we deserialize, the UserContext needs to be updated String userIdStr = params.get("ctxUserId"); String acctIdStr = params.get("ctxAccountId"); Long userId = null; Account accountObject = null; - + if (userIdStr != null) { userId = Long.parseLong(userIdStr); } - + if (acctIdStr != null) { accountObject = _accountDao.findById(Long.parseLong(acctIdStr)); } - + UserContext.registerContext(userId, accountObject, null, false); try { // dispatch could ultimately queue the job _dispatcher.dispatch(cmdObj, params); - + // serialize this to the async job table completeAsyncJob(jobId, AsyncJobResult.STATUS_SUCCEEDED, 0, cmdObj.getResponseObject()); } finally { UserContext.unregisterContext(); } - + // commands might need to be queued as part of synchronization here, so they just have to be re-dispatched from the queue mechanism... if (job.getSyncSource() != null) { _queueMgr.purgeItem(job.getSyncSource().getId()); checkQueue(job.getSyncSource().getQueueId()); } - + if (s_logger.isDebugEnabled()) { s_logger.debug("Done executing " + job.getCmd() + " for job-" + jobId); } - + } catch(Throwable e) { if (e instanceof AsyncCommandQueued) { if (s_logger.isDebugEnabled()) { @@ -469,16 +467,16 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe errorMsg = sApiEx.getDescription(); errorCode = sApiEx.getErrorCode(); } - + ExceptionResponse response = new ExceptionResponse(); response.setErrorCode(errorCode); response.setErrorText(errorMsg); response.setResponseName((cmdObj == null) ? "unknowncommandresponse" : cmdObj.getCommandName()); - + // FIXME: setting resultCode to BaseCmd.INTERNAL_ERROR is not right, usually executors have their exception handling // and we need to preserve that as much as possible here completeAsyncJob(jobId, AsyncJobResult.STATUS_FAILED, BaseCmd.INTERNAL_ERROR, response); - + // need to clean up any queue that happened as part of the dispatching and move on to the next item in the queue try { if (job.getSyncSource() != null) { @@ -490,14 +488,13 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe } } } finally { - + try { - JmxUtil.unregisterMBean("AsyncJobManager", "Active Job " + job.getId()); + JmxUtil.unregisterMBean("AsyncJobManager", "Active Job " + job.getId()); } catch(Exception e) { - s_logger.warn("Unable to unregister active job " + job.getId() + " from JMX monitoring"); + s_logger.warn("Unable to unregister active job " + job.getId() + " from JMX monitoring"); } - - StackMaid.current().exitCleanup(); + txn.close(); NDC.pop(); } @@ -520,17 +517,17 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe job.setFromPreviousSession(fromPreviousSession); job.setSyncSource(item); - + job.setCompleteMsid(getMsid()); _jobDao.update(job.getId(), job); - + try { - scheduleExecution(job); - } catch(RejectedExecutionException e) { - s_logger.warn("Execution for job-" + job.getId() + " is rejected, return it to the queue for next turn"); - _queueMgr.returnItem(item.getId()); - } - + scheduleExecution(job); + } catch(RejectedExecutionException e) { + s_logger.warn("Execution for job-" + job.getId() + " is rejected, return it to the queue for next turn"); + _queueMgr.returnItem(item.getId()); + } + } else { if(s_logger.isDebugEnabled()) { s_logger.debug("Unable to find related job for queue item: " + item.toString()); @@ -542,121 +539,117 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe @Override public void releaseSyncSource(AsyncJobExecutor executor) { - if(executor.getSyncSource() != null) { - if(s_logger.isDebugEnabled()) { + if(executor.getSyncSource() != null) { + if(s_logger.isDebugEnabled()) { s_logger.debug("Release sync source for job-" + executor.getJob().getId() + " sync source: " - + executor.getSyncSource().getContentType() + "-" - + executor.getSyncSource().getContentId()); + + executor.getSyncSource().getContentType() + "-" + + executor.getSyncSource().getContentId()); } - - _queueMgr.purgeItem(executor.getSyncSource().getId()); - checkQueue(executor.getSyncSource().getQueueId()); - } + + _queueMgr.purgeItem(executor.getSyncSource().getId()); + checkQueue(executor.getSyncSource().getQueueId()); + } } - + private void checkQueue(long queueId) { - while(true) { - try { - SyncQueueItemVO item = _queueMgr.dequeueFromOne(queueId, getMsid()); - if(item != null) { - if(s_logger.isDebugEnabled()) { + while(true) { + try { + SyncQueueItemVO item = _queueMgr.dequeueFromOne(queueId, getMsid()); + if(item != null) { + if(s_logger.isDebugEnabled()) { s_logger.debug("Executing sync queue item: " + item.toString()); } - - executeQueueItem(item, false); - } else { - break; - } - } catch(Throwable e) { - s_logger.error("Unexpected exception when kicking sync queue-" + queueId, e); - break; - } - } + + executeQueueItem(item, false); + } else { + break; + } + } catch(Throwable e) { + s_logger.error("Unexpected exception when kicking sync queue-" + queueId, e); + break; + } + } } - - private Runnable getHeartbeatTask() { - return new Runnable() { - @Override + + private Runnable getHeartbeatTask() { + return new Runnable() { + @Override public void run() { - try { - List l = _queueMgr.dequeueFromAny(getMsid(), MAX_ONETIME_SCHEDULE_SIZE); - if(l != null && l.size() > 0) { - for(SyncQueueItemVO item: l) { - if(s_logger.isDebugEnabled()) { + try { + List l = _queueMgr.dequeueFromAny(getMsid(), MAX_ONETIME_SCHEDULE_SIZE); + if(l != null && l.size() > 0) { + for(SyncQueueItemVO item: l) { + if(s_logger.isDebugEnabled()) { s_logger.debug("Execute sync-queue item: " + item.toString()); } - executeQueueItem(item, false); - } - } - } catch(Throwable e) { - s_logger.error("Unexpected exception when trying to execute queue item, ", e); - } finally { - StackMaid.current().exitCleanup(); - } - } - }; - } - - @DB - private Runnable getGCTask() { - return new Runnable() { - @Override + executeQueueItem(item, false); + } + } + } catch(Throwable e) { + s_logger.error("Unexpected exception when trying to execute queue item, ", e); + } + } + }; + } + + @DB + private Runnable getGCTask() { + return new Runnable() { + @Override public void run() { - GlobalLock scanLock = GlobalLock.getInternLock("AsyncJobManagerGC"); - try { - if(scanLock.lock(ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_COOPERATION)) { - try { - reallyRun(); - } finally { - scanLock.unlock(); - } - } - } finally { - scanLock.releaseRef(); - } - } - + GlobalLock scanLock = GlobalLock.getInternLock("AsyncJobManagerGC"); + try { + if(scanLock.lock(ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_COOPERATION)) { + try { + reallyRun(); + } finally { + scanLock.unlock(); + } + } + } finally { + scanLock.releaseRef(); + } + } + public void reallyRun() { - try { - s_logger.trace("Begin cleanup expired async-jobs"); - - Date cutTime = new Date(DateUtil.currentGMTTime().getTime() - _jobExpireSeconds*1000); - - // limit to 100 jobs per turn, this gives cleanup throughput as 600 jobs per minute - // hopefully this will be fast enough to balance potential growth of job table - List l = _jobDao.getExpiredJobs(cutTime, 100); - if(l != null && l.size() > 0) { - for(AsyncJobVO job : l) { + try { + s_logger.trace("Begin cleanup expired async-jobs"); + + Date cutTime = new Date(DateUtil.currentGMTTime().getTime() - _jobExpireSeconds*1000); + + // limit to 100 jobs per turn, this gives cleanup throughput as 600 jobs per minute + // hopefully this will be fast enough to balance potential growth of job table + List l = _jobDao.getExpiredJobs(cutTime, 100); + if(l != null && l.size() > 0) { + for(AsyncJobVO job : l) { expungeAsyncJob(job); - } - } - + } + } + // forcefully cancel blocking queue items if they've been staying there for too long - List blockItems = _queueMgr.getBlockedQueueItems(_jobCancelThresholdSeconds*1000, false); - if(blockItems != null && blockItems.size() > 0) { - for(SyncQueueItemVO item : blockItems) { + List blockItems = _queueMgr.getBlockedQueueItems(_jobCancelThresholdSeconds*1000, false); + if(blockItems != null && blockItems.size() > 0) { + for(SyncQueueItemVO item : blockItems) { if(item.getContentType().equalsIgnoreCase(SyncQueueItem.AsyncJobContentType)) { completeAsyncJob(item.getContentId(), AsyncJobResult.STATUS_FAILED, 0, getResetResultResponse("Job is cancelled as it has been blocking others for too long")); } - - // purge the item and resume queue processing - _queueMgr.purgeItem(item.getId()); - } - } - - s_logger.trace("End cleanup expired async-jobs"); - } catch(Throwable e) { - s_logger.error("Unexpected exception when trying to execute queue item, ", e); - } finally { - StackMaid.current().exitCleanup(); - } - } - - }; - } - + // purge the item and resume queue processing + _queueMgr.purgeItem(item.getId()); + } + } + + s_logger.trace("End cleanup expired async-jobs"); + } catch(Throwable e) { + s_logger.error("Unexpected exception when trying to execute queue item, ", e); + } + } + + + }; + } + @DB protected void expungeAsyncJob(AsyncJobVO job) { Transaction txn = Transaction.currentTxn(); @@ -667,132 +660,129 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe txn.commit(); } - private long getMsid() { - if(_clusterMgr != null) { + private long getMsid() { + if(_clusterMgr != null) { return _clusterMgr.getManagementNodeId(); } - - return MacAddress.getMacAddress().toLong(); - } - - private void cleanupPendingJobs(List l) { - if(l != null && l.size() > 0) { - for(SyncQueueItemVO item: l) { - if(s_logger.isInfoEnabled()) { + + return MacAddress.getMacAddress().toLong(); + } + + private void cleanupPendingJobs(List l) { + if(l != null && l.size() > 0) { + for(SyncQueueItemVO item: l) { + if(s_logger.isInfoEnabled()) { s_logger.info("Discard left-over queue item: " + item.toString()); } - - String contentType = item.getContentType(); + + String contentType = item.getContentType(); if(contentType != null && contentType.equalsIgnoreCase(SyncQueueItem.AsyncJobContentType)) { - Long jobId = item.getContentId(); - if(jobId != null) { - s_logger.warn("Mark job as failed as its correspoding queue-item has been discarded. job id: " + jobId); - completeAsyncJob(jobId, AsyncJobResult.STATUS_FAILED, 0, getResetResultResponse("Execution was cancelled because of server shutdown")); - } - } - _queueMgr.purgeItem(item.getId()); - } - } - } - + Long jobId = item.getContentId(); + if(jobId != null) { + s_logger.warn("Mark job as failed as its correspoding queue-item has been discarded. job id: " + jobId); + completeAsyncJob(jobId, AsyncJobResult.STATUS_FAILED, 0, getResetResultResponse("Execution was cancelled because of server shutdown")); + } + } + _queueMgr.purgeItem(item.getId()); + } + } + } + @Override public boolean configure(String name, Map params) throws ConfigurationException { - _name = name; - - int expireMinutes = NumbersUtil.parseInt( - _configDao.getValue(Config.JobExpireMinutes.key()), 24*60); - _jobExpireSeconds = (long)expireMinutes*60; - - _jobCancelThresholdSeconds = NumbersUtil.parseInt( - _configDao.getValue(Config.JobCancelThresholdMinutes.key()), 60); - _jobCancelThresholdSeconds *= 60; + _name = name; - _dispatcher = ApiDispatcher.getInstance(); - + int expireMinutes = NumbersUtil.parseInt( + _configDao.getValue(Config.JobExpireMinutes.key()), 24*60); + _jobExpireSeconds = (long)expireMinutes*60; + + _jobCancelThresholdSeconds = NumbersUtil.parseInt( + _configDao.getValue(Config.JobCancelThresholdMinutes.key()), 60); + _jobCancelThresholdSeconds *= 60; + + try { + final File dbPropsFile = PropertiesUtil.findConfigFile("db.properties"); + final Properties dbProps = new Properties(); + dbProps.load(new FileInputStream(dbPropsFile)); - try { - final File dbPropsFile = PropertiesUtil.findConfigFile("db.properties"); - final Properties dbProps = new Properties(); - dbProps.load(new FileInputStream(dbPropsFile)); - final int cloudMaxActive = Integer.parseInt(dbProps.getProperty("db.cloud.maxActive")); - + int poolSize = (cloudMaxActive * 2) / 3; - + s_logger.info("Start AsyncJobManager thread pool in size " + poolSize); _executor = Executors.newFixedThreadPool(poolSize, new NamedThreadFactory("Job-Executor")); - } catch (final Exception e) { - throw new ConfigurationException("Unable to load db.properties to configure AsyncJobManagerImpl"); - } - - return true; + } catch (final Exception e) { + throw new ConfigurationException("Unable to load db.properties to configure AsyncJobManagerImpl"); + } + + return true; } - + @Override - public void onManagementNodeJoined(List nodeList, long selfNodeId) { + public void onManagementNodeJoined(List nodeList, long selfNodeId) { } - + @Override - public void onManagementNodeLeft(List nodeList, long selfNodeId) { - for(ManagementServerHostVO msHost : nodeList) { - Transaction txn = Transaction.open(Transaction.CLOUD_DB); - try { - txn.start(); - List items = _queueMgr.getActiveQueueItems(msHost.getId(), true); - cleanupPendingJobs(items); - _jobDao.resetJobProcess(msHost.getId(), BaseCmd.INTERNAL_ERROR, getSerializedErrorMessage("job cancelled because of management server restart")); - txn.commit(); - } catch(Throwable e) { - s_logger.warn("Unexpected exception ", e); - txn.rollback(); - } finally { - txn.close(); - } - } + public void onManagementNodeLeft(List nodeList, long selfNodeId) { + for(ManagementServerHostVO msHost : nodeList) { + Transaction txn = Transaction.open(Transaction.CLOUD_DB); + try { + txn.start(); + List items = _queueMgr.getActiveQueueItems(msHost.getId(), true); + cleanupPendingJobs(items); + _jobDao.resetJobProcess(msHost.getId(), BaseCmd.INTERNAL_ERROR, getSerializedErrorMessage("job cancelled because of management server restart")); + txn.commit(); + } catch(Throwable e) { + s_logger.warn("Unexpected exception ", e); + txn.rollback(); + } finally { + txn.close(); + } + } } - + @Override - public void onManagementNodeIsolated() { - } + public void onManagementNodeIsolated() { + } @Override public boolean start() { - try { - List l = _queueMgr.getActiveQueueItems(getMsid(), false); - cleanupPendingJobs(l); - _jobDao.resetJobProcess(getMsid(), BaseCmd.INTERNAL_ERROR, getSerializedErrorMessage("job cancelled because of management server restart")); - } catch(Throwable e) { - s_logger.error("Unexpected exception " + e.getMessage(), e); - } - - _heartbeatScheduler.scheduleAtFixedRate(getHeartbeatTask(), HEARTBEAT_INTERVAL, - HEARTBEAT_INTERVAL, TimeUnit.MILLISECONDS); - _heartbeatScheduler.scheduleAtFixedRate(getGCTask(), GC_INTERVAL, - GC_INTERVAL, TimeUnit.MILLISECONDS); - + try { + List l = _queueMgr.getActiveQueueItems(getMsid(), false); + cleanupPendingJobs(l); + _jobDao.resetJobProcess(getMsid(), BaseCmd.INTERNAL_ERROR, getSerializedErrorMessage("job cancelled because of management server restart")); + } catch(Throwable e) { + s_logger.error("Unexpected exception " + e.getMessage(), e); + } + + _heartbeatScheduler.scheduleAtFixedRate(getHeartbeatTask(), HEARTBEAT_INTERVAL, + HEARTBEAT_INTERVAL, TimeUnit.MILLISECONDS); + _heartbeatScheduler.scheduleAtFixedRate(getGCTask(), GC_INTERVAL, + GC_INTERVAL, TimeUnit.MILLISECONDS); + return true; } - + private static ExceptionResponse getResetResultResponse(String errorMessage) { - ExceptionResponse resultObject = new ExceptionResponse(); - resultObject.setErrorCode(BaseCmd.INTERNAL_ERROR); - resultObject.setErrorText(errorMessage); - return resultObject; + ExceptionResponse resultObject = new ExceptionResponse(); + resultObject.setErrorCode(BaseCmd.INTERNAL_ERROR); + resultObject.setErrorText(errorMessage); + return resultObject; } - + private static String getSerializedErrorMessage(String errorMessage) { return ApiSerializerHelper.toSerializedStringOld(getResetResultResponse(errorMessage)); } @Override public boolean stop() { - _heartbeatScheduler.shutdown(); - _executor.shutdown(); + _heartbeatScheduler.shutdown(); + _executor.shutdown(); return true; } - + @Override public String getName() { - return _name; + return _name; } } diff --git a/server/src/com/cloud/async/SyncQueueManagerImpl.java b/server/src/com/cloud/async/SyncQueueManagerImpl.java index 97ce8a6ccad..4f0daa00bfa 100644 --- a/server/src/com/cloud/async/SyncQueueManagerImpl.java +++ b/server/src/com/cloud/async/SyncQueueManagerImpl.java @@ -31,7 +31,6 @@ import org.springframework.stereotype.Component; import com.cloud.async.dao.SyncQueueDao; import com.cloud.async.dao.SyncQueueItemDao; import com.cloud.utils.DateUtil; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.db.DB; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; @@ -40,9 +39,9 @@ import com.cloud.utils.exception.CloudRuntimeException; @Local(value={SyncQueueManager.class}) public class SyncQueueManagerImpl implements SyncQueueManager { public static final Logger s_logger = Logger.getLogger(SyncQueueManagerImpl.class.getName()); - + private String _name; - + @Inject private SyncQueueDao _syncQueueDao; @Inject private SyncQueueItemDao _syncQueueItemDao; @@ -50,203 +49,203 @@ public class SyncQueueManagerImpl implements SyncQueueManager { @DB public SyncQueueVO queue(String syncObjType, long syncObjId, String itemType, long itemId, long queueSizeLimit) { Transaction txn = Transaction.currentTxn(); - try { - txn.start(); - - _syncQueueDao.ensureQueue(syncObjType, syncObjId); - SyncQueueVO queueVO = _syncQueueDao.find(syncObjType, syncObjId); - if(queueVO == null) - throw new CloudRuntimeException("Unable to queue item into DB, DB is full?"); + try { + txn.start(); - queueVO.setQueueSizeLimit(queueSizeLimit); - _syncQueueDao.update(queueVO.getId(), queueVO); - - Date dt = DateUtil.currentGMTTime(); - SyncQueueItemVO item = new SyncQueueItemVO(); - item.setQueueId(queueVO.getId()); - item.setContentType(itemType); - item.setContentId(itemId); - item.setCreated(dt); - - _syncQueueItemDao.persist(item); - txn.commit(); - - return queueVO; - } catch(Exception e) { - s_logger.error("Unexpected exception: ", e); - txn.rollback(); - } - return null; + _syncQueueDao.ensureQueue(syncObjType, syncObjId); + SyncQueueVO queueVO = _syncQueueDao.find(syncObjType, syncObjId); + if(queueVO == null) + throw new CloudRuntimeException("Unable to queue item into DB, DB is full?"); + + queueVO.setQueueSizeLimit(queueSizeLimit); + _syncQueueDao.update(queueVO.getId(), queueVO); + + Date dt = DateUtil.currentGMTTime(); + SyncQueueItemVO item = new SyncQueueItemVO(); + item.setQueueId(queueVO.getId()); + item.setContentType(itemType); + item.setContentId(itemId); + item.setCreated(dt); + + _syncQueueItemDao.persist(item); + txn.commit(); + + return queueVO; + } catch(Exception e) { + s_logger.error("Unexpected exception: ", e); + txn.rollback(); + } + return null; } - + @Override @DB public SyncQueueItemVO dequeueFromOne(long queueId, Long msid) { - Transaction txt = Transaction.currentTxn(); - try { - txt.start(); - - SyncQueueVO queueVO = _syncQueueDao.lockRow(queueId, true); - if(queueVO == null) { - s_logger.error("Sync queue(id: " + queueId + ") does not exist"); - txt.commit(); - return null; - } - - if(queueReadyToProcess(queueVO)) { - SyncQueueItemVO itemVO = _syncQueueItemDao.getNextQueueItem(queueVO.getId()); - if(itemVO != null) { - Long processNumber = queueVO.getLastProcessNumber(); - if(processNumber == null) - processNumber = new Long(1); - else - processNumber = processNumber + 1; - Date dt = DateUtil.currentGMTTime(); - queueVO.setLastProcessNumber(processNumber); - queueVO.setLastUpdated(dt); - queueVO.setQueueSize(queueVO.getQueueSize() + 1); - _syncQueueDao.update(queueVO.getId(), queueVO); - - itemVO.setLastProcessMsid(msid); - itemVO.setLastProcessNumber(processNumber); - itemVO.setLastProcessTime(dt); - _syncQueueItemDao.update(itemVO.getId(), itemVO); - - txt.commit(); - return itemVO; - } else { - if(s_logger.isDebugEnabled()) - s_logger.debug("Sync queue (" + queueId + ") is currently empty"); - } - } else { - if(s_logger.isDebugEnabled()) - s_logger.debug("There is a pending process in sync queue(id: " + queueId + ")"); - } - txt.commit(); - } catch(Exception e) { - s_logger.error("Unexpected exception: ", e); - txt.rollback(); - } - - return null; + Transaction txt = Transaction.currentTxn(); + try { + txt.start(); + + SyncQueueVO queueVO = _syncQueueDao.lockRow(queueId, true); + if(queueVO == null) { + s_logger.error("Sync queue(id: " + queueId + ") does not exist"); + txt.commit(); + return null; + } + + if(queueReadyToProcess(queueVO)) { + SyncQueueItemVO itemVO = _syncQueueItemDao.getNextQueueItem(queueVO.getId()); + if(itemVO != null) { + Long processNumber = queueVO.getLastProcessNumber(); + if(processNumber == null) + processNumber = new Long(1); + else + processNumber = processNumber + 1; + Date dt = DateUtil.currentGMTTime(); + queueVO.setLastProcessNumber(processNumber); + queueVO.setLastUpdated(dt); + queueVO.setQueueSize(queueVO.getQueueSize() + 1); + _syncQueueDao.update(queueVO.getId(), queueVO); + + itemVO.setLastProcessMsid(msid); + itemVO.setLastProcessNumber(processNumber); + itemVO.setLastProcessTime(dt); + _syncQueueItemDao.update(itemVO.getId(), itemVO); + + txt.commit(); + return itemVO; + } else { + if(s_logger.isDebugEnabled()) + s_logger.debug("Sync queue (" + queueId + ") is currently empty"); + } + } else { + if(s_logger.isDebugEnabled()) + s_logger.debug("There is a pending process in sync queue(id: " + queueId + ")"); + } + txt.commit(); + } catch(Exception e) { + s_logger.error("Unexpected exception: ", e); + txt.rollback(); + } + + return null; } - + @Override @DB public List dequeueFromAny(Long msid, int maxItems) { - - List resultList = new ArrayList(); - Transaction txt = Transaction.currentTxn(); - try { - txt.start(); - - List l = _syncQueueItemDao.getNextQueueItems(maxItems); - if(l != null && l.size() > 0) { - for(SyncQueueItemVO item : l) { - SyncQueueVO queueVO = _syncQueueDao.lockRow(item.getQueueId(), true); - SyncQueueItemVO itemVO = _syncQueueItemDao.lockRow(item.getId(), true); - if(queueReadyToProcess(queueVO) && itemVO.getLastProcessNumber() == null) { - Long processNumber = queueVO.getLastProcessNumber(); - if(processNumber == null) - processNumber = new Long(1); - else - processNumber = processNumber + 1; - - Date dt = DateUtil.currentGMTTime(); - queueVO.setLastProcessNumber(processNumber); - queueVO.setLastUpdated(dt); - queueVO.setQueueSize(queueVO.getQueueSize() + 1); - _syncQueueDao.update(queueVO.getId(), queueVO); - - itemVO.setLastProcessMsid(msid); - itemVO.setLastProcessNumber(processNumber); - itemVO.setLastProcessTime(dt); - _syncQueueItemDao.update(item.getId(), itemVO); - - resultList.add(item); - } - } - } - txt.commit(); - return resultList; - } catch(Exception e) { - s_logger.error("Unexpected exception: ", e); - txt.rollback(); - } - return null; + + List resultList = new ArrayList(); + Transaction txt = Transaction.currentTxn(); + try { + txt.start(); + + List l = _syncQueueItemDao.getNextQueueItems(maxItems); + if(l != null && l.size() > 0) { + for(SyncQueueItemVO item : l) { + SyncQueueVO queueVO = _syncQueueDao.lockRow(item.getQueueId(), true); + SyncQueueItemVO itemVO = _syncQueueItemDao.lockRow(item.getId(), true); + if(queueReadyToProcess(queueVO) && itemVO.getLastProcessNumber() == null) { + Long processNumber = queueVO.getLastProcessNumber(); + if(processNumber == null) + processNumber = new Long(1); + else + processNumber = processNumber + 1; + + Date dt = DateUtil.currentGMTTime(); + queueVO.setLastProcessNumber(processNumber); + queueVO.setLastUpdated(dt); + queueVO.setQueueSize(queueVO.getQueueSize() + 1); + _syncQueueDao.update(queueVO.getId(), queueVO); + + itemVO.setLastProcessMsid(msid); + itemVO.setLastProcessNumber(processNumber); + itemVO.setLastProcessTime(dt); + _syncQueueItemDao.update(item.getId(), itemVO); + + resultList.add(item); + } + } + } + txt.commit(); + return resultList; + } catch(Exception e) { + s_logger.error("Unexpected exception: ", e); + txt.rollback(); + } + return null; } - + @Override @DB public void purgeItem(long queueItemId) { - Transaction txt = Transaction.currentTxn(); - try { - txt.start(); - - SyncQueueItemVO itemVO = _syncQueueItemDao.findById(queueItemId); - if(itemVO != null) { - SyncQueueVO queueVO = _syncQueueDao.lockRow(itemVO.getQueueId(), true); - - _syncQueueItemDao.expunge(itemVO.getId()); - - //if item is active, reset queue information - if (itemVO.getLastProcessMsid() != null) { - queueVO.setLastUpdated(DateUtil.currentGMTTime()); - //decrement the count - assert (queueVO.getQueueSize() > 0) : "Count reduce happens when it's already <= 0!"; - queueVO.setQueueSize(queueVO.getQueueSize() - 1); - _syncQueueDao.update(queueVO.getId(), queueVO); - } - } - txt.commit(); - } catch(Exception e) { - s_logger.error("Unexpected exception: ", e); - txt.rollback(); - } + Transaction txt = Transaction.currentTxn(); + try { + txt.start(); + + SyncQueueItemVO itemVO = _syncQueueItemDao.findById(queueItemId); + if(itemVO != null) { + SyncQueueVO queueVO = _syncQueueDao.lockRow(itemVO.getQueueId(), true); + + _syncQueueItemDao.expunge(itemVO.getId()); + + //if item is active, reset queue information + if (itemVO.getLastProcessMsid() != null) { + queueVO.setLastUpdated(DateUtil.currentGMTTime()); + //decrement the count + assert (queueVO.getQueueSize() > 0) : "Count reduce happens when it's already <= 0!"; + queueVO.setQueueSize(queueVO.getQueueSize() - 1); + _syncQueueDao.update(queueVO.getId(), queueVO); + } + } + txt.commit(); + } catch(Exception e) { + s_logger.error("Unexpected exception: ", e); + txt.rollback(); + } } - + @Override @DB public void returnItem(long queueItemId) { - Transaction txt = Transaction.currentTxn(); - try { - txt.start(); - - SyncQueueItemVO itemVO = _syncQueueItemDao.findById(queueItemId); - if(itemVO != null) { - SyncQueueVO queueVO = _syncQueueDao.lockRow(itemVO.getQueueId(), true); - - itemVO.setLastProcessMsid(null); - itemVO.setLastProcessNumber(null); - itemVO.setLastProcessTime(null); - _syncQueueItemDao.update(queueItemId, itemVO); - - queueVO.setLastUpdated(DateUtil.currentGMTTime()); - _syncQueueDao.update(queueVO.getId(), queueVO); - } - txt.commit(); - } catch(Exception e) { - s_logger.error("Unexpected exception: ", e); - txt.rollback(); - } + Transaction txt = Transaction.currentTxn(); + try { + txt.start(); + + SyncQueueItemVO itemVO = _syncQueueItemDao.findById(queueItemId); + if(itemVO != null) { + SyncQueueVO queueVO = _syncQueueDao.lockRow(itemVO.getQueueId(), true); + + itemVO.setLastProcessMsid(null); + itemVO.setLastProcessNumber(null); + itemVO.setLastProcessTime(null); + _syncQueueItemDao.update(queueItemId, itemVO); + + queueVO.setLastUpdated(DateUtil.currentGMTTime()); + _syncQueueDao.update(queueVO.getId(), queueVO); + } + txt.commit(); + } catch(Exception e) { + s_logger.error("Unexpected exception: ", e); + txt.rollback(); + } } - + @Override - public List getActiveQueueItems(Long msid, boolean exclusive) { - return _syncQueueItemDao.getActiveQueueItems(msid, exclusive); + public List getActiveQueueItems(Long msid, boolean exclusive) { + return _syncQueueItemDao.getActiveQueueItems(msid, exclusive); } - + @Override public List getBlockedQueueItems(long thresholdMs, boolean exclusive) { return _syncQueueItemDao.getBlockedQueueItems(thresholdMs, exclusive); } - + @Override public boolean configure(String name, Map params) throws ConfigurationException { - _name = name; - return true; + _name = name; + return true; } - + @Override public boolean start() { return true; @@ -256,16 +255,16 @@ public class SyncQueueManagerImpl implements SyncQueueManager { public boolean stop() { return true; } - + @Override public String getName() { - return _name; + return _name; } private boolean queueReadyToProcess(SyncQueueVO queueVO) { return queueVO.getQueueSize() < queueVO.getQueueSizeLimit(); } - + @Override public void purgeAsyncJobQueueItemId(long asyncJobId) { Long itemId = _syncQueueItemDao.getQueueItemIdByContentIdAndType(asyncJobId, SyncQueueItem.AsyncJobContentType); diff --git a/server/src/com/cloud/capacity/dao/CapacityDaoImpl.java b/server/src/com/cloud/capacity/dao/CapacityDaoImpl.java index e55bef69e6c..baaf39164cd 100755 --- a/server/src/com/cloud/capacity/dao/CapacityDaoImpl.java +++ b/server/src/com/cloud/capacity/dao/CapacityDaoImpl.java @@ -35,10 +35,7 @@ import com.cloud.capacity.CapacityVO; import com.cloud.storage.Storage; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.dao.StoragePoolDao; -import com.cloud.storage.dao.StoragePoolDaoImpl; import com.cloud.utils.Pair; -import com.cloud.utils.StringUtils; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericSearchBuilder; @@ -60,116 +57,116 @@ public class CapacityDaoImpl extends GenericDaoBase implements private static final String LIST_CLUSTERSINZONE_BY_HOST_CAPACITIES_PART1 = "SELECT DISTINCT capacity.cluster_id FROM `cloud`.`op_host_capacity` capacity INNER JOIN `cloud`.`cluster` cluster on (cluster.id = capacity.cluster_id AND cluster.removed is NULL) WHERE "; private static final String LIST_CLUSTERSINZONE_BY_HOST_CAPACITIES_PART2 = " AND capacity_type = ? AND ((total_capacity * ?) - used_capacity + reserved_capacity) >= ? " + - "AND cluster_id IN (SELECT distinct cluster_id FROM `cloud`.`op_host_capacity` WHERE "; + "AND cluster_id IN (SELECT distinct cluster_id FROM `cloud`.`op_host_capacity` WHERE "; private static final String LIST_CLUSTERSINZONE_BY_HOST_CAPACITIES_PART3 = " AND capacity_type = ? AND ((total_capacity * ?) - used_capacity + reserved_capacity) >= ?) "; - + private final SearchBuilder _hostIdTypeSearch; - private final SearchBuilder _hostOrPoolIdSearch; + private final SearchBuilder _hostOrPoolIdSearch; protected GenericSearchBuilder SummedCapacitySearch; - private SearchBuilder _allFieldsSearch; + private final SearchBuilder _allFieldsSearch; @Inject protected StoragePoolDao _storagePoolDao; - + private static final String LIST_HOSTS_IN_CLUSTER_WITH_ENOUGH_CAPACITY = "SELECT a.host_id FROM (host JOIN op_host_capacity a ON host.id = a.host_id AND host.cluster_id = ? AND host.type = ? " + - "AND (a.total_capacity * ? - a.used_capacity) >= ? and a.capacity_type = 1) " + - "JOIN op_host_capacity b ON a.host_id = b.host_id AND b.total_capacity - b.used_capacity >= ? AND b.capacity_type = 0"; - + "AND (a.total_capacity * ? - a.used_capacity) >= ? and a.capacity_type = 1) " + + "JOIN op_host_capacity b ON a.host_id = b.host_id AND b.total_capacity - b.used_capacity >= ? AND b.capacity_type = 0"; + private static final String ORDER_CLUSTERS_BY_AGGREGATE_CAPACITY_PART1 = "SELECT cluster_id, SUM(used_capacity+reserved_capacity)/SUM(total_capacity * ?) FROM `cloud`.`op_host_capacity` WHERE " ; private static final String ORDER_CLUSTERS_BY_AGGREGATE_CAPACITY_PART2 = " AND capacity_type = ? GROUP BY cluster_id ORDER BY SUM(used_capacity+reserved_capacity)/SUM(total_capacity * ?) ASC"; - + private static final String LIST_PODSINZONE_BY_HOST_CAPACITIES = "SELECT DISTINCT capacity.pod_id FROM `cloud`.`op_host_capacity` capacity INNER JOIN `cloud`.`host_pod_ref` pod " + - " ON (pod.id = capacity.pod_id AND pod.removed is NULL) WHERE " + - " capacity.data_center_id = ? AND capacity_type = ? AND ((total_capacity * ?) - used_capacity + reserved_capacity) >= ? " + - " AND pod_id IN (SELECT distinct pod_id FROM `cloud`.`op_host_capacity` WHERE " + - " capacity.data_center_id = ? AND capacity_type = ? AND ((total_capacity * ?) - used_capacity + reserved_capacity) >= ?) "; + " ON (pod.id = capacity.pod_id AND pod.removed is NULL) WHERE " + + " capacity.data_center_id = ? AND capacity_type = ? AND ((total_capacity * ?) - used_capacity + reserved_capacity) >= ? " + + " AND pod_id IN (SELECT distinct pod_id FROM `cloud`.`op_host_capacity` WHERE " + + " capacity.data_center_id = ? AND capacity_type = ? AND ((total_capacity * ?) - used_capacity + reserved_capacity) >= ?) "; private static final String ORDER_PODS_BY_AGGREGATE_CAPACITY = "SELECT pod_id, SUM(used_capacity+reserved_capacity)/SUM(total_capacity * ?) FROM `cloud`.`op_host_capacity` WHERE data_center_id = ? " + - " AND capacity_type = ? GROUP BY pod_id ORDER BY SUM(used_capacity+reserved_capacity)/SUM(total_capacity * ?) ASC"; - + " AND capacity_type = ? GROUP BY pod_id ORDER BY SUM(used_capacity+reserved_capacity)/SUM(total_capacity * ?) ASC"; + private static final String LIST_CAPACITY_BY_RESOURCE_STATE = "SELECT capacity.data_center_id, sum(capacity.used_capacity), sum(capacity.reserved_quantity), sum(capacity.total_capacity), capacity_capacity_type "+ - "FROM `cloud`.`op_host_capacity` capacity INNER JOIN `cloud`.`data_center` dc ON (dc.id = capacity.data_center_id AND dc.removed is NULL)"+ - "FROM `cloud`.`op_host_capacity` capacity INNER JOIN `cloud`.`host_pod_ref` pod ON (pod.id = capacity.pod_id AND pod.removed is NULL)"+ - "FROM `cloud`.`op_host_capacity` capacity INNER JOIN `cloud`.`cluster` cluster ON (cluster.id = capacity.cluster_id AND cluster.removed is NULL)"+ - "FROM `cloud`.`op_host_capacity` capacity INNER JOIN `cloud`.`host` host ON (host.id = capacity.host_id AND host.removed is NULL)"+ - "WHERE dc.allocation_state = ? AND pod.allocation_state = ? AND cluster.allocation_state = ? AND host.resource_state = ? AND capacity_type not in (3,4) "; - + "FROM `cloud`.`op_host_capacity` capacity INNER JOIN `cloud`.`data_center` dc ON (dc.id = capacity.data_center_id AND dc.removed is NULL)"+ + "FROM `cloud`.`op_host_capacity` capacity INNER JOIN `cloud`.`host_pod_ref` pod ON (pod.id = capacity.pod_id AND pod.removed is NULL)"+ + "FROM `cloud`.`op_host_capacity` capacity INNER JOIN `cloud`.`cluster` cluster ON (cluster.id = capacity.cluster_id AND cluster.removed is NULL)"+ + "FROM `cloud`.`op_host_capacity` capacity INNER JOIN `cloud`.`host` host ON (host.id = capacity.host_id AND host.removed is NULL)"+ + "WHERE dc.allocation_state = ? AND pod.allocation_state = ? AND cluster.allocation_state = ? AND host.resource_state = ? AND capacity_type not in (3,4) "; + private static final String LIST_CAPACITY_GROUP_BY_ZONE_TYPE_PART1 = "SELECT (sum(capacity.used_capacity) + sum(capacity.reserved_capacity)), (case capacity_type when 1 then (sum(total_capacity) * (select value from `cloud`.`configuration` where name like 'cpu.overprovisioning.factor')) else sum(total_capacity) end), " + - "((sum(capacity.used_capacity) + sum(capacity.reserved_capacity)) / (case capacity_type when 1 then (sum(total_capacity) * (select value from `cloud`.`configuration` where name like 'cpu.overprovisioning.factor')) else sum(total_capacity) end)) percent,"+ - " capacity.capacity_type, capacity.data_center_id "+ - "FROM `cloud`.`op_host_capacity` capacity "+ - "WHERE total_capacity > 0 AND data_center_id is not null AND capacity_state='Enabled'"; + "((sum(capacity.used_capacity) + sum(capacity.reserved_capacity)) / (case capacity_type when 1 then (sum(total_capacity) * (select value from `cloud`.`configuration` where name like 'cpu.overprovisioning.factor')) else sum(total_capacity) end)) percent,"+ + " capacity.capacity_type, capacity.data_center_id "+ + "FROM `cloud`.`op_host_capacity` capacity "+ + "WHERE total_capacity > 0 AND data_center_id is not null AND capacity_state='Enabled'"; private static final String LIST_CAPACITY_GROUP_BY_ZONE_TYPE_PART2 = " GROUP BY data_center_id, capacity_type order by percent desc limit "; private static final String LIST_CAPACITY_GROUP_BY_POD_TYPE_PART1 = "SELECT (sum(capacity.used_capacity) + sum(capacity.reserved_capacity)), (case capacity_type when 1 then (sum(total_capacity) * (select value from `cloud`.`configuration` where name like 'cpu.overprovisioning.factor')) else sum(total_capacity) end), " + - "((sum(capacity.used_capacity) + sum(capacity.reserved_capacity)) / (case capacity_type when 1 then (sum(total_capacity) * (select value from `cloud`.`configuration` where name like 'cpu.overprovisioning.factor')) else sum(total_capacity) end)) percent,"+ - " capacity.capacity_type, capacity.data_center_id, pod_id "+ - "FROM `cloud`.`op_host_capacity` capacity "+ - "WHERE total_capacity > 0 AND pod_id is not null AND capacity_state='Enabled'"; + "((sum(capacity.used_capacity) + sum(capacity.reserved_capacity)) / (case capacity_type when 1 then (sum(total_capacity) * (select value from `cloud`.`configuration` where name like 'cpu.overprovisioning.factor')) else sum(total_capacity) end)) percent,"+ + " capacity.capacity_type, capacity.data_center_id, pod_id "+ + "FROM `cloud`.`op_host_capacity` capacity "+ + "WHERE total_capacity > 0 AND pod_id is not null AND capacity_state='Enabled'"; private static final String LIST_CAPACITY_GROUP_BY_POD_TYPE_PART2 = " GROUP BY pod_id, capacity_type order by percent desc limit "; - + private static final String LIST_CAPACITY_GROUP_BY_CLUSTER_TYPE_PART1 = "SELECT (sum(capacity.used_capacity) + sum(capacity.reserved_capacity)), (case capacity_type when 1 then (sum(total_capacity) * (select value from `cloud`.`configuration` where name like 'cpu.overprovisioning.factor')) else sum(total_capacity) end), " + - "((sum(capacity.used_capacity) + sum(capacity.reserved_capacity)) / (case capacity_type when 1 then (sum(total_capacity) * (select value from `cloud`.`configuration` where name like 'cpu.overprovisioning.factor')) else sum(total_capacity) end)) percent,"+ - "capacity.capacity_type, capacity.data_center_id, pod_id, cluster_id "+ - "FROM `cloud`.`op_host_capacity` capacity "+ - "WHERE total_capacity > 0 AND cluster_id is not null AND capacity_state='Enabled'"; + "((sum(capacity.used_capacity) + sum(capacity.reserved_capacity)) / (case capacity_type when 1 then (sum(total_capacity) * (select value from `cloud`.`configuration` where name like 'cpu.overprovisioning.factor')) else sum(total_capacity) end)) percent,"+ + "capacity.capacity_type, capacity.data_center_id, pod_id, cluster_id "+ + "FROM `cloud`.`op_host_capacity` capacity "+ + "WHERE total_capacity > 0 AND cluster_id is not null AND capacity_state='Enabled'"; private static final String LIST_CAPACITY_GROUP_BY_CLUSTER_TYPE_PART2 = " GROUP BY cluster_id, capacity_type order by percent desc limit "; private static final String UPDATE_CAPACITY_STATE = "UPDATE `cloud`.`op_host_capacity` SET capacity_state = ? WHERE "; private static final String LIST_CLUSTERS_CROSSING_THRESHOLD = "SELECT cluster_id " + - "FROM (SELECT cluster_id, ( (sum(capacity.used_capacity) + sum(capacity.reserved_capacity) + ?)/sum(total_capacity) ) ratio "+ - "FROM `cloud`.`op_host_capacity` capacity "+ - "WHERE capacity.data_center_id = ? AND capacity.capacity_type = ? AND capacity.total_capacity > 0 "+ - "GROUP BY cluster_id) tmp " + - "WHERE tmp.ratio > ? "; - - + "FROM (SELECT cluster_id, ( (sum(capacity.used_capacity) + sum(capacity.reserved_capacity) + ?)/sum(total_capacity) ) ratio "+ + "FROM `cloud`.`op_host_capacity` capacity "+ + "WHERE capacity.data_center_id = ? AND capacity.capacity_type = ? AND capacity.total_capacity > 0 "+ + "GROUP BY cluster_id) tmp " + + "WHERE tmp.ratio > ? "; + + public CapacityDaoImpl() { - _hostIdTypeSearch = createSearchBuilder(); - _hostIdTypeSearch.and("hostId", _hostIdTypeSearch.entity().getHostOrPoolId(), SearchCriteria.Op.EQ); - _hostIdTypeSearch.and("type", _hostIdTypeSearch.entity().getCapacityType(), SearchCriteria.Op.EQ); - _hostIdTypeSearch.done(); - - _hostOrPoolIdSearch = createSearchBuilder(); - _hostOrPoolIdSearch.and("hostId", _hostOrPoolIdSearch.entity().getHostOrPoolId(), SearchCriteria.Op.EQ); - _hostOrPoolIdSearch.done(); - - _allFieldsSearch = createSearchBuilder(); - _allFieldsSearch.and("id", _allFieldsSearch.entity().getId(), SearchCriteria.Op.EQ); - _allFieldsSearch.and("hostId", _allFieldsSearch.entity().getHostOrPoolId(), SearchCriteria.Op.EQ); - _allFieldsSearch.and("zoneId", _allFieldsSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); - _allFieldsSearch.and("podId", _allFieldsSearch.entity().getPodId(), SearchCriteria.Op.EQ); - _allFieldsSearch.and("clusterId", _allFieldsSearch.entity().getClusterId(), SearchCriteria.Op.EQ); - _allFieldsSearch.and("capacityType", _allFieldsSearch.entity().getCapacityType(), SearchCriteria.Op.EQ); - _allFieldsSearch.and("capacityState", _allFieldsSearch.entity().getCapacityState(), SearchCriteria.Op.EQ); - - _allFieldsSearch.done(); + _hostIdTypeSearch = createSearchBuilder(); + _hostIdTypeSearch.and("hostId", _hostIdTypeSearch.entity().getHostOrPoolId(), SearchCriteria.Op.EQ); + _hostIdTypeSearch.and("type", _hostIdTypeSearch.entity().getCapacityType(), SearchCriteria.Op.EQ); + _hostIdTypeSearch.done(); + + _hostOrPoolIdSearch = createSearchBuilder(); + _hostOrPoolIdSearch.and("hostId", _hostOrPoolIdSearch.entity().getHostOrPoolId(), SearchCriteria.Op.EQ); + _hostOrPoolIdSearch.done(); + + _allFieldsSearch = createSearchBuilder(); + _allFieldsSearch.and("id", _allFieldsSearch.entity().getId(), SearchCriteria.Op.EQ); + _allFieldsSearch.and("hostId", _allFieldsSearch.entity().getHostOrPoolId(), SearchCriteria.Op.EQ); + _allFieldsSearch.and("zoneId", _allFieldsSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); + _allFieldsSearch.and("podId", _allFieldsSearch.entity().getPodId(), SearchCriteria.Op.EQ); + _allFieldsSearch.and("clusterId", _allFieldsSearch.entity().getClusterId(), SearchCriteria.Op.EQ); + _allFieldsSearch.and("capacityType", _allFieldsSearch.entity().getCapacityType(), SearchCriteria.Op.EQ); + _allFieldsSearch.and("capacityState", _allFieldsSearch.entity().getCapacityState(), SearchCriteria.Op.EQ); + + _allFieldsSearch.done(); } - + @Override public List listClustersCrossingThreshold(short capacityType, Long zoneId, Float disableThreshold, long compute_requested, Float overProvFactor){ - - Transaction txn = Transaction.currentTxn(); - PreparedStatement pstmt = null; - List result = new ArrayList(); - StringBuilder sql = new StringBuilder(LIST_CLUSTERS_CROSSING_THRESHOLD); - - - try { - pstmt = txn.prepareAutoCloseStatement(sql.toString()); - pstmt.setLong(1, compute_requested); - pstmt.setLong(2, zoneId); - pstmt.setShort(3, capacityType); - pstmt.setFloat(4, disableThreshold*overProvFactor); - - ResultSet rs = pstmt.executeQuery(); - while (rs.next()) { - result.add(rs.getLong(1)); - } - return result; - } catch (SQLException e) { - throw new CloudRuntimeException("DB Exception on: " + sql, e); - } catch (Throwable e) { - throw new CloudRuntimeException("Caught: " + sql, e); - } - } + + Transaction txn = Transaction.currentTxn(); + PreparedStatement pstmt = null; + List result = new ArrayList(); + StringBuilder sql = new StringBuilder(LIST_CLUSTERS_CROSSING_THRESHOLD); + + + try { + pstmt = txn.prepareAutoCloseStatement(sql.toString()); + pstmt.setLong(1, compute_requested); + pstmt.setLong(2, zoneId); + pstmt.setShort(3, capacityType); + pstmt.setFloat(4, disableThreshold*overProvFactor); + + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) { + result.add(rs.getLong(1)); + } + return result; + } catch (SQLException e) { + throw new CloudRuntimeException("DB Exception on: " + sql, e); + } catch (Throwable e) { + throw new CloudRuntimeException("Caught: " + sql, e); + } + } /*public static String preparePlaceHolders(int length) { StringBuilder builder = new StringBuilder(); @@ -188,17 +185,17 @@ public class CapacityDaoImpl extends GenericDaoBase implements } }*/ - + @Override public List findCapacityBy(Integer capacityType, Long zoneId, Long podId, Long clusterId, String resource_state){ - + Transaction txn = Transaction.currentTxn(); PreparedStatement pstmt = null; List result = new ArrayList(); StringBuilder sql = new StringBuilder(LIST_CAPACITY_BY_RESOURCE_STATE); List resourceIdList = new ArrayList(); - + if (zoneId != null){ sql.append(" AND capacity.data_center_id = ?"); resourceIdList.add(zoneId); @@ -237,29 +234,29 @@ public class CapacityDaoImpl extends GenericDaoBase implements throw new CloudRuntimeException("Caught: " + sql, e); } } - + @Override public List listCapacitiesGroupedByLevelAndType(Integer capacityType, Long zoneId, Long podId, Long clusterId, int level, Long limit){ - + StringBuilder finalQuery = new StringBuilder(); Transaction txn = Transaction.currentTxn(); PreparedStatement pstmt = null; List result = new ArrayList(); - + switch(level){ - case 1: // List all the capacities grouped by zone, capacity Type - finalQuery.append(LIST_CAPACITY_GROUP_BY_ZONE_TYPE_PART1); - break; - - case 2: // List all the capacities grouped by pod, capacity Type - finalQuery.append(LIST_CAPACITY_GROUP_BY_POD_TYPE_PART1); - break; - - case 3: // List all the capacities grouped by cluster, capacity Type - finalQuery.append(LIST_CAPACITY_GROUP_BY_CLUSTER_TYPE_PART1); - break; + case 1: // List all the capacities grouped by zone, capacity Type + finalQuery.append(LIST_CAPACITY_GROUP_BY_ZONE_TYPE_PART1); + break; + + case 2: // List all the capacities grouped by pod, capacity Type + finalQuery.append(LIST_CAPACITY_GROUP_BY_POD_TYPE_PART1); + break; + + case 3: // List all the capacities grouped by cluster, capacity Type + finalQuery.append(LIST_CAPACITY_GROUP_BY_CLUSTER_TYPE_PART1); + break; } - + if (zoneId != null){ finalQuery.append(" AND data_center_id="+zoneId); } @@ -272,32 +269,32 @@ public class CapacityDaoImpl extends GenericDaoBase implements if (capacityType != null){ finalQuery.append(" AND capacity_type="+capacityType); } - + switch(level){ case 1: // List all the capacities grouped by zone, capacity Type finalQuery.append(LIST_CAPACITY_GROUP_BY_ZONE_TYPE_PART2); break; - + case 2: // List all the capacities grouped by pod, capacity Type finalQuery.append(LIST_CAPACITY_GROUP_BY_POD_TYPE_PART2); break; - + case 3: // List all the capacities grouped by cluster, capacity Type finalQuery.append(LIST_CAPACITY_GROUP_BY_CLUSTER_TYPE_PART2); break; } - + finalQuery.append(limit.toString()); - + try { pstmt = txn.prepareAutoCloseStatement(finalQuery.toString()); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { SummedCapacity summedCapacity = new SummedCapacity( rs.getLong(1), rs.getLong(2), rs.getFloat(3), - (short)rs.getLong(4), rs.getLong(5), - level != 1 ? rs.getLong(6): null, - level == 3 ? rs.getLong(7): null); - + (short)rs.getLong(4), rs.getLong(5), + level != 1 ? rs.getLong(6): null, + level == 3 ? rs.getLong(7): null); + result.add(summedCapacity); } return result; @@ -306,61 +303,61 @@ public class CapacityDaoImpl extends GenericDaoBase implements } catch (Throwable e) { throw new CloudRuntimeException("Caught: " + finalQuery, e); } - + } - + @Override public List findCapacityBy(Integer capacityType, Long zoneId, Long podId, Long clusterId){ - - SummedCapacitySearch = createSearchBuilder(SummedCapacity.class); - SummedCapacitySearch.select("dcId", Func.NATIVE, SummedCapacitySearch.entity().getDataCenterId()); + + SummedCapacitySearch = createSearchBuilder(SummedCapacity.class); + SummedCapacitySearch.select("dcId", Func.NATIVE, SummedCapacitySearch.entity().getDataCenterId()); SummedCapacitySearch.select("sumUsed", Func.SUM, SummedCapacitySearch.entity().getUsedCapacity()); SummedCapacitySearch.select("sumReserved", Func.SUM, SummedCapacitySearch.entity().getReservedCapacity()); SummedCapacitySearch.select("sumTotal", Func.SUM, SummedCapacitySearch.entity().getTotalCapacity()); SummedCapacitySearch.select("capacityType", Func.NATIVE, SummedCapacitySearch.entity().getCapacityType()); - + if (zoneId==null && podId==null && clusterId==null){ // List all the capacities grouped by zone, capacity Type SummedCapacitySearch.groupBy(SummedCapacitySearch.entity().getDataCenterId(), SummedCapacitySearch.entity().getCapacityType()); }else { SummedCapacitySearch.groupBy(SummedCapacitySearch.entity().getCapacityType()); } - + if (zoneId != null){ - SummedCapacitySearch.and("dcId", SummedCapacitySearch.entity().getDataCenterId(), Op.EQ); + SummedCapacitySearch.and("dcId", SummedCapacitySearch.entity().getDataCenterId(), Op.EQ); } if (podId != null){ - SummedCapacitySearch.and("podId", SummedCapacitySearch.entity().getPodId(), Op.EQ); + SummedCapacitySearch.and("podId", SummedCapacitySearch.entity().getPodId(), Op.EQ); } if (clusterId != null){ - SummedCapacitySearch.and("clusterId", SummedCapacitySearch.entity().getClusterId(), Op.EQ); + SummedCapacitySearch.and("clusterId", SummedCapacitySearch.entity().getClusterId(), Op.EQ); } if (capacityType != null){ - SummedCapacitySearch.and("capacityType", SummedCapacitySearch.entity().getCapacityType(), Op.EQ); + SummedCapacitySearch.and("capacityType", SummedCapacitySearch.entity().getCapacityType(), Op.EQ); } SummedCapacitySearch.done(); - - + + SearchCriteria sc = SummedCapacitySearch.create(); if (zoneId != null){ - sc.setParameters("dcId", zoneId); + sc.setParameters("dcId", zoneId); } if (podId != null){ - sc.setParameters("podId", podId); + sc.setParameters("podId", podId); } if (clusterId != null){ - sc.setParameters("clusterId", clusterId); + sc.setParameters("clusterId", clusterId); } if (capacityType != null){ - sc.setParameters("capacityType", capacityType); + sc.setParameters("capacityType", capacityType); } - + Filter filter = new Filter(CapacityVO.class, null, true, null, null); List results = customSearchIncludingRemoved(sc, filter); return results; - + } - + public void updateAllocated(Long hostId, long allocatedAmount, short capacityType, boolean add) { Transaction txn = Transaction.currentTxn(); PreparedStatement pstmt = null; @@ -384,75 +381,47 @@ public class CapacityDaoImpl extends GenericDaoBase implements } } - + @Override public CapacityVO findByHostIdType(Long hostId, short capacityType) { - SearchCriteria sc = _hostIdTypeSearch.create(); - sc.setParameters("hostId", hostId); - sc.setParameters("type", capacityType); - return findOneBy(sc); + SearchCriteria sc = _hostIdTypeSearch.create(); + sc.setParameters("hostId", hostId); + sc.setParameters("type", capacityType); + return findOneBy(sc); } - + @Override public List listClustersInZoneOrPodByHostCapacities(long id, int requiredCpu, long requiredRam, short capacityTypeForOrdering, boolean isZone, float cpuOverprovisioningFactor){ - Transaction txn = Transaction.currentTxn(); + Transaction txn = Transaction.currentTxn(); PreparedStatement pstmt = null; List result = new ArrayList(); StringBuilder sql = new StringBuilder(LIST_CLUSTERSINZONE_BY_HOST_CAPACITIES_PART1); - + if(isZone){ - sql.append("capacity.data_center_id = ?"); + sql.append("capacity.data_center_id = ?"); }else{ - sql.append("capacity.pod_id = ?"); + sql.append("capacity.pod_id = ?"); } sql.append(LIST_CLUSTERSINZONE_BY_HOST_CAPACITIES_PART2); if(isZone){ - sql.append("capacity.data_center_id = ?"); + sql.append("capacity.data_center_id = ?"); }else{ - sql.append("capacity.pod_id = ?"); + sql.append("capacity.pod_id = ?"); } sql.append(LIST_CLUSTERSINZONE_BY_HOST_CAPACITIES_PART3); try { pstmt = txn.prepareAutoCloseStatement(sql.toString()); pstmt.setLong(1, id); - pstmt.setShort(2, CapacityVO.CAPACITY_TYPE_CPU); - pstmt.setFloat(3, cpuOverprovisioningFactor); - pstmt.setLong(4, requiredCpu); - pstmt.setLong(5, id); - pstmt.setShort(6, CapacityVO.CAPACITY_TYPE_MEMORY); - pstmt.setFloat(7, 1); - pstmt.setLong(8, requiredRam); + pstmt.setShort(2, CapacityVO.CAPACITY_TYPE_CPU); + pstmt.setFloat(3, cpuOverprovisioningFactor); + pstmt.setLong(4, requiredCpu); + pstmt.setLong(5, id); + pstmt.setShort(6, CapacityVO.CAPACITY_TYPE_MEMORY); + pstmt.setFloat(7, 1); + pstmt.setLong(8, requiredRam); - ResultSet rs = pstmt.executeQuery(); - while (rs.next()) { - result.add(rs.getLong(1)); - } - return result; - } catch (SQLException e) { - throw new CloudRuntimeException("DB Exception on: " + sql, e); - } catch (Throwable e) { - throw new CloudRuntimeException("Caught: " + sql, e); - } - } - - - @Override - public List listHostsWithEnoughCapacity(int requiredCpu, long requiredRam, Long clusterId, String hostType, float cpuOverprovisioningFactor){ - Transaction txn = Transaction.currentTxn(); - PreparedStatement pstmt = null; - List result = new ArrayList(); - - StringBuilder sql = new StringBuilder(LIST_HOSTS_IN_CLUSTER_WITH_ENOUGH_CAPACITY); - try { - pstmt = txn.prepareAutoCloseStatement(sql.toString()); - pstmt.setLong(1, clusterId); - pstmt.setString(2, hostType); - pstmt.setFloat(3, cpuOverprovisioningFactor); - pstmt.setLong(4, requiredCpu); - pstmt.setLong(5, requiredRam); - ResultSet rs = pstmt.executeQuery(); while (rs.next()) { result.add(rs.getLong(1)); @@ -464,61 +433,89 @@ public class CapacityDaoImpl extends GenericDaoBase implements throw new CloudRuntimeException("Caught: " + sql, e); } } - - public static class SummedCapacity { - public long sumUsed; - public long sumReserved; - public long sumTotal; - public Float percentUsed; - public short capacityType; - public Long clusterId; - public Long podId; - public Long dcId; - public SummedCapacity() { - } - public SummedCapacity(long sumUsed, long sumReserved, long sumTotal, - short capacityType, Long clusterId, Long podId) { - super(); - this.sumUsed = sumUsed; - this.sumReserved = sumReserved; - this.sumTotal = sumTotal; - this.capacityType = capacityType; - this.clusterId = clusterId; - this.podId = podId; - } - public SummedCapacity(long sumUsed, long sumReserved, long sumTotal, + + + @Override + public List listHostsWithEnoughCapacity(int requiredCpu, long requiredRam, Long clusterId, String hostType, float cpuOverprovisioningFactor){ + Transaction txn = Transaction.currentTxn(); + PreparedStatement pstmt = null; + List result = new ArrayList(); + + StringBuilder sql = new StringBuilder(LIST_HOSTS_IN_CLUSTER_WITH_ENOUGH_CAPACITY); + try { + pstmt = txn.prepareAutoCloseStatement(sql.toString()); + pstmt.setLong(1, clusterId); + pstmt.setString(2, hostType); + pstmt.setFloat(3, cpuOverprovisioningFactor); + pstmt.setLong(4, requiredCpu); + pstmt.setLong(5, requiredRam); + + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) { + result.add(rs.getLong(1)); + } + return result; + } catch (SQLException e) { + throw new CloudRuntimeException("DB Exception on: " + sql, e); + } catch (Throwable e) { + throw new CloudRuntimeException("Caught: " + sql, e); + } + } + + public static class SummedCapacity { + public long sumUsed; + public long sumReserved; + public long sumTotal; + public Float percentUsed; + public short capacityType; + public Long clusterId; + public Long podId; + public Long dcId; + public SummedCapacity() { + } + public SummedCapacity(long sumUsed, long sumReserved, long sumTotal, + short capacityType, Long clusterId, Long podId) { + super(); + this.sumUsed = sumUsed; + this.sumReserved = sumReserved; + this.sumTotal = sumTotal; + this.capacityType = capacityType; + this.clusterId = clusterId; + this.podId = podId; + } + public SummedCapacity(long sumUsed, long sumReserved, long sumTotal, short capacityType, Long clusterId, Long podId, Long zoneId) { - this(sumUsed, sumReserved, sumTotal, capacityType, clusterId, podId); - this.dcId = zoneId; - } - - public SummedCapacity(long sumUsed, long sumTotal, float percentUsed, short capacityType, Long zoneId, Long podId, Long clusterId) { - super(); - this.sumUsed = sumUsed; - this.sumTotal = sumTotal; - this.percentUsed = percentUsed; - this.capacityType = capacityType; + this(sumUsed, sumReserved, sumTotal, capacityType, clusterId, podId); + this.dcId = zoneId; + } + + public SummedCapacity(long sumUsed, long sumTotal, float percentUsed, short capacityType, Long zoneId, Long podId, Long clusterId) { + super(); + this.sumUsed = sumUsed; + this.sumTotal = sumTotal; + this.percentUsed = percentUsed; + this.capacityType = capacityType; this.clusterId = clusterId; this.podId = podId; this.dcId = zoneId; } - - public Short getCapacityType() { - return capacityType; - } - public Long getUsedCapacity() { - return sumUsed; - } - public long getReservedCapacity() { - return sumReserved; - } - public Long getTotalCapacity() { - return sumTotal; - } - public Long getDataCenterId() { + + public Short getCapacityType() { + return capacityType; + } + public Long getUsedCapacity() { + return sumUsed; + } + public long getReservedCapacity() { + return sumReserved; + } + public Long getTotalCapacity() { + return sumTotal; + } + public Long getDataCenterId() { return dcId; } - public Long getClusterId() { + public Long getClusterId() { return clusterId; } public Long getPodId() { @@ -527,110 +524,111 @@ public class CapacityDaoImpl extends GenericDaoBase implements public Float getPercentUsed() { return percentUsed; } - } - public List findByClusterPodZone(Long zoneId, Long podId, Long clusterId){ + } + @Override + public List findByClusterPodZone(Long zoneId, Long podId, Long clusterId){ - SummedCapacitySearch = createSearchBuilder(SummedCapacity.class); + SummedCapacitySearch = createSearchBuilder(SummedCapacity.class); SummedCapacitySearch.select("sumUsed", Func.SUM, SummedCapacitySearch.entity().getUsedCapacity()); SummedCapacitySearch.select("sumTotal", Func.SUM, SummedCapacitySearch.entity().getTotalCapacity()); SummedCapacitySearch.select("capacityType", Func.NATIVE, SummedCapacitySearch.entity().getCapacityType()); SummedCapacitySearch.groupBy(SummedCapacitySearch.entity().getCapacityType()); - + if(zoneId != null){ - SummedCapacitySearch.and("zoneId", SummedCapacitySearch.entity().getDataCenterId(), Op.EQ); + SummedCapacitySearch.and("zoneId", SummedCapacitySearch.entity().getDataCenterId(), Op.EQ); } if (podId != null){ - SummedCapacitySearch.and("podId", SummedCapacitySearch.entity().getPodId(), Op.EQ); + SummedCapacitySearch.and("podId", SummedCapacitySearch.entity().getPodId(), Op.EQ); } if (clusterId != null){ - SummedCapacitySearch.and("clusterId", SummedCapacitySearch.entity().getClusterId(), Op.EQ); + SummedCapacitySearch.and("clusterId", SummedCapacitySearch.entity().getClusterId(), Op.EQ); } SummedCapacitySearch.done(); - - + + SearchCriteria sc = SummedCapacitySearch.create(); if (zoneId != null){ - sc.setParameters("zoneId", zoneId); + sc.setParameters("zoneId", zoneId); } if (podId != null){ - sc.setParameters("podId", podId); + sc.setParameters("podId", podId); } if (clusterId != null){ - sc.setParameters("clusterId", clusterId); + sc.setParameters("clusterId", clusterId); } - - return customSearchIncludingRemoved(sc, null); - } - - @Override - public List findNonSharedStorageForClusterPodZone(Long zoneId, Long podId, Long clusterId){ - SummedCapacitySearch = createSearchBuilder(SummedCapacity.class); + return customSearchIncludingRemoved(sc, null); + } + + @Override + public List findNonSharedStorageForClusterPodZone(Long zoneId, Long podId, Long clusterId){ + + SummedCapacitySearch = createSearchBuilder(SummedCapacity.class); SummedCapacitySearch.select("sumUsed", Func.SUM, SummedCapacitySearch.entity().getUsedCapacity()); SummedCapacitySearch.select("sumTotal", Func.SUM, SummedCapacitySearch.entity().getTotalCapacity()); SummedCapacitySearch.select("capacityType", Func.NATIVE, SummedCapacitySearch.entity().getCapacityType()); SummedCapacitySearch.and("capacityType", SummedCapacitySearch.entity().getCapacityType(), Op.EQ); - - SearchBuilder nonSharedStorage = _storagePoolDao.createSearchBuilder(); - nonSharedStorage.and("poolTypes", nonSharedStorage.entity().getPoolType(), SearchCriteria.Op.IN); - SummedCapacitySearch.join("nonSharedStorage", nonSharedStorage, nonSharedStorage.entity().getId(), SummedCapacitySearch.entity().getHostOrPoolId(), JoinType.INNER); - nonSharedStorage.done(); - + + SearchBuilder nonSharedStorage = _storagePoolDao.createSearchBuilder(); + nonSharedStorage.and("poolTypes", nonSharedStorage.entity().getPoolType(), SearchCriteria.Op.IN); + SummedCapacitySearch.join("nonSharedStorage", nonSharedStorage, nonSharedStorage.entity().getId(), SummedCapacitySearch.entity().getHostOrPoolId(), JoinType.INNER); + nonSharedStorage.done(); + if(zoneId != null){ - SummedCapacitySearch.and("zoneId", SummedCapacitySearch.entity().getDataCenterId(), Op.EQ); + SummedCapacitySearch.and("zoneId", SummedCapacitySearch.entity().getDataCenterId(), Op.EQ); } if (podId != null){ - SummedCapacitySearch.and("podId", SummedCapacitySearch.entity().getPodId(), Op.EQ); + SummedCapacitySearch.and("podId", SummedCapacitySearch.entity().getPodId(), Op.EQ); } if (clusterId != null){ - SummedCapacitySearch.and("clusterId", SummedCapacitySearch.entity().getClusterId(), Op.EQ); + SummedCapacitySearch.and("clusterId", SummedCapacitySearch.entity().getClusterId(), Op.EQ); } SummedCapacitySearch.done(); - - + + SearchCriteria sc = SummedCapacitySearch.create(); sc.setJoinParameters("nonSharedStorage", "poolTypes", Storage.getNonSharedStoragePoolTypes().toArray()); sc.setParameters("capacityType", Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED); if (zoneId != null){ - sc.setParameters("zoneId", zoneId); + sc.setParameters("zoneId", zoneId); } if (podId != null){ - sc.setParameters("podId", podId); + sc.setParameters("podId", podId); } if (clusterId != null){ - sc.setParameters("clusterId", clusterId); + sc.setParameters("clusterId", clusterId); } - + return customSearchIncludingRemoved(sc, null); - } - + } + @Override public boolean removeBy(Short capacityType, Long zoneId, Long podId, Long clusterId, Long hostId) { SearchCriteria sc = _allFieldsSearch.create(); - + if (capacityType != null) { sc.setParameters("capacityType", capacityType); } - + if (zoneId != null) { sc.setParameters("zoneId", zoneId); } - + if (podId != null) { sc.setParameters("podId", podId); } - + if (clusterId != null) { sc.setParameters("clusterId", clusterId); } - + if (hostId != null) { sc.setParameters("hostId", hostId); } - + return remove(sc) > 0; } - + @Override public Pair, Map> orderClustersByAggregateCapacity(long id, short capacityTypeForOrdering, boolean isZone, float cpuOverprovisioningFactor){ Transaction txn = Transaction.currentTxn(); @@ -639,7 +637,7 @@ public class CapacityDaoImpl extends GenericDaoBase implements Map clusterCapacityMap = new HashMap(); StringBuilder sql = new StringBuilder(ORDER_CLUSTERS_BY_AGGREGATE_CAPACITY_PART1); - + if(isZone){ sql.append("data_center_id = ?"); }else{ @@ -708,13 +706,13 @@ public class CapacityDaoImpl extends GenericDaoBase implements PreparedStatement pstmt = null; List result = new ArrayList(); Map podCapacityMap = new HashMap(); - + StringBuilder sql = new StringBuilder(ORDER_PODS_BY_AGGREGATE_CAPACITY); try { pstmt = txn.prepareAutoCloseStatement(sql.toString()); pstmt.setLong(2, zoneId); pstmt.setShort(3, capacityTypeForOrdering); - + if(capacityTypeForOrdering == CapacityVO.CAPACITY_TYPE_CPU){ pstmt.setFloat(1, cpuOverprovisioningFactor); pstmt.setFloat(4, cpuOverprovisioningFactor); @@ -722,7 +720,7 @@ public class CapacityDaoImpl extends GenericDaoBase implements pstmt.setFloat(1, 1); pstmt.setFloat(4, 1); } - + ResultSet rs = pstmt.executeQuery(); while (rs.next()) { Long podId = rs.getLong(1); @@ -736,13 +734,13 @@ public class CapacityDaoImpl extends GenericDaoBase implements throw new CloudRuntimeException("Caught: " + sql, e); } } - + @Override public void updateCapacityState(Long dcId, Long podId, Long clusterId, Long hostId, String capacityState) { Transaction txn = Transaction.currentTxn(); StringBuilder sql = new StringBuilder(UPDATE_CAPACITY_STATE); List resourceIdList = new ArrayList(); - + if (dcId != null){ sql.append(" data_center_id = ?"); resourceIdList.add(dcId); @@ -759,7 +757,7 @@ public class CapacityDaoImpl extends GenericDaoBase implements sql.append(" host_id = ?"); resourceIdList.add(hostId); } - + PreparedStatement pstmt = null; try { pstmt = txn.prepareAutoCloseStatement(sql.toString()); diff --git a/server/src/com/cloud/cluster/CheckPointManager.java b/server/src/com/cloud/cluster/CheckPointManager.java deleted file mode 100644 index b6333e6c4fa..00000000000 --- a/server/src/com/cloud/cluster/CheckPointManager.java +++ /dev/null @@ -1,52 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.cluster; - - -/** - * TaskManager helps business logic deal with clustering failover. - * Say you're writing code that introduces an inconsistent state over - * of your operation? Who will come back to cleanup this state? TaskManager - * with different content during your process. If the server dies, TaskManager - * running elsewhere. If there are no clustered servers, then TaskManager will - * cleanup when the dead server resumes. - * - */ -public interface CheckPointManager { - /** - * responsible for cleaning up. - * - * @param context context information to be stored. - * @return Check point id. - */ - long pushCheckPoint(CleanupMaid context); - - /** - * update the task with new context - * @param taskId - * @param updatedContext new updated context. - */ - void updateCheckPointState(long taskId, CleanupMaid updatedContext); - - - /** - * removes the task as it is completed. - * - * @param taskId - */ - void popCheckPoint(long taskId); -} diff --git a/server/src/com/cloud/cluster/CheckPointManagerImpl.java b/server/src/com/cloud/cluster/CheckPointManagerImpl.java deleted file mode 100644 index e02a2f0dcc2..00000000000 --- a/server/src/com/cloud/cluster/CheckPointManagerImpl.java +++ /dev/null @@ -1,247 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.cluster; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - -import javax.ejb.Local; -import javax.inject.Inject; -import javax.naming.ConfigurationException; - -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; - -import com.cloud.cluster.dao.StackMaidDao; -import com.cloud.configuration.Config; -import com.cloud.configuration.dao.ConfigurationDao; -import com.cloud.serializer.SerializerHelper; -import com.cloud.utils.DateUtil; -import com.cloud.utils.NumbersUtil; -import com.cloud.utils.component.ComponentLocator; -import com.cloud.utils.component.Manager; -import com.cloud.utils.concurrency.NamedThreadFactory; -import com.cloud.utils.db.DB; -import com.cloud.utils.db.GlobalLock; - -@Component -@Local(value=CheckPointManager.class) -public class CheckPointManagerImpl implements CheckPointManager, Manager, ClusterManagerListener { - private static final Logger s_logger = Logger.getLogger(CheckPointManagerImpl.class); - - private static final int ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_COOPERATION = 3; // 3 seconds - private int _cleanupRetryInterval; - - private String _name; - - @Inject - private StackMaidDao _maidDao; - - @Inject - private ClusterManager _clusterMgr; - - @Inject ConfigurationDao _configDao; - - long _msId; - - private final ScheduledExecutorService _cleanupScheduler = Executors.newScheduledThreadPool(1, new NamedThreadFactory("Task-Cleanup")); - - protected CheckPointManagerImpl() { - } - - @Override - public boolean configure(String name, Map xmlParams) throws ConfigurationException { - _name = name; - - if (s_logger.isInfoEnabled()) { - s_logger.info("Start configuring StackMaidManager : " + name); - } - - StackMaid.init(ManagementServerNode.getManagementServerId()); - _msId = ManagementServerNode.getManagementServerId(); - - _clusterMgr.registerListener(this); - - Map params = _configDao.getConfiguration(xmlParams); - - _cleanupRetryInterval = NumbersUtil.parseInt(params.get(Config.TaskCleanupRetryInterval.key()), 600); - _maidDao.takeover(_msId, _msId); - return true; - } - - private void cleanupLeftovers(List l) { - for (CheckPointVO maid : l) { - if (StackMaid.doCleanup(maid)) { - _maidDao.expunge(maid.getId()); - } - } - } - - @Override - public void onManagementNodeIsolated() { - } - - @DB - private Runnable getGCTask() { - return new Runnable() { - @Override - public void run() { - GlobalLock scanLock = GlobalLock.getInternLock("StackMaidManagerGC"); - try { - if (scanLock.lock(ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_COOPERATION)) { - try { - reallyRun(); - } finally { - scanLock.unlock(); - } - } - } finally { - scanLock.releaseRef(); - } - } - - public void reallyRun() { - try { - Date cutTime = new Date(DateUtil.currentGMTTime().getTime() - 7200000); - List l = _maidDao.listLeftoversByCutTime(cutTime); - cleanupLeftovers(l); - } catch (Throwable e) { - s_logger.error("Unexpected exception when trying to execute queue item, ", e); - } - } - }; - } - - @Override - public boolean start() { - _cleanupScheduler.schedule(new CleanupTask(), _cleanupRetryInterval > 0 ? _cleanupRetryInterval : 600, TimeUnit.SECONDS); - return true; - } - - @Override - public boolean stop() { - return true; - } - - @Override - public String getName() { - return _name; - } - - @Override - public void onManagementNodeJoined(List nodeList, long selfNodeId) { - // Nothing to do - } - - @Override - public void onManagementNodeLeft(List nodeList, long selfNodeId) { - for (ManagementServerHostVO node : nodeList) { - if (_maidDao.takeover(node.getMsid(), selfNodeId)) { - s_logger.info("Taking over from " + node.getMsid()); - _cleanupScheduler.execute(new CleanupTask()); - } - } - } - - @Override - @DB - public long pushCheckPoint(CleanupMaid context) { - long seq = _maidDao.pushCleanupDelegate(_msId, 0, context.getClass().getName(), context); - return seq; - } - - @Override - @DB - public void updateCheckPointState(long taskId, CleanupMaid updatedContext) { - CheckPointVO task = _maidDao.createForUpdate(); - task.setDelegate(updatedContext.getClass().getName()); - task.setContext(SerializerHelper.toSerializedStringOld(updatedContext)); - _maidDao.update(taskId, task); - } - - @Override - @DB - public void popCheckPoint(long taskId) { - _maidDao.remove(taskId); - } - - protected boolean cleanup(CheckPointVO task) { - s_logger.info("Cleaning up " + task); - CleanupMaid delegate = (CleanupMaid)SerializerHelper.fromSerializedString(task.getContext()); - assert delegate.getClass().getName().equals(task.getDelegate()) : "Deserializer says " + delegate.getClass().getName() + " but it's suppose to be " + task.getDelegate(); - - int result = delegate.cleanup(this); - if (result <= 0) { - if (result == 0) { - s_logger.info("Successfully cleaned up " + task.getId()); - } else { - s_logger.warn("Unsuccessful in cleaning up " + task + ". Procedure to cleanup manaully: " + delegate.getCleanupProcedure()); - } - popCheckPoint(task.getId()); - return true; - } else { - s_logger.error("Unable to cleanup " + task.getId()); - return false; - } - } - - class CleanupTask implements Runnable { - private Date _curDate; - public CleanupTask() { - _curDate = new Date(); - } - - @Override - public void run() { - try { - List tasks = _maidDao.listLeftoversByCutTime(_curDate, _msId); - tasks.addAll(_maidDao.listCleanupTasks(_msId)); - - List retries = new ArrayList(); - - for (CheckPointVO task : tasks) { - try { - if (!cleanup(task)) { - retries.add(task); - } - } catch (Exception e) { - s_logger.warn("Unable to clean up " + task, e); - - } - } - - if (retries.size() > 0) { - if (_cleanupRetryInterval > 0) { - _cleanupScheduler.schedule(this, _cleanupRetryInterval, TimeUnit.SECONDS); - } else { - for (CheckPointVO task : retries) { - s_logger.warn("Cleanup procedure for " + task + ": " + ((CleanupMaid)SerializerHelper.fromSerializedString(task.getContext())).getCleanupProcedure()); - } - } - } - - } catch (Exception e) { - s_logger.error("Unable to cleanup all of the tasks for " + _msId, e); - } - } - } -} diff --git a/server/src/com/cloud/cluster/CleanupMaid.java b/server/src/com/cloud/cluster/CleanupMaid.java deleted file mode 100644 index 1ff83f12286..00000000000 --- a/server/src/com/cloud/cluster/CleanupMaid.java +++ /dev/null @@ -1,41 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.cluster; - -/** - * - * task. The state is serialized and stored. When cleanup is required - * CleanupMaid is instantiated from the stored data and cleanup() is called. - * - */ -public interface CleanupMaid { - /** - * cleanup according the state that was stored. - * - * @return 0 indicates cleanup was successful. Negative number - * indicates the cleanup was unsuccessful but don't retry. Positive number - * indicates the cleanup was unsuccessful and retry in this many seconds. - */ - int cleanup(CheckPointManager checkPointMgr); - - - /** - * returned here is recorded. - * @return - */ - String getCleanupProcedure(); -} diff --git a/server/src/com/cloud/cluster/ClusterManagerImpl.java b/server/src/com/cloud/cluster/ClusterManagerImpl.java index 013034f08a5..f71a8665951 100755 --- a/server/src/com/cloud/cluster/ClusterManagerImpl.java +++ b/server/src/com/cloud/cluster/ClusterManagerImpl.java @@ -29,7 +29,6 @@ import java.sql.SQLException; import java.sql.SQLRecoverableException; import java.util.ArrayList; import java.util.Date; -import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -75,8 +74,6 @@ import com.cloud.utils.DateUtil; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Profiler; import com.cloud.utils.PropertiesUtil; -import com.cloud.utils.component.Adapters; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.ConnectionConcierge; import com.cloud.utils.db.DB; @@ -123,7 +120,7 @@ public class ClusterManagerImpl implements ClusterManager { private final ExecutorService _executor; private ClusterServiceAdapter _currentServiceAdapter; - + @Inject private List _serviceAdapters; @@ -149,11 +146,11 @@ public class ClusterManagerImpl implements ClusterManager { private boolean _agentLBEnabled = false; private double _connectedAgentsThreshold = 0.7; private static boolean _agentLbHappened = false; - - private List _clusterPduOutgoingQueue = new ArrayList(); - private List _clusterPduIncomingQueue = new ArrayList(); - private Map _outgoingPdusWaitingForAck = new HashMap(); - + + private final List _clusterPduOutgoingQueue = new ArrayList(); + private final List _clusterPduIncomingQueue = new ArrayList(); + private final Map _outgoingPdusWaitingForAck = new HashMap(); + public ClusterManagerImpl() { _clusterPeers = new HashMap(); @@ -164,13 +161,13 @@ public class ClusterManagerImpl implements ClusterManager { // _executor = Executors.newCachedThreadPool(new NamedThreadFactory("Cluster-Worker")); } - + private void registerRequestPdu(ClusterServiceRequestPdu pdu) { synchronized(_outgoingPdusWaitingForAck) { _outgoingPdusWaitingForAck.put(pdu.getSequenceId(), pdu); } } - + private ClusterServiceRequestPdu popRequestPdu(long ackSequenceId) { synchronized(_outgoingPdusWaitingForAck) { if(_outgoingPdusWaitingForAck.get(ackSequenceId) != null) { @@ -179,10 +176,10 @@ public class ClusterManagerImpl implements ClusterManager { return pdu; } } - + return null; } - + private void cancelClusterRequestToPeer(String strPeer) { List candidates = new ArrayList(); synchronized(_outgoingPdusWaitingForAck) { @@ -195,7 +192,7 @@ public class ClusterManagerImpl implements ClusterManager { _outgoingPdusWaitingForAck.remove(pdu.getSequenceId()); } } - + for(ClusterServiceRequestPdu pdu : candidates) { s_logger.warn("Cancel cluster request PDU to peer: " + strPeer + ", pdu: " + _gson.toJson(pdu)); synchronized(pdu) { @@ -203,76 +200,78 @@ public class ClusterManagerImpl implements ClusterManager { } } } - + private void addOutgoingClusterPdu(ClusterServicePdu pdu) { - synchronized(_clusterPduOutgoingQueue) { - _clusterPduOutgoingQueue.add(pdu); - _clusterPduOutgoingQueue.notifyAll(); - } + synchronized(_clusterPduOutgoingQueue) { + _clusterPduOutgoingQueue.add(pdu); + _clusterPduOutgoingQueue.notifyAll(); + } } - + private ClusterServicePdu popOutgoingClusterPdu(long timeoutMs) { - synchronized(_clusterPduOutgoingQueue) { - try { - _clusterPduOutgoingQueue.wait(timeoutMs); - } catch (InterruptedException e) { - } - - if(_clusterPduOutgoingQueue.size() > 0) { - ClusterServicePdu pdu = _clusterPduOutgoingQueue.get(0); - _clusterPduOutgoingQueue.remove(0); - return pdu; - } - } - return null; + synchronized(_clusterPduOutgoingQueue) { + try { + _clusterPduOutgoingQueue.wait(timeoutMs); + } catch (InterruptedException e) { + } + + if(_clusterPduOutgoingQueue.size() > 0) { + ClusterServicePdu pdu = _clusterPduOutgoingQueue.get(0); + _clusterPduOutgoingQueue.remove(0); + return pdu; + } + } + return null; } private void addIncomingClusterPdu(ClusterServicePdu pdu) { - synchronized(_clusterPduIncomingQueue) { - _clusterPduIncomingQueue.add(pdu); - _clusterPduIncomingQueue.notifyAll(); - } + synchronized(_clusterPduIncomingQueue) { + _clusterPduIncomingQueue.add(pdu); + _clusterPduIncomingQueue.notifyAll(); + } } - + private ClusterServicePdu popIncomingClusterPdu(long timeoutMs) { - synchronized(_clusterPduIncomingQueue) { - try { - _clusterPduIncomingQueue.wait(timeoutMs); - } catch (InterruptedException e) { - } - - if(_clusterPduIncomingQueue.size() > 0) { - ClusterServicePdu pdu = _clusterPduIncomingQueue.get(0); - _clusterPduIncomingQueue.remove(0); - return pdu; - } - } - return null; + synchronized(_clusterPduIncomingQueue) { + try { + _clusterPduIncomingQueue.wait(timeoutMs); + } catch (InterruptedException e) { + } + + if(_clusterPduIncomingQueue.size() > 0) { + ClusterServicePdu pdu = _clusterPduIncomingQueue.get(0); + _clusterPduIncomingQueue.remove(0); + return pdu; + } + } + return null; } - + private Runnable getClusterPduSendingTask() { return new Runnable() { + @Override public void run() { onSendingClusterPdu(); } }; } - + private Runnable getClusterPduNotificationTask() { return new Runnable() { + @Override public void run() { onNotifyingClusterPdu(); } }; } - + private void onSendingClusterPdu() { while(true) { try { ClusterServicePdu pdu = popOutgoingClusterPdu(1000); if(pdu == null) - continue; - + continue; + ClusterService peerService = null; for(int i = 0; i < 2; i++) { try { @@ -285,20 +284,20 @@ public class ClusterManagerImpl implements ClusterManager { try { if(s_logger.isDebugEnabled()) { s_logger.debug("Cluster PDU " + getSelfPeerName() + " -> " + pdu.getDestPeer() + ". agent: " + pdu.getAgentId() - + ", pdu seq: " + pdu.getSequenceId() + ", pdu ack seq: " + pdu.getAckSequenceId() + ", json: " + pdu.getJsonPackage()); + + ", pdu seq: " + pdu.getSequenceId() + ", pdu ack seq: " + pdu.getAckSequenceId() + ", json: " + pdu.getJsonPackage()); } long startTick = System.currentTimeMillis(); String strResult = peerService.execute(pdu); if(s_logger.isDebugEnabled()) { s_logger.debug("Cluster PDU " + getSelfPeerName() + " -> " + pdu.getDestPeer() + " completed. time: " + - (System.currentTimeMillis() - startTick) + "ms. agent: " + pdu.getAgentId() - + ", pdu seq: " + pdu.getSequenceId() + ", pdu ack seq: " + pdu.getAckSequenceId() + ", json: " + pdu.getJsonPackage()); + (System.currentTimeMillis() - startTick) + "ms. agent: " + pdu.getAgentId() + + ", pdu seq: " + pdu.getSequenceId() + ", pdu ack seq: " + pdu.getAckSequenceId() + ", json: " + pdu.getJsonPackage()); } - + if("true".equals(strResult)) break; - + } catch (RemoteException e) { invalidatePeerService(pdu.getDestPeer()); if(s_logger.isInfoEnabled()) { @@ -313,50 +312,51 @@ public class ClusterManagerImpl implements ClusterManager { } } } - + private void onNotifyingClusterPdu() { while(true) { try { final ClusterServicePdu pdu = popIncomingClusterPdu(1000); if(pdu == null) - continue; + continue; _executor.execute(new Runnable() { - public void run() { - if(pdu.getPduType() == ClusterServicePdu.PDU_TYPE_RESPONSE) { - ClusterServiceRequestPdu requestPdu = popRequestPdu(pdu.getAckSequenceId()); - if(requestPdu != null) { - requestPdu.setResponseResult(pdu.getJsonPackage()); - synchronized(requestPdu) { - requestPdu.notifyAll(); - } - } else { - s_logger.warn("Original request has already been cancelled. pdu: " + _gson.toJson(pdu)); - } - } else { - String result = dispatchClusterServicePdu(pdu); - if(result == null) - result = ""; - - if(pdu.getPduType() == ClusterServicePdu.PDU_TYPE_REQUEST) { - ClusterServicePdu responsePdu = new ClusterServicePdu(); - responsePdu.setPduType(ClusterServicePdu.PDU_TYPE_RESPONSE); - responsePdu.setSourcePeer(pdu.getDestPeer()); - responsePdu.setDestPeer(pdu.getSourcePeer()); - responsePdu.setAckSequenceId(pdu.getSequenceId()); - responsePdu.setJsonPackage(result); - - addOutgoingClusterPdu(responsePdu); - } - } - } + @Override + public void run() { + if(pdu.getPduType() == ClusterServicePdu.PDU_TYPE_RESPONSE) { + ClusterServiceRequestPdu requestPdu = popRequestPdu(pdu.getAckSequenceId()); + if(requestPdu != null) { + requestPdu.setResponseResult(pdu.getJsonPackage()); + synchronized(requestPdu) { + requestPdu.notifyAll(); + } + } else { + s_logger.warn("Original request has already been cancelled. pdu: " + _gson.toJson(pdu)); + } + } else { + String result = dispatchClusterServicePdu(pdu); + if(result == null) + result = ""; + + if(pdu.getPduType() == ClusterServicePdu.PDU_TYPE_REQUEST) { + ClusterServicePdu responsePdu = new ClusterServicePdu(); + responsePdu.setPduType(ClusterServicePdu.PDU_TYPE_RESPONSE); + responsePdu.setSourcePeer(pdu.getDestPeer()); + responsePdu.setDestPeer(pdu.getSourcePeer()); + responsePdu.setAckSequenceId(pdu.getSequenceId()); + responsePdu.setJsonPackage(result); + + addOutgoingClusterPdu(responsePdu); + } + } + } }); } catch(Throwable e) { s_logger.error("Unexcpeted exception: ", e); } } } - + private String dispatchClusterServicePdu(ClusterServicePdu pdu) { if(s_logger.isDebugEnabled()) { @@ -370,7 +370,7 @@ public class ClusterManagerImpl implements ClusterManager { assert(false); s_logger.error("Excection in gson decoding : ", e); } - + if (cmds.length == 1 && cmds[0] instanceof ChangeAgentCommand) { //intercepted ChangeAgentCommand cmd = (ChangeAgentCommand)cmds[0]; @@ -416,22 +416,22 @@ public class ClusterManagerImpl implements ClusterManager { answers[0] = new Answer(cmd, result, null); return _gson.toJson(answers); } else if (cmds.length == 1 && cmds[0] instanceof PropagateResourceEventCommand ) { - PropagateResourceEventCommand cmd = (PropagateResourceEventCommand) cmds[0]; - - s_logger.debug("Intercepting command to propagate event " + cmd.getEvent().name() + " for host " + cmd.getHostId()); - - boolean result = false; - try { - result = executeResourceUserRequest(cmd.getHostId(), cmd.getEvent()); - s_logger.debug("Result is " + result); - } catch (AgentUnavailableException ex) { - s_logger.warn("Agent is unavailable", ex); - return null; - } - - Answer[] answers = new Answer[1]; - answers[0] = new Answer(cmd, result, null); - return _gson.toJson(answers); + PropagateResourceEventCommand cmd = (PropagateResourceEventCommand) cmds[0]; + + s_logger.debug("Intercepting command to propagate event " + cmd.getEvent().name() + " for host " + cmd.getHostId()); + + boolean result = false; + try { + result = executeResourceUserRequest(cmd.getHostId(), cmd.getEvent()); + s_logger.debug("Result is " + result); + } catch (AgentUnavailableException ex) { + s_logger.warn("Agent is unavailable", ex); + return null; + } + + Answer[] answers = new Answer[1]; + answers[0] = new Answer(cmd, result, null); + return _gson.toJson(answers); } try { @@ -461,14 +461,15 @@ public class ClusterManagerImpl implements ClusterManager { } catch (OperationTimedoutException e) { s_logger.warn("Timed Out", e); } - + return null; } + @Override public void OnReceiveClusterServicePdu(ClusterServicePdu pdu) { - addIncomingClusterPdu(pdu); + addIncomingClusterPdu(pdu); } - + @Override public Answer[] sendToAgent(Long hostId, Command[] cmds, boolean stopOnError) throws AgentUnavailableException, OperationTimedoutException { Commands commands = new Commands(stopOnError ? OnError.Stop : OnError.Continue); @@ -558,7 +559,7 @@ public class ClusterManagerImpl implements ClusterManager { s_logger.debug(getSelfPeerName() + " -> " + strPeer + "." + agentId + " " + _gson.toJson(cmds, Command[].class)); } - + ClusterServiceRequestPdu pdu = new ClusterServiceRequestPdu(); pdu.setSourcePeer(getSelfPeerName()); pdu.setDestPeer(strPeer); @@ -567,7 +568,7 @@ public class ClusterManagerImpl implements ClusterManager { pdu.setStopOnError(stopOnError); registerRequestPdu(pdu); addOutgoingClusterPdu(pdu); - + synchronized(pdu) { try { pdu.wait(); @@ -577,9 +578,9 @@ public class ClusterManagerImpl implements ClusterManager { if(s_logger.isDebugEnabled()) { s_logger.debug(getSelfPeerName() + " -> " + strPeer + "." + agentId + " completed. result: " + - pdu.getResponseResult()); + pdu.getResponseResult()); } - + if(pdu.getResponseResult() != null && pdu.getResponseResult().length() > 0) { try { return _gson.fromJson(pdu.getResponseResult(), Answer[].class); @@ -590,7 +591,7 @@ public class ClusterManagerImpl implements ClusterManager { return null; } - + @Override public String getPeerName(long agentHostId) { @@ -625,18 +626,18 @@ public class ClusterManagerImpl implements ClusterManager { // Note : we don't check duplicates synchronized (_listeners) { - s_logger.info("register cluster listener " + listener.getClass()); - - _listeners.add(listener); + s_logger.info("register cluster listener " + listener.getClass()); + + _listeners.add(listener); } } @Override public void unregisterListener(ClusterManagerListener listener) { synchronized(_listeners) { - s_logger.info("unregister cluster listener " + listener.getClass()); - - _listeners.remove(listener); + s_logger.info("unregister cluster listener " + listener.getClass()); + + _listeners.remove(listener); } } @@ -663,7 +664,7 @@ public class ClusterManagerImpl implements ClusterManager { if(s_logger.isDebugEnabled()) { s_logger.debug("Notify management server node left to listeners."); } - + for(ManagementServerHostVO mshost : nodeList) { if(s_logger.isDebugEnabled()) s_logger.debug("Leaving node, IP: " + mshost.getServiceIP() + ", msid: " + mshost.getMsid()); @@ -731,32 +732,32 @@ public class ClusterManagerImpl implements ClusterManager { Profiler profilerHeartbeatUpdate = new Profiler(); Profiler profilerPeerScan = new Profiler(); Profiler profilerAgentLB = new Profiler(); - + try { profiler.start(); - + profilerHeartbeatUpdate.start(); txn.transitToUserManagedConnection(getHeartbeatConnection()); if(s_logger.isTraceEnabled()) { s_logger.trace("Cluster manager heartbeat update, id:" + _mshostId); } - + _mshostDao.update(_mshostId, getCurrentRunId(), DateUtil.currentGMTTime()); profilerHeartbeatUpdate.stop(); - + profilerPeerScan.start(); if (s_logger.isTraceEnabled()) { s_logger.trace("Cluster manager peer-scan, id:" + _mshostId); } - + if (!_peerScanInited) { _peerScanInited = true; initPeerScan(); } - + peerScan(); profilerPeerScan.stop(); - + profilerAgentLB.start(); //initiate agent lb task will be scheduled and executed only once, and only when number of agents loaded exceeds _connectedAgentsThreshold if (_agentLBEnabled && !_agentLbHappened) { @@ -764,7 +765,7 @@ public class ClusterManagerImpl implements ClusterManager { sc.addAnd(sc.getEntity().getManagementServerId(), Op.NNULL); sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.Routing); List allManagedRoutingAgents = sc.list(); - + sc = SearchCriteria2.create(HostVO.class); sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.Routing); List allAgents = sc.list(); @@ -784,16 +785,16 @@ public class ClusterManagerImpl implements ClusterManager { profilerAgentLB.stop(); } finally { profiler.stop(); - + if(profiler.getDuration() >= _heartbeatInterval) { if(s_logger.isDebugEnabled()) s_logger.debug("Management server heartbeat takes too long to finish. profiler: " + profiler.toString() + - ", profilerHeartbeatUpdate: " + profilerHeartbeatUpdate.toString() + - ", profilerPeerScan: " + profilerPeerScan.toString() + - ", profilerAgentLB: " + profilerAgentLB.toString()); + ", profilerHeartbeatUpdate: " + profilerHeartbeatUpdate.toString() + + ", profilerPeerScan: " + profilerPeerScan.toString() + + ", profilerAgentLB: " + profilerAgentLB.toString()); } } - + } catch(CloudRuntimeException e) { s_logger.error("Runtime DB exception ", e.getCause()); @@ -933,33 +934,33 @@ public class ClusterManagerImpl implements ClusterManager { this._notificationMsgs.add(msg); this._notificationMsgs.notifyAll(); } - + switch(msg.getMessageType()) { case nodeAdded: - { - List l = msg.getNodes(); - if(l != null && l.size() > 0) { - for(ManagementServerHostVO mshost: l) { - _mshostPeerDao.updatePeerInfo(_mshostId, mshost.getId(), mshost.getRunid(), ManagementServerHost.State.Up); - } + { + List l = msg.getNodes(); + if(l != null && l.size() > 0) { + for(ManagementServerHostVO mshost: l) { + _mshostPeerDao.updatePeerInfo(_mshostId, mshost.getId(), mshost.getRunid(), ManagementServerHost.State.Up); } } - break; - + } + break; + case nodeRemoved: - { - List l = msg.getNodes(); - if(l != null && l.size() > 0) { - for(ManagementServerHostVO mshost: l) { - _mshostPeerDao.updatePeerInfo(_mshostId, mshost.getId(), mshost.getRunid(), ManagementServerHost.State.Down); - } + { + List l = msg.getNodes(); + if(l != null && l.size() > 0) { + for(ManagementServerHostVO mshost: l) { + _mshostPeerDao.updatePeerInfo(_mshostId, mshost.getId(), mshost.getRunid(), ManagementServerHost.State.Down); } } - break; - + } + break; + default : break; - + } } @@ -978,39 +979,39 @@ public class ClusterManagerImpl implements ClusterManager { // missed cleanup Date cutTime = DateUtil.currentGMTTime(); List inactiveList = _mshostDao.getInactiveList(new Date(cutTime.getTime() - _heartbeatThreshold)); - + // We don't have foreign key constraints to enforce the mgmt_server_id integrity in host table, when user manually // remove records from mshost table, this will leave orphan mgmt_serve_id reference in host table. List orphanList = _mshostDao.listOrphanMsids(); if(orphanList.size() > 0) { - for(Long orphanMsid : orphanList) { - // construct fake ManagementServerHostVO based on orphan MSID - s_logger.info("Add orphan management server msid found in host table to initial clustering notification, orphan msid: " + orphanMsid); - inactiveList.add(new ManagementServerHostVO(orphanMsid, 0, "orphan", 0, new Date())); - } - } else { - s_logger.info("We are good, no orphan management server msid in host table is found"); - } - - if(inactiveList.size() > 0) { - if(s_logger.isInfoEnabled()) { - s_logger.info("Found " + inactiveList.size() + " inactive management server node based on timestamp"); - for(ManagementServerHostVO host : inactiveList) - s_logger.info("management server node msid: " + host.getMsid() + ", name: " + host.getName() + ", service ip: " + host.getServiceIP() + ", version: " + host.getVersion()); - } - - List downHostList = new ArrayList(); - for(ManagementServerHostVO host : inactiveList) { - if(!pingManagementNode(host)) { - s_logger.warn("Management node " + host.getId() + " is detected inactive by timestamp and also not pingable"); - downHostList.add(host); - } + for(Long orphanMsid : orphanList) { + // construct fake ManagementServerHostVO based on orphan MSID + s_logger.info("Add orphan management server msid found in host table to initial clustering notification, orphan msid: " + orphanMsid); + inactiveList.add(new ManagementServerHostVO(orphanMsid, 0, "orphan", 0, new Date())); } - - if(downHostList.size() > 0) - this.queueNotification(new ClusterManagerMessage(ClusterManagerMessage.MessageType.nodeRemoved, downHostList)); } else { - s_logger.info("No inactive management server node found"); + s_logger.info("We are good, no orphan management server msid in host table is found"); + } + + if(inactiveList.size() > 0) { + if(s_logger.isInfoEnabled()) { + s_logger.info("Found " + inactiveList.size() + " inactive management server node based on timestamp"); + for(ManagementServerHostVO host : inactiveList) + s_logger.info("management server node msid: " + host.getMsid() + ", name: " + host.getName() + ", service ip: " + host.getServiceIP() + ", version: " + host.getVersion()); + } + + List downHostList = new ArrayList(); + for(ManagementServerHostVO host : inactiveList) { + if(!pingManagementNode(host)) { + s_logger.warn("Management node " + host.getId() + " is detected inactive by timestamp and also not pingable"); + downHostList.add(host); + } + } + + if(downHostList.size() > 0) + this.queueNotification(new ClusterManagerMessage(ClusterManagerMessage.MessageType.nodeRemoved, downHostList)); + } else { + s_logger.info("No inactive management server node found"); } } @@ -1019,7 +1020,7 @@ public class ClusterManagerImpl implements ClusterManager { Profiler profiler = new Profiler(); profiler.start(); - + Profiler profilerQueryActiveList = new Profiler(); profilerQueryActiveList.start(); List currentList = _mshostDao.getActiveList(new Date(cutTime.getTime() - _heartbeatThreshold)); @@ -1031,13 +1032,13 @@ public class ClusterManagerImpl implements ClusterManager { List invalidatedNodeList = new ArrayList(); if(_mshostId != null) { - + if(_mshostPeerDao.countStateSeenInPeers(_mshostId, _runId, ManagementServerHost.State.Down) > 0) { String msg = "We have detected that at least one management server peer reports that this management server is down, perform active fencing to avoid split-brain situation"; s_logger.error(msg); throw new ActiveFencingException(msg); } - + // only if we have already attached to cluster, will we start to check leaving nodes for(Map.Entry entry : _activePeers.entrySet()) { @@ -1070,7 +1071,7 @@ public class ClusterManagerImpl implements ClusterManager { } } profilerSyncClusterInfo.stop(); - + Profiler profilerInvalidatedNodeList = new Profiler(); profilerInvalidatedNodeList.start(); // process invalidated node list @@ -1134,16 +1135,16 @@ public class ClusterManagerImpl implements ClusterManager { if(newNodeList.size() > 0) { this.queueNotification(new ClusterManagerMessage(ClusterManagerMessage.MessageType.nodeAdded, newNodeList)); } - + profiler.stop(); - + if(profiler.getDuration() >= this._heartbeatInterval) { if(s_logger.isDebugEnabled()) s_logger.debug("Peer scan takes too long to finish. profiler: " + profiler.toString() - + ", profilerQueryActiveList: " + profilerQueryActiveList.toString() - + ", profilerSyncClusterInfo: " + profilerSyncClusterInfo.toString() - + ", profilerInvalidatedNodeList: " + profilerInvalidatedNodeList.toString() - + ", profilerRemovedList: " + profilerRemovedList.toString()); + + ", profilerQueryActiveList: " + profilerQueryActiveList.toString() + + ", profilerSyncClusterInfo: " + profilerSyncClusterInfo.toString() + + ", profilerInvalidatedNodeList: " + profilerInvalidatedNodeList.toString() + + ", profilerRemovedList: " + profilerRemovedList.toString()); } } @@ -1206,7 +1207,7 @@ public class ClusterManagerImpl implements ClusterManager { if (s_logger.isInfoEnabled()) { s_logger.info("Management server (host id : " + _mshostId + ") is being started at " + _clusterNodeIP + ":" + _currentServiceAdapter.getServicePort()); } - + _mshostPeerDao.clearPeerInfo(_mshostId); // use seperate thread for heartbeat updates @@ -1294,8 +1295,8 @@ public class ClusterManagerImpl implements ClusterManager { } for(int i = 0; i < DEFAULT_OUTGOING_WORKERS; i++) - _executor.execute(getClusterPduSendingTask()); - + _executor.execute(getClusterPduSendingTask()); + // notification task itself in turn works as a task dispatcher _executor.execute(getClusterPduNotificationTask()); @@ -1309,9 +1310,9 @@ public class ClusterManagerImpl implements ClusterManager { } _agentLBEnabled = Boolean.valueOf(_configDao.getValue(Config.AgentLbEnable.key())); - + String connectedAgentsThreshold = configs.get("agent.load.threshold"); - + if (connectedAgentsThreshold != null) { _connectedAgentsThreshold = Double.parseDouble(connectedAgentsThreshold); } @@ -1365,7 +1366,7 @@ public class ClusterManagerImpl implements ClusterManager { s_logger.info("ping management node cluster service can not be performed on self"); return false; } - + int retry = 10; while (--retry > 0) { SocketChannel sch = null; @@ -1381,7 +1382,7 @@ public class ClusterManagerImpl implements ClusterManager { } catch (IOException e) { if (e instanceof ConnectException) { s_logger.error("Unable to ping management server at " + targetIp + ":" + mshost.getServicePort() + " due to ConnectException", e); - return false; + return false; } } finally { if (sch != null) { @@ -1397,7 +1398,7 @@ public class ClusterManagerImpl implements ClusterManager { } catch (InterruptedException ex) { } } - + s_logger.error("Unable to ping management server at " + targetIp + ":" + mshost.getServicePort() + " after retries"); return false; } @@ -1455,7 +1456,7 @@ public class ClusterManagerImpl implements ClusterManager { public boolean isAgentRebalanceEnabled() { return _agentLBEnabled; } - + @Override public Boolean propagateResourceEvent(long agentId, ResourceState.Event event) throws AgentUnavailableException { final String msPeer = getPeerName(agentId); @@ -1480,7 +1481,7 @@ public class ClusterManagerImpl implements ClusterManager { return answers[0].getResult(); } - + @Override public boolean executeResourceUserRequest(long hostId, ResourceState.Event event) throws AgentUnavailableException { return _resourceMgr.executeUserRequest(hostId, event); diff --git a/server/src/com/cloud/cluster/StackMaid.java b/server/src/com/cloud/cluster/StackMaid.java deleted file mode 100644 index b84d73d4219..00000000000 --- a/server/src/com/cloud/cluster/StackMaid.java +++ /dev/null @@ -1,153 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.cluster; - -import java.util.HashMap; -import java.util.Map; - -import org.apache.log4j.Logger; - -import com.cloud.cluster.dao.StackMaidDao; -import com.cloud.cluster.dao.StackMaidDaoImpl; -import com.cloud.serializer.SerializerHelper; -import com.cloud.utils.CleanupDelegate; -import com.cloud.utils.db.Transaction; - -public class StackMaid { - protected final static Logger s_logger = Logger.getLogger(StackMaid.class); - - private static ThreadLocal threadMaid = new ThreadLocal(); - - private static long msid_setby_manager = 0; - - private StackMaidDao maidDao = new StackMaidDaoImpl(); - private int currentSeq = 0; - private Map context = new HashMap(); - - public static void init(long msid) { - msid_setby_manager = msid; - } - - public static StackMaid current() { - StackMaid maid = threadMaid.get(); - if(maid == null) { - maid = new StackMaid(); - threadMaid.set(maid); - } - return maid; - } - - public void registerContext(String key, Object contextObject) { - assert(!context.containsKey(key)) : "Context key has already been registered"; - context.put(key, contextObject); - } - - public Object getContext(String key) { - return context.get(key); - } - - public void expungeMaidItem(long maidId) { - // this is a bit ugly, but when it is not loaded by component locator, this is just a workable way for now - Transaction txn = Transaction.open(Transaction.CLOUD_DB); - try { - maidDao.expunge(maidId); - } finally { - txn.close(); - } - } - - public int push(String delegateClzName, Object context) { - assert(msid_setby_manager != 0) : "Fatal, make sure StackMaidManager is loaded"; - if(msid_setby_manager == 0) - s_logger.error("Fatal, make sure StackMaidManager is loaded"); - - return push(msid_setby_manager, delegateClzName, context); - } - - public int push(long currentMsid, String delegateClzName, Object context) { - int savePoint = currentSeq; - maidDao.pushCleanupDelegate(currentMsid, currentSeq++, delegateClzName, context); - return savePoint; - } - - public void pop(int savePoint) { - assert(msid_setby_manager != 0) : "Fatal, make sure StackMaidManager is loaded"; - if(msid_setby_manager == 0) - s_logger.error("Fatal, make sure StackMaidManager is loaded"); - - pop(msid_setby_manager, savePoint); - } - - public void pop() { - if(currentSeq > 0) - pop(currentSeq -1); - } - - /** - * must be called within thread context - * @param currentMsid - */ - public void pop(long currentMsid, int savePoint) { - while(currentSeq > savePoint) { - maidDao.popCleanupDelegate(currentMsid); - currentSeq--; - } - } - - public void exitCleanup() { - exitCleanup(msid_setby_manager); - } - - public void exitCleanup(long currentMsid) { - if(currentSeq > 0) { - CheckPointVO maid = null; - while((maid = maidDao.popCleanupDelegate(currentMsid)) != null) { - doCleanup(maid); - } - currentSeq = 0; - } - - context.clear(); - } - - public static boolean doCleanup(CheckPointVO maid) { - if(maid.getDelegate() != null) { - try { - Class clz = Class.forName(maid.getDelegate()); - Object delegate = clz.newInstance(); - if(delegate instanceof CleanupDelegate) { - return ((CleanupDelegate)delegate).cleanup(SerializerHelper.fromSerializedString(maid.getContext()), maid); - } else { - assert(false); - } - } catch (final ClassNotFoundException e) { - s_logger.error("Unable to load StackMaid delegate class: " + maid.getDelegate(), e); - } catch (final SecurityException e) { - s_logger.error("Security excetion when loading resource: " + maid.getDelegate()); - } catch (final IllegalArgumentException e) { - s_logger.error("Illegal argument excetion when loading resource: " + maid.getDelegate()); - } catch (final InstantiationException e) { - s_logger.error("Instantiation excetion when loading resource: " + maid.getDelegate()); - } catch (final IllegalAccessException e) { - s_logger.error("Illegal access exception when loading resource: " + maid.getDelegate()); - } - - return false; - } - return true; - } -} diff --git a/server/src/com/cloud/configuration/dao/ResourceCountDaoImpl.java b/server/src/com/cloud/configuration/dao/ResourceCountDaoImpl.java index 2c550eaaeba..26121920569 100644 --- a/server/src/com/cloud/configuration/dao/ResourceCountDaoImpl.java +++ b/server/src/com/cloud/configuration/dao/ResourceCountDaoImpl.java @@ -34,7 +34,6 @@ import com.cloud.configuration.ResourceLimit; import com.cloud.domain.dao.DomainDaoImpl; import com.cloud.exception.UnsupportedServiceException; import com.cloud.user.dao.AccountDaoImpl; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; @@ -44,90 +43,90 @@ import com.cloud.utils.db.Transaction; @Component @Local(value={ResourceCountDao.class}) public class ResourceCountDaoImpl extends GenericDaoBase implements ResourceCountDao { - private SearchBuilder TypeSearch; - - private SearchBuilder AccountSearch; - private SearchBuilder DomainSearch; - - //protected final DomainDaoImpl _domainDao = ComponentLocator.inject(DomainDaoImpl.class); - //protected final AccountDaoImpl _accountDao = ComponentLocator.inject(AccountDaoImpl.class); + private final SearchBuilder TypeSearch; - @Inject protected DomainDaoImpl _domainDao; - @Inject protected AccountDaoImpl _accountDao; + private final SearchBuilder AccountSearch; + private final SearchBuilder DomainSearch; - public ResourceCountDaoImpl() { - TypeSearch = createSearchBuilder(); - TypeSearch.and("type", TypeSearch.entity().getType(), SearchCriteria.Op.EQ); - TypeSearch.and("accountId", TypeSearch.entity().getAccountId(), SearchCriteria.Op.EQ); - TypeSearch.and("domainId", TypeSearch.entity().getDomainId(), SearchCriteria.Op.EQ); - TypeSearch.done(); - - AccountSearch = createSearchBuilder(); - AccountSearch.and("accountId", AccountSearch.entity().getAccountId(), SearchCriteria.Op.NNULL); - AccountSearch.done(); - - DomainSearch = createSearchBuilder(); - DomainSearch.and("domainId", DomainSearch.entity().getDomainId(), SearchCriteria.Op.NNULL); - DomainSearch.done(); - } - - @Override - public ResourceCountVO findByOwnerAndType(long ownerId, ResourceOwnerType ownerType, ResourceType type) { - SearchCriteria sc = TypeSearch.create(); - sc.setParameters("type", type); - - if (ownerType == ResourceOwnerType.Account) { - sc.setParameters("accountId", ownerId); - return findOneIncludingRemovedBy(sc); - } else if (ownerType == ResourceOwnerType.Domain) { - sc.setParameters("domainId", ownerId); + //protected final DomainDaoImpl _domainDao = ComponentLocator.inject(DomainDaoImpl.class); + //protected final AccountDaoImpl _accountDao = ComponentLocator.inject(AccountDaoImpl.class); + + @Inject protected DomainDaoImpl _domainDao; + @Inject protected AccountDaoImpl _accountDao; + + public ResourceCountDaoImpl() { + TypeSearch = createSearchBuilder(); + TypeSearch.and("type", TypeSearch.entity().getType(), SearchCriteria.Op.EQ); + TypeSearch.and("accountId", TypeSearch.entity().getAccountId(), SearchCriteria.Op.EQ); + TypeSearch.and("domainId", TypeSearch.entity().getDomainId(), SearchCriteria.Op.EQ); + TypeSearch.done(); + + AccountSearch = createSearchBuilder(); + AccountSearch.and("accountId", AccountSearch.entity().getAccountId(), SearchCriteria.Op.NNULL); + AccountSearch.done(); + + DomainSearch = createSearchBuilder(); + DomainSearch.and("domainId", DomainSearch.entity().getDomainId(), SearchCriteria.Op.NNULL); + DomainSearch.done(); + } + + @Override + public ResourceCountVO findByOwnerAndType(long ownerId, ResourceOwnerType ownerType, ResourceType type) { + SearchCriteria sc = TypeSearch.create(); + sc.setParameters("type", type); + + if (ownerType == ResourceOwnerType.Account) { + sc.setParameters("accountId", ownerId); return findOneIncludingRemovedBy(sc); - } else { - return null; - } - } - - @Override - public long getResourceCount(long ownerId, ResourceOwnerType ownerType, ResourceType type) { - ResourceCountVO vo = findByOwnerAndType(ownerId, ownerType, type); - if (vo != null) { - return vo.getCount(); - } else { - return 0; - } - } - - @Override - public void setResourceCount(long ownerId, ResourceOwnerType ownerType, ResourceType type, long count) { - ResourceCountVO resourceCountVO = findByOwnerAndType(ownerId, ownerType, type); + } else if (ownerType == ResourceOwnerType.Domain) { + sc.setParameters("domainId", ownerId); + return findOneIncludingRemovedBy(sc); + } else { + return null; + } + } + + @Override + public long getResourceCount(long ownerId, ResourceOwnerType ownerType, ResourceType type) { + ResourceCountVO vo = findByOwnerAndType(ownerId, ownerType, type); + if (vo != null) { + return vo.getCount(); + } else { + return 0; + } + } + + @Override + public void setResourceCount(long ownerId, ResourceOwnerType ownerType, ResourceType type, long count) { + ResourceCountVO resourceCountVO = findByOwnerAndType(ownerId, ownerType, type); if (count != resourceCountVO.getCount()) { resourceCountVO.setCount(count); update(resourceCountVO.getId(), resourceCountVO); } - } + } - @Override @Deprecated - public void updateDomainCount(long domainId, ResourceType type, boolean increment, long delta) { - delta = increment ? delta : delta * -1; + @Override @Deprecated + public void updateDomainCount(long domainId, ResourceType type, boolean increment, long delta) { + delta = increment ? delta : delta * -1; ResourceCountVO resourceCountVO = findByOwnerAndType(domainId, ResourceOwnerType.Domain, type); - resourceCountVO.setCount(resourceCountVO.getCount() + delta); - update(resourceCountVO.getId(), resourceCountVO); - } - - @Override - public boolean updateById(long id, boolean increment, long delta) { - delta = increment ? delta : delta * -1; - - ResourceCountVO resourceCountVO = findById(id); - resourceCountVO.setCount(resourceCountVO.getCount() + delta); - return update(resourceCountVO.getId(), resourceCountVO); - } - - @Override - public Set listRowsToUpdateForDomain(long domainId, ResourceType type) { - Set rowIds = new HashSet(); - Set domainIdsToUpdate = _domainDao.getDomainParentIds(domainId); + resourceCountVO.setCount(resourceCountVO.getCount() + delta); + update(resourceCountVO.getId(), resourceCountVO); + } + + @Override + public boolean updateById(long id, boolean increment, long delta) { + delta = increment ? delta : delta * -1; + + ResourceCountVO resourceCountVO = findById(id); + resourceCountVO.setCount(resourceCountVO.getCount() + delta); + return update(resourceCountVO.getId(), resourceCountVO); + } + + @Override + public Set listRowsToUpdateForDomain(long domainId, ResourceType type) { + Set rowIds = new HashSet(); + Set domainIdsToUpdate = _domainDao.getDomainParentIds(domainId); for (Long domainIdToUpdate : domainIdsToUpdate) { ResourceCountVO domainCountRecord = findByOwnerAndType(domainIdToUpdate, ResourceOwnerType.Domain, type); if (domainCountRecord != null) { @@ -135,34 +134,34 @@ public class ResourceCountDaoImpl extends GenericDaoBase } } return rowIds; - } - - @Override - public Set listAllRowsToUpdate(long ownerId, ResourceOwnerType ownerType, ResourceType type) { - Set rowIds = new HashSet(); - - if (ownerType == ResourceOwnerType.Account) { - //get records for account - ResourceCountVO accountCountRecord = findByOwnerAndType(ownerId, ResourceOwnerType.Account, type); - if (accountCountRecord != null) { - rowIds.add(accountCountRecord.getId()); - } - - //get records for account's domain and all its parent domains - rowIds.addAll(listRowsToUpdateForDomain(_accountDao.findByIdIncludingRemoved(ownerId).getDomainId(),type)); - } else if (ownerType == ResourceOwnerType.Domain) { - return listRowsToUpdateForDomain(ownerId, type); - } - - return rowIds; - } - - @Override @DB + } + + @Override + public Set listAllRowsToUpdate(long ownerId, ResourceOwnerType ownerType, ResourceType type) { + Set rowIds = new HashSet(); + + if (ownerType == ResourceOwnerType.Account) { + //get records for account + ResourceCountVO accountCountRecord = findByOwnerAndType(ownerId, ResourceOwnerType.Account, type); + if (accountCountRecord != null) { + rowIds.add(accountCountRecord.getId()); + } + + //get records for account's domain and all its parent domains + rowIds.addAll(listRowsToUpdateForDomain(_accountDao.findByIdIncludingRemoved(ownerId).getDomainId(),type)); + } else if (ownerType == ResourceOwnerType.Domain) { + return listRowsToUpdateForDomain(ownerId, type); + } + + return rowIds; + } + + @Override @DB public void createResourceCounts(long ownerId, ResourceLimit.ResourceOwnerType ownerType){ - + Transaction txn = Transaction.currentTxn(); txn.start(); - + ResourceType[] resourceTypes = Resource.ResourceType.values(); for (ResourceType resourceType : resourceTypes) { if (!resourceType.supportsOwner(ownerType)) { @@ -171,24 +170,24 @@ public class ResourceCountDaoImpl extends GenericDaoBase ResourceCountVO resourceCountVO = new ResourceCountVO(resourceType, 0, ownerId, ownerType); persist(resourceCountVO); } - + txn.commit(); } - - private List listByDomainId(long domainId) { - SearchCriteria sc = TypeSearch.create(); + + private List listByDomainId(long domainId) { + SearchCriteria sc = TypeSearch.create(); sc.setParameters("domainId", domainId); return listBy(sc); - } - + } + private List listByAccountId(long accountId) { - SearchCriteria sc = TypeSearch.create(); + SearchCriteria sc = TypeSearch.create(); sc.setParameters("accountId", accountId); return listBy(sc); - } - + } + @Override public List listByOwnerId(long ownerId, ResourceOwnerType ownerType) { if (ownerType == ResourceOwnerType.Account) { @@ -199,26 +198,26 @@ public class ResourceCountDaoImpl extends GenericDaoBase return new ArrayList(); } } - - @Override - public List listResourceCountByOwnerType(ResourceOwnerType ownerType) { - if (ownerType == ResourceOwnerType.Account) { - return listBy(AccountSearch.create()); - } else if (ownerType == ResourceOwnerType.Domain) { - return listBy(DomainSearch.create()); - } else { - return new ArrayList(); - } - } - - @Override + + @Override + public List listResourceCountByOwnerType(ResourceOwnerType ownerType) { + if (ownerType == ResourceOwnerType.Account) { + return listBy(AccountSearch.create()); + } else if (ownerType == ResourceOwnerType.Domain) { + return listBy(DomainSearch.create()); + } else { + return new ArrayList(); + } + } + + @Override public ResourceCountVO persist(ResourceCountVO resourceCountVO){ - ResourceOwnerType ownerType = resourceCountVO.getResourceOwnerType(); - ResourceType resourceType = resourceCountVO.getType(); - if (!resourceType.supportsOwner(ownerType)) { - throw new UnsupportedServiceException("Resource type " + resourceType + " is not supported for owner of type " + ownerType.getName()); - } - + ResourceOwnerType ownerType = resourceCountVO.getResourceOwnerType(); + ResourceType resourceType = resourceCountVO.getType(); + if (!resourceType.supportsOwner(ownerType)) { + throw new UnsupportedServiceException("Resource type " + resourceType + " is not supported for owner of type " + ownerType.getName()); + } + return super.persist(resourceCountVO); } } \ No newline at end of file diff --git a/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java b/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java index a3de9466dab..a2399977ab0 100755 --- a/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java +++ b/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java @@ -49,7 +49,6 @@ import com.cloud.host.dao.HostDao; import com.cloud.info.ConsoleProxyInfo; import com.cloud.network.Network; import com.cloud.utils.NumbersUtil; -import com.cloud.utils.component.ComponentLocator; import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.ReservationContext; import com.cloud.vm.UserVmVO; @@ -87,9 +86,9 @@ public class AgentBasedConsoleProxyManager implements ConsoleProxyManager, Virtu VirtualMachineManager _itMgr; @Inject protected ConsoleProxyDao _cpDao; - + @Inject ConfigurationDao _configDao; - + public int getVncPort(VMInstanceVO vm) { if (vm.getHostId() == null) { return -1; @@ -112,7 +111,7 @@ public class AgentBasedConsoleProxyManager implements ConsoleProxyManager, Virtu if (value != null) { _consoleProxyUrlPort = NumbersUtil.parseInt(value, ConsoleProxyManager.DEFAULT_PROXY_URL_PORT); } - + value = configs.get("consoleproxy.port"); if (value != null) { _consoleProxyPort = NumbersUtil.parseInt(value, ConsoleProxyManager.DEFAULT_PROXY_VNC_PORT); @@ -126,10 +125,10 @@ public class AgentBasedConsoleProxyManager implements ConsoleProxyManager, Virtu _instance = configs.get("instance.name"); _consoleProxyUrlDomain = configs.get("consoleproxy.url.domain"); - + _listener = new ConsoleProxyListener(this); _agentMgr.registerForHostEvents(_listener, true, true, false); - + _itMgr.registerGuru(VirtualMachine.Type.ConsoleProxy, this); if (s_logger.isInfoEnabled()) { @@ -177,20 +176,20 @@ public class AgentBasedConsoleProxyManager implements ConsoleProxyManager, Virtu } publicIp = host.getPrivateIpAddress(); } - + int urlPort = _consoleProxyUrlPort; if (host.getProxyPort() != null && host.getProxyPort().intValue() > 0) { urlPort = host.getProxyPort().intValue(); } - + return new ConsoleProxyInfo(_sslEnabled, publicIp, _consoleProxyPort, urlPort, _consoleProxyUrlDomain); } else { s_logger.warn("Host that VM is running is no longer available, console access to VM " + userVmId + " will be temporarily unavailable."); } return null; } - + @Override public void onLoadReport(ConsoleProxyLoadReportCommand cmd) { } @@ -273,16 +272,16 @@ public class AgentBasedConsoleProxyManager implements ConsoleProxyManager, Virtu @Override public void setManagementState(ConsoleProxyManagementState state) { } - + @Override public ConsoleProxyManagementState getManagementState() { - return null; + return null; } - + @Override public void resumeLastManagementState() { } - + @Override public void startAgentHttpHandlerInVM(StartupProxyCommand startupCmd) { } @@ -299,7 +298,7 @@ public class AgentBasedConsoleProxyManager implements ConsoleProxyManager, Virtu } return VirtualMachineName.getConsoleProxyId(vmName); } - + @Override public ConsoleProxyVO findByName(String name) { // TODO Auto-generated method stub @@ -329,7 +328,7 @@ public class AgentBasedConsoleProxyManager implements ConsoleProxyManager, Virtu // TODO Auto-generated method stub return false; } - + @Override public boolean finalizeCommandsOnStart(Commands cmds, VirtualMachineProfile profile) { // TODO Auto-generated method stub @@ -346,7 +345,7 @@ public class AgentBasedConsoleProxyManager implements ConsoleProxyManager, Virtu public void finalizeStop(VirtualMachineProfile profile, StopAnswer answer) { // TODO Auto-generated method stub } - + @Override public void finalizeExpunge(ConsoleProxyVO proxy) { } @@ -366,7 +365,7 @@ public class AgentBasedConsoleProxyManager implements ConsoleProxyManager, Virtu //not supported throw new UnsupportedOperationException("Unplug nic is not supported for vm of type " + vm.getType()); } - + @Override public void prepareStop(VirtualMachineProfile profile) { } diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyBalanceAllocator.java b/server/src/com/cloud/consoleproxy/ConsoleProxyBalanceAllocator.java index 84f6faca7ab..0a045eb9602 100644 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyBalanceAllocator.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyBalanceAllocator.java @@ -27,9 +27,6 @@ import javax.naming.ConfigurationException; import org.springframework.stereotype.Component; -import com.cloud.configuration.dao.ConfigurationDao; -import com.cloud.utils.NumbersUtil; -import com.cloud.utils.component.ComponentLocator; import com.cloud.vm.ConsoleProxyVO; import edu.emory.mathcs.backport.java.util.Collections; @@ -37,45 +34,45 @@ import edu.emory.mathcs.backport.java.util.Collections; @Component @Local(value={ConsoleProxyAllocator.class}) public class ConsoleProxyBalanceAllocator implements ConsoleProxyAllocator { - + private String _name; private final Random _rand = new Random(System.currentTimeMillis()); - - @Override - public ConsoleProxyVO allocProxy(List candidates, final Map loadInfo, long dataCenterId) { - if(candidates != null) { - - List allocationList = new ArrayList(); - for(ConsoleProxyVO proxy : candidates) { - allocationList.add(proxy); - } - - Collections.sort(candidates, new Comparator () { - @Override - public int compare(ConsoleProxyVO x, ConsoleProxyVO y) { - Integer loadOfX = loadInfo.get(x.getId()); - Integer loadOfY = loadInfo.get(y.getId()); - if(loadOfX != null && loadOfY != null) { - if(loadOfX < loadOfY) - return -1; - else if(loadOfX > loadOfY) - return 1; - return 0; - } else if(loadOfX == null && loadOfY == null) { - return 0; - } else { - if(loadOfX == null) - return -1; - return 1; - } - } - }); - - if(allocationList.size() > 0) - return allocationList.get(0); - } - return null; + @Override + public ConsoleProxyVO allocProxy(List candidates, final Map loadInfo, long dataCenterId) { + if(candidates != null) { + + List allocationList = new ArrayList(); + for(ConsoleProxyVO proxy : candidates) { + allocationList.add(proxy); + } + + Collections.sort(candidates, new Comparator () { + @Override + public int compare(ConsoleProxyVO x, ConsoleProxyVO y) { + Integer loadOfX = loadInfo.get(x.getId()); + Integer loadOfY = loadInfo.get(y.getId()); + + if(loadOfX != null && loadOfY != null) { + if(loadOfX < loadOfY) + return -1; + else if(loadOfX > loadOfY) + return 1; + return 0; + } else if(loadOfX == null && loadOfY == null) { + return 0; + } else { + if(loadOfX == null) + return -1; + return 1; + } + } + }); + + if(allocationList.size() > 0) + return allocationList.get(0); + } + return null; } @Override @@ -83,7 +80,7 @@ public class ConsoleProxyBalanceAllocator implements ConsoleProxyAllocator { _name = name; return true; } - + @Override public String getName() { return _name; diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index 6ceeb5f5ebe..353ef731ba4 100755 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -19,7 +19,6 @@ package com.cloud.consoleproxy; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Date; -import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -32,6 +31,7 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; import javax.persistence.Table; +import org.apache.cloudstack.api.ServerApiException; import org.apache.log4j.Logger; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; @@ -55,7 +55,6 @@ import com.cloud.agent.api.proxy.StartConsoleProxyAgentHttpHandlerCommand; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.VirtualMachineTO; import com.cloud.agent.manager.Commands; -import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.commands.DestroyConsoleProxyCmd; import com.cloud.certificate.dao.CertificateDao; import com.cloud.cluster.ClusterManager; @@ -128,8 +127,6 @@ import com.cloud.utils.DateUtil; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; -import com.cloud.utils.component.Adapters; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.Manager; import com.cloud.utils.db.DB; import com.cloud.utils.db.GlobalLock; @@ -236,7 +233,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx RulesManager _rulesMgr; @Inject IPAddressDao _ipAddressDao; - + private ConsoleProxyListener _listener; private ServiceOfferingVO _serviceOffering; @@ -269,7 +266,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx private Map _zoneHostInfoMap; // map private Map _zoneProxyCountMap; // map private Map _zoneVmCountMap; // map - + private String _hashKey; private String _staticPublicIp; private int _staticPort; @@ -478,9 +475,9 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx assert (ksVo != null); if (_staticPublicIp == null) { - return new ConsoleProxyInfo(proxy.isSslEnabled(), proxy.getPublicIpAddress(), _consoleProxyPort, proxy.getPort(), ksVo.getDomainSuffix()); + return new ConsoleProxyInfo(proxy.isSslEnabled(), proxy.getPublicIpAddress(), _consoleProxyPort, proxy.getPort(), ksVo.getDomainSuffix()); } else { - return new ConsoleProxyInfo(proxy.isSslEnabled(), _staticPublicIp, _consoleProxyPort, _staticPort, ksVo.getDomainSuffix()); + return new ConsoleProxyInfo(proxy.isSslEnabled(), _staticPublicIp, _consoleProxyPort, _staticPort, ksVo.getDomainSuffix()); } } @@ -809,10 +806,10 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx private ConsoleProxyAllocator getCurrentAllocator() { // for now, only one adapter is supported - for(ConsoleProxyAllocator allocator : _consoleProxyAllocators) { - return allocator; - } - + for(ConsoleProxyAllocator allocator : _consoleProxyAllocators) { + return allocator; + } + return null; } @@ -903,26 +900,26 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx } if(!cmd.isReauthenticating()) { - String ticket = ConsoleProxyServlet.genAccessTicket(cmd.getHost(), cmd.getPort(), cmd.getSid(), cmd.getVmId()); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Console authentication. Ticket in 1 minute boundary for " + cmd.getHost() + ":" + cmd.getPort() + "-" + cmd.getVmId() + " is " + ticket); - } - - if (!ticket.equals(ticketInUrl)) { - Date now = new Date(); - // considering of minute round-up - String minuteEarlyTicket = ConsoleProxyServlet.genAccessTicket(cmd.getHost(), cmd.getPort(), cmd.getSid(), cmd.getVmId(), new Date(now.getTime() - 60 * 1000)); - - if (s_logger.isDebugEnabled()) { - s_logger.debug("Console authentication. Ticket in 2-minute boundary for " + cmd.getHost() + ":" + cmd.getPort() + "-" + cmd.getVmId() + " is " + minuteEarlyTicket); - } - - if (!minuteEarlyTicket.equals(ticketInUrl)) { - s_logger.error("Access ticket expired or has been modified. vmId: " + cmd.getVmId() + "ticket in URL: " + ticketInUrl + ", tickets to check against: " + ticket + "," - + minuteEarlyTicket); - return new ConsoleAccessAuthenticationAnswer(cmd, false); - } - } + String ticket = ConsoleProxyServlet.genAccessTicket(cmd.getHost(), cmd.getPort(), cmd.getSid(), cmd.getVmId()); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Console authentication. Ticket in 1 minute boundary for " + cmd.getHost() + ":" + cmd.getPort() + "-" + cmd.getVmId() + " is " + ticket); + } + + if (!ticket.equals(ticketInUrl)) { + Date now = new Date(); + // considering of minute round-up + String minuteEarlyTicket = ConsoleProxyServlet.genAccessTicket(cmd.getHost(), cmd.getPort(), cmd.getSid(), cmd.getVmId(), new Date(now.getTime() - 60 * 1000)); + + if (s_logger.isDebugEnabled()) { + s_logger.debug("Console authentication. Ticket in 2-minute boundary for " + cmd.getHost() + ":" + cmd.getPort() + "-" + cmd.getVmId() + " is " + minuteEarlyTicket); + } + + if (!minuteEarlyTicket.equals(ticketInUrl)) { + s_logger.error("Access ticket expired or has been modified. vmId: " + cmd.getVmId() + "ticket in URL: " + ticketInUrl + ", tickets to check against: " + ticket + "," + + minuteEarlyTicket); + return new ConsoleAccessAuthenticationAnswer(cmd, false); + } + } } if (cmd.getVmId() != null && cmd.getVmId().isEmpty()) { @@ -959,38 +956,38 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx s_logger.warn("sid " + sid + " in url does not match stored sid " + vm.getVncPassword()); return new ConsoleAccessAuthenticationAnswer(cmd, false); } - + if(cmd.isReauthenticating()) { ConsoleAccessAuthenticationAnswer authenticationAnswer = new ConsoleAccessAuthenticationAnswer(cmd, true); authenticationAnswer.setReauthenticating(true); s_logger.info("Re-authentication request, ask host " + vm.getHostId() + " for new console info"); - GetVncPortAnswer answer = (GetVncPortAnswer) _agentMgr.easySend(vm.getHostId(), new - GetVncPortCommand(vm.getId(), vm.getInstanceName())); + GetVncPortAnswer answer = (GetVncPortAnswer) _agentMgr.easySend(vm.getHostId(), new + GetVncPortCommand(vm.getId(), vm.getInstanceName())); if (answer != null && answer.getResult()) { - Ternary parsedHostInfo = ConsoleProxyServlet.parseHostInfo(answer.getAddress()); - - if(parsedHostInfo.second() != null && parsedHostInfo.third() != null) { - + Ternary parsedHostInfo = ConsoleProxyServlet.parseHostInfo(answer.getAddress()); + + if(parsedHostInfo.second() != null && parsedHostInfo.third() != null) { + s_logger.info("Re-authentication result. vm: " + vm.getId() + ", tunnel url: " + parsedHostInfo.second() - + ", tunnel session: " + parsedHostInfo.third()); - - authenticationAnswer.setTunnelUrl(parsedHostInfo.second()); - authenticationAnswer.setTunnelSession(parsedHostInfo.third()); - } else { + + ", tunnel session: " + parsedHostInfo.third()); + + authenticationAnswer.setTunnelUrl(parsedHostInfo.second()); + authenticationAnswer.setTunnelSession(parsedHostInfo.third()); + } else { s_logger.info("Re-authentication result. vm: " + vm.getId() + ", host address: " + parsedHostInfo.first() - + ", port: " + answer.getPort()); - - authenticationAnswer.setHost(parsedHostInfo.first()); - authenticationAnswer.setPort(answer.getPort()); - } + + ", port: " + answer.getPort()); + + authenticationAnswer.setHost(parsedHostInfo.first()); + authenticationAnswer.setPort(answer.getPort()); + } } else { s_logger.warn("Re-authentication request failed"); - - authenticationAnswer.setSuccess(false); + + authenticationAnswer.setSuccess(false); } - + return authenticationAnswer; } @@ -1198,11 +1195,11 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx } } else { if (s_logger.isDebugEnabled()) { - if (secondaryStorageHost != null) { - s_logger.debug("Zone host is ready, but console proxy template: " + template.getId() + " is not ready on secondary storage: " + secondaryStorageHost.getId()); - } else { - s_logger.debug("Zone host is ready, but console proxy template: " + template.getId() + " is not ready on secondary storage."); - } + if (secondaryStorageHost != null) { + s_logger.debug("Zone host is ready, but console proxy template: " + template.getId() + " is not ready on secondary storage: " + secondaryStorageHost.getId()); + } else { + s_logger.debug("Zone host is ready, but console proxy template: " + template.getId() + " is not ready on secondary storage."); + } } } } @@ -1411,7 +1408,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx result = result && _hostDao.remove(host.getId()); } } - + return result; } catch (ResourceUnavailableException e) { s_logger.warn("Unable to expunge " + proxy, e); @@ -1514,11 +1511,11 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx _itMgr.registerGuru(VirtualMachine.Type.ConsoleProxy, this); boolean useLocalStorage = Boolean.parseBoolean(configs.get(Config.SystemVMUseLocalStorage.key())); - + //check if there is a default service offering configured String cpvmSrvcOffIdStr = configs.get(Config.ConsoleProxyServiceOffering.key()); if (cpvmSrvcOffIdStr != null) { - + Long cpvmSrvcOffId = null; try { cpvmSrvcOffId = _identityDao.getIdentityId(DiskOfferingVO.class.getAnnotation(Table.class).name(),cpvmSrvcOffIdStr); @@ -1532,8 +1529,8 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx } if(_serviceOffering == null || !_serviceOffering.getSystemUse()){ - int ramSize = NumbersUtil.parseInt(_configDao.getValue("console.ram.size"), DEFAULT_PROXY_VM_RAMSIZE); - int cpuFreq = NumbersUtil.parseInt(_configDao.getValue("console.cpu.mhz"), DEFAULT_PROXY_VM_CPUMHZ); + int ramSize = NumbersUtil.parseInt(_configDao.getValue("console.ram.size"), DEFAULT_PROXY_VM_RAMSIZE); + int cpuFreq = NumbersUtil.parseInt(_configDao.getValue("console.cpu.mhz"), DEFAULT_PROXY_VM_CPUMHZ); _serviceOffering = new ServiceOfferingVO("System Offering For Console Proxy", 1, ramSize, cpuFreq, 0, 0, false, null, useLocalStorage, true, null, true, VirtualMachine.Type.ConsoleProxy, true); _serviceOffering.setUniqueName(ServiceOffering.consoleProxyDefaultOffUniqueName); _serviceOffering = _offeringDao.persistSystemServiceOffering(_serviceOffering); @@ -1552,7 +1549,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx _staticPublicIp = _configDao.getValue("consoleproxy.static.publicIp"); if (_staticPublicIp != null) { - _staticPort = NumbersUtil.parseInt(_configDao.getValue("consoleproxy.static.port"), 8443); + _staticPort = NumbersUtil.parseInt(_configDao.getValue("consoleproxy.static.port"), 8443); } if (s_logger.isInfoEnabled()) { @@ -2011,7 +2008,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx sc.addAnd(sc.getEntity().getName(), Op.EQ, name); return sc.find(); } - + public String getHashKey() { // although we may have race conditioning here, database transaction serialization should // give us the same key @@ -2036,8 +2033,8 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx //not supported throw new UnsupportedOperationException("Unplug nic is not supported for vm of type " + vm.getType()); } - - @Override - public void prepareStop(VirtualMachineProfile profile) { - } + + @Override + public void prepareStop(VirtualMachineProfile profile) { + } } diff --git a/server/src/com/cloud/consoleproxy/StaticConsoleProxyManager.java b/server/src/com/cloud/consoleproxy/StaticConsoleProxyManager.java index c28a2e498e3..13d3112c827 100755 --- a/server/src/com/cloud/consoleproxy/StaticConsoleProxyManager.java +++ b/server/src/com/cloud/consoleproxy/StaticConsoleProxyManager.java @@ -30,7 +30,6 @@ import com.cloud.host.Host.Type; import com.cloud.host.HostVO; import com.cloud.info.ConsoleProxyInfo; import com.cloud.resource.ResourceManager; -import com.cloud.utils.component.ComponentLocator; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.dao.ConsoleProxyDao; @@ -41,31 +40,31 @@ public class StaticConsoleProxyManager extends AgentBasedConsoleProxyManager imp @Inject ConsoleProxyDao _proxyDao; @Inject ResourceManager _resourceMgr; @Inject ConfigurationDao _configDao; - + @Override protected HostVO findHost(VMInstanceVO vm) { - + List hosts = _resourceMgr.listAllUpAndEnabledHostsInOneZoneByType(Type.ConsoleProxy, vm.getDataCenterIdToDeployIn()); - + return hosts.isEmpty() ? null : hosts.get(0); } - + @Override public ConsoleProxyInfo assignProxy(long dataCenterId, long userVmId) { return new ConsoleProxyInfo(false, _ip, _consoleProxyPort, _consoleProxyUrlPort, _consoleProxyUrlDomain); } - + @Override public boolean configure(String name, Map params) throws ConfigurationException { super.configure(name, params); - + Map dbParams = _configDao.getConfiguration("ManagementServer", params); - + _ip = dbParams.get("public.ip"); if (_ip == null) { _ip = "127.0.0.1"; } - + return true; } } diff --git a/server/src/com/cloud/dc/dao/ClusterDaoImpl.java b/server/src/com/cloud/dc/dao/ClusterDaoImpl.java index f06b24daae5..86dc65e05bd 100644 --- a/server/src/com/cloud/dc/dao/ClusterDaoImpl.java +++ b/server/src/com/cloud/dc/dao/ClusterDaoImpl.java @@ -33,7 +33,6 @@ import com.cloud.dc.ClusterVO; import com.cloud.dc.HostPodVO; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.org.Grouping; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericSearchBuilder; import com.cloud.utils.db.JoinBuilder; @@ -53,73 +52,73 @@ public class ClusterDaoImpl extends GenericDaoBase implements C protected final SearchBuilder AvailHyperSearch; protected final SearchBuilder ZoneSearch; protected final SearchBuilder ZoneHyTypeSearch; - + private static final String GET_POD_CLUSTER_MAP_PREFIX = "SELECT pod_id, id FROM cloud.cluster WHERE cluster.id IN( "; private static final String GET_POD_CLUSTER_MAP_SUFFIX = " )"; @Inject protected HostPodDao _hostPodDao; - + public ClusterDaoImpl() { super(); - + HyTypeWithoutGuidSearch = createSearchBuilder(); HyTypeWithoutGuidSearch.and("hypervisorType", HyTypeWithoutGuidSearch.entity().getHypervisorType(), SearchCriteria.Op.EQ); HyTypeWithoutGuidSearch.and("guid", HyTypeWithoutGuidSearch.entity().getGuid(), SearchCriteria.Op.NULL); HyTypeWithoutGuidSearch.done(); - + ZoneHyTypeSearch = createSearchBuilder(); ZoneHyTypeSearch.and("hypervisorType", ZoneHyTypeSearch.entity().getHypervisorType(), SearchCriteria.Op.EQ); ZoneHyTypeSearch.and("dataCenterId", ZoneHyTypeSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); ZoneHyTypeSearch.done(); - + PodSearch = createSearchBuilder(); PodSearch.and("pod", PodSearch.entity().getPodId(), SearchCriteria.Op.EQ); PodSearch.and("name", PodSearch.entity().getName(), SearchCriteria.Op.EQ); PodSearch.done(); - + ZoneSearch = createSearchBuilder(); ZoneSearch.and("dataCenterId", ZoneSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); ZoneSearch.groupBy(ZoneSearch.entity().getHypervisorType()); ZoneSearch.done(); - + AvailHyperSearch = createSearchBuilder(); AvailHyperSearch.and("zoneId", AvailHyperSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); AvailHyperSearch.select(null, Func.DISTINCT, AvailHyperSearch.entity().getHypervisorType()); AvailHyperSearch.done(); } - + @Override public List listByZoneId(long zoneId) { SearchCriteria sc = ZoneSearch.create(); sc.setParameters("dataCenterId", zoneId); return listBy(sc); } - + @Override public List listByPodId(long podId) { SearchCriteria sc = PodSearch.create(); sc.setParameters("pod", podId); - + return listBy(sc); } - + @Override public ClusterVO findBy(String name, long podId) { SearchCriteria sc = PodSearch.create(); sc.setParameters("pod", podId); sc.setParameters("name", name); - + return findOneBy(sc); } - + @Override public List listByHyTypeWithoutGuid(String hyType) { SearchCriteria sc = HyTypeWithoutGuidSearch.create(); sc.setParameters("hypervisorType", hyType); - + return listBy(sc); } - + @Override public List listByDcHyType(long dcId, String hyType) { SearchCriteria sc = ZoneHyTypeSearch.create(); @@ -127,7 +126,7 @@ public class ClusterDaoImpl extends GenericDaoBase implements C sc.setParameters("hypervisorType", hyType); return listBy(sc); } - + @Override public List getAvailableHypervisorInZone(Long zoneId) { SearchCriteria sc = AvailHyperSearch.create(); @@ -139,13 +138,13 @@ public class ClusterDaoImpl extends GenericDaoBase implements C for (ClusterVO cluster : clusters) { hypers.add(cluster.getHypervisorType()); } - + return hypers; } - + @Override public Map> getPodClusterIdMap(List clusterIds){ - Transaction txn = Transaction.currentTxn(); + Transaction txn = Transaction.currentTxn(); PreparedStatement pstmt = null; Map> result = new HashMap>(); @@ -158,20 +157,20 @@ public class ClusterDaoImpl extends GenericDaoBase implements C sql.delete(sql.length()-1, sql.length()); sql.append(GET_POD_CLUSTER_MAP_SUFFIX); } - + pstmt = txn.prepareAutoCloseStatement(sql.toString()); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { - Long podId = rs.getLong(1); - Long clusterIdInPod = rs.getLong(2); + Long podId = rs.getLong(1); + Long clusterIdInPod = rs.getLong(2); if(result.containsKey(podId)){ - List clusterList = result.get(podId); - clusterList.add(clusterIdInPod); - result.put(podId, clusterList); + List clusterList = result.get(podId); + clusterList.add(clusterIdInPod); + result.put(podId, clusterList); }else{ - List clusterList = new ArrayList(); - clusterList.add(clusterIdInPod); - result.put(podId, clusterList); + List clusterList = new ArrayList(); + clusterList.add(clusterIdInPod); + result.put(podId, clusterList); } } return result; @@ -181,49 +180,49 @@ public class ClusterDaoImpl extends GenericDaoBase implements C throw new CloudRuntimeException("Caught: " + GET_POD_CLUSTER_MAP_PREFIX, e); } } - + @Override public List listDisabledClusters(long zoneId, Long podId) { - GenericSearchBuilder clusterIdSearch = createSearchBuilder(Long.class); - clusterIdSearch.selectField(clusterIdSearch.entity().getId()); - clusterIdSearch.and("dataCenterId", clusterIdSearch.entity().getDataCenterId(), Op.EQ); - if(podId != null){ - clusterIdSearch.and("podId", clusterIdSearch.entity().getPodId(), Op.EQ); - } - clusterIdSearch.and("allocationState", clusterIdSearch.entity().getAllocationState(), Op.EQ); - clusterIdSearch.done(); + GenericSearchBuilder clusterIdSearch = createSearchBuilder(Long.class); + clusterIdSearch.selectField(clusterIdSearch.entity().getId()); + clusterIdSearch.and("dataCenterId", clusterIdSearch.entity().getDataCenterId(), Op.EQ); + if(podId != null){ + clusterIdSearch.and("podId", clusterIdSearch.entity().getPodId(), Op.EQ); + } + clusterIdSearch.and("allocationState", clusterIdSearch.entity().getAllocationState(), Op.EQ); + clusterIdSearch.done(); - - SearchCriteria sc = clusterIdSearch.create(); + + SearchCriteria sc = clusterIdSearch.create(); sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId); if (podId != null) { - sc.addAnd("podId", SearchCriteria.Op.EQ, podId); - } + sc.addAnd("podId", SearchCriteria.Op.EQ, podId); + } sc.addAnd("allocationState", SearchCriteria.Op.EQ, Grouping.AllocationState.Disabled); return customSearch(sc, null); } @Override public List listClustersWithDisabledPods(long zoneId) { - - GenericSearchBuilder disabledPodIdSearch = _hostPodDao.createSearchBuilder(Long.class); - disabledPodIdSearch.selectField(disabledPodIdSearch.entity().getId()); - disabledPodIdSearch.and("dataCenterId", disabledPodIdSearch.entity().getDataCenterId(), Op.EQ); - disabledPodIdSearch.and("allocationState", disabledPodIdSearch.entity().getAllocationState(), Op.EQ); - GenericSearchBuilder clusterIdSearch = createSearchBuilder(Long.class); - clusterIdSearch.selectField(clusterIdSearch.entity().getId()); - clusterIdSearch.join("disabledPodIdSearch", disabledPodIdSearch, clusterIdSearch.entity().getPodId(), disabledPodIdSearch.entity().getId(), JoinBuilder.JoinType.INNER); - clusterIdSearch.done(); + GenericSearchBuilder disabledPodIdSearch = _hostPodDao.createSearchBuilder(Long.class); + disabledPodIdSearch.selectField(disabledPodIdSearch.entity().getId()); + disabledPodIdSearch.and("dataCenterId", disabledPodIdSearch.entity().getDataCenterId(), Op.EQ); + disabledPodIdSearch.and("allocationState", disabledPodIdSearch.entity().getAllocationState(), Op.EQ); - - SearchCriteria sc = clusterIdSearch.create(); + GenericSearchBuilder clusterIdSearch = createSearchBuilder(Long.class); + clusterIdSearch.selectField(clusterIdSearch.entity().getId()); + clusterIdSearch.join("disabledPodIdSearch", disabledPodIdSearch, clusterIdSearch.entity().getPodId(), disabledPodIdSearch.entity().getId(), JoinBuilder.JoinType.INNER); + clusterIdSearch.done(); + + + SearchCriteria sc = clusterIdSearch.create(); sc.setJoinParameters("disabledPodIdSearch", "dataCenterId", zoneId); sc.setJoinParameters("disabledPodIdSearch", "allocationState", Grouping.AllocationState.Disabled); - + return customSearch(sc, null); } - + @Override public boolean remove(Long id) { Transaction txn = Transaction.currentTxn(); @@ -231,7 +230,7 @@ public class ClusterDaoImpl extends GenericDaoBase implements C ClusterVO cluster = createForUpdate(); cluster.setName(null); cluster.setGuid(null); - + update(id, cluster); boolean result = super.remove(id); diff --git a/server/src/com/cloud/dc/dao/HostPodDaoImpl.java b/server/src/com/cloud/dc/dao/HostPodDaoImpl.java index a06bd3fe10a..4844d028aee 100644 --- a/server/src/com/cloud/dc/dao/HostPodDaoImpl.java +++ b/server/src/com/cloud/dc/dao/HostPodDaoImpl.java @@ -24,6 +24,7 @@ import java.util.HashMap; import java.util.List; import javax.ejb.Local; +import javax.inject.Inject; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -37,7 +38,6 @@ import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.db.Transaction; -import com.cloud.utils.component.ComponentLocator; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.dao.VMInstanceDaoImpl; @@ -46,32 +46,32 @@ import com.cloud.vm.dao.VMInstanceDaoImpl; @Local(value={HostPodDao.class}) public class HostPodDaoImpl extends GenericDaoBase implements HostPodDao { private static final Logger s_logger = Logger.getLogger(HostPodDaoImpl.class); - - protected SearchBuilder DataCenterAndNameSearch; - protected SearchBuilder DataCenterIdSearch; - - protected HostPodDaoImpl() { - DataCenterAndNameSearch = createSearchBuilder(); - DataCenterAndNameSearch.and("dc", DataCenterAndNameSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); - DataCenterAndNameSearch.and("name", DataCenterAndNameSearch.entity().getName(), SearchCriteria.Op.EQ); - DataCenterAndNameSearch.done(); - - DataCenterIdSearch = createSearchBuilder(); - DataCenterIdSearch.and("dcId", DataCenterIdSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); - DataCenterIdSearch.done(); - } - - @Override + @Inject VMInstanceDaoImpl _vmDao; + + protected SearchBuilder DataCenterAndNameSearch; + protected SearchBuilder DataCenterIdSearch; + + protected HostPodDaoImpl() { + DataCenterAndNameSearch = createSearchBuilder(); + DataCenterAndNameSearch.and("dc", DataCenterAndNameSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); + DataCenterAndNameSearch.and("name", DataCenterAndNameSearch.entity().getName(), SearchCriteria.Op.EQ); + DataCenterAndNameSearch.done(); + + DataCenterIdSearch = createSearchBuilder(); + DataCenterIdSearch.and("dcId", DataCenterIdSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); + DataCenterIdSearch.done(); + } + + @Override public List listByDataCenterId(long id) { - SearchCriteria sc = DataCenterIdSearch.create(); - sc.setParameters("dcId", id); - - return listBy(sc); - } - - @Override + SearchCriteria sc = DataCenterIdSearch.create(); + sc.setParameters("dcId", id); + + return listBy(sc); + } + + @Override public List listByDataCenterIdVMTypeAndStates(long id, VirtualMachine.Type type, VirtualMachine.State... states) { - final VMInstanceDaoImpl _vmDao = ComponentLocator.inject(VMInstanceDaoImpl.class); SearchBuilder vmInstanceSearch = _vmDao.createSearchBuilder(); vmInstanceSearch.and("type", vmInstanceSearch.entity().getType(), SearchCriteria.Op.EQ); vmInstanceSearch.and("states", vmInstanceSearch.entity().getState(), SearchCriteria.Op.IN); @@ -90,51 +90,51 @@ public class HostPodDaoImpl extends GenericDaoBase implements H return listBy(sc); } - @Override + @Override public HostPodVO findByName(String name, long dcId) { - SearchCriteria sc = DataCenterAndNameSearch.create(); - sc.setParameters("dc", dcId); - sc.setParameters("name", name); - - return findOneBy(sc); - } - - @Override - public HashMap> getCurrentPodCidrSubnets(long zoneId, long podIdToSkip) { - HashMap> currentPodCidrSubnets = new HashMap>(); - - String selectSql = "SELECT id, cidr_address, cidr_size FROM host_pod_ref WHERE data_center_id=" + zoneId +" and removed IS NULL"; - Transaction txn = Transaction.currentTxn(); - try { - PreparedStatement stmt = txn.prepareAutoCloseStatement(selectSql); - ResultSet rs = stmt.executeQuery(); - while (rs.next()) { - Long podId = rs.getLong("id"); - if (podId.longValue() == podIdToSkip) { + SearchCriteria sc = DataCenterAndNameSearch.create(); + sc.setParameters("dc", dcId); + sc.setParameters("name", name); + + return findOneBy(sc); + } + + @Override + public HashMap> getCurrentPodCidrSubnets(long zoneId, long podIdToSkip) { + HashMap> currentPodCidrSubnets = new HashMap>(); + + String selectSql = "SELECT id, cidr_address, cidr_size FROM host_pod_ref WHERE data_center_id=" + zoneId +" and removed IS NULL"; + Transaction txn = Transaction.currentTxn(); + try { + PreparedStatement stmt = txn.prepareAutoCloseStatement(selectSql); + ResultSet rs = stmt.executeQuery(); + while (rs.next()) { + Long podId = rs.getLong("id"); + if (podId.longValue() == podIdToSkip) { continue; } - String cidrAddress = rs.getString("cidr_address"); - long cidrSize = rs.getLong("cidr_size"); - List cidrPair = new ArrayList(); - cidrPair.add(0, cidrAddress); - cidrPair.add(1, new Long(cidrSize)); - currentPodCidrSubnets.put(podId, cidrPair); - } + String cidrAddress = rs.getString("cidr_address"); + long cidrSize = rs.getLong("cidr_size"); + List cidrPair = new ArrayList(); + cidrPair.add(0, cidrAddress); + cidrPair.add(1, new Long(cidrSize)); + currentPodCidrSubnets.put(podId, cidrPair); + } } catch (SQLException ex) { - s_logger.warn("DB exception " + ex.getMessage(), ex); + s_logger.warn("DB exception " + ex.getMessage(), ex); return null; } - + return currentPodCidrSubnets; - } - + } + @Override public boolean remove(Long id) { Transaction txn = Transaction.currentTxn(); txn.start(); HostPodVO pod = createForUpdate(); pod.setName(null); - + update(id, pod); boolean result = super.remove(id); @@ -150,11 +150,11 @@ public class HostPodDaoImpl extends GenericDaoBase implements H podIdSearch.and("allocationState", podIdSearch.entity().getAllocationState(), Op.EQ); podIdSearch.done(); - + SearchCriteria sc = podIdSearch.create(); sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId); sc.addAnd("allocationState", SearchCriteria.Op.EQ, Grouping.AllocationState.Disabled); return customSearch(sc, null); } - + } diff --git a/server/src/com/cloud/dc/dao/VlanDaoImpl.java b/server/src/com/cloud/dc/dao/VlanDaoImpl.java index 8fc0580aaef..c5a635fd0c0 100644 --- a/server/src/com/cloud/dc/dao/VlanDaoImpl.java +++ b/server/src/com/cloud/dc/dao/VlanDaoImpl.java @@ -36,7 +36,6 @@ import com.cloud.dc.Vlan.VlanType; import com.cloud.dc.VlanVO; import com.cloud.network.dao.IPAddressDao; import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.JoinBuilder; @@ -48,56 +47,56 @@ import com.cloud.utils.exception.CloudRuntimeException; @Component @Local(value={VlanDao.class}) public class VlanDaoImpl extends GenericDaoBase implements VlanDao { - - private final String FindZoneWideVlans = "SELECT * FROM vlan WHERE data_center_id=? and vlan_type=? and vlan_id!=? and id not in (select vlan_db_id from account_vlan_map)"; - - protected SearchBuilder ZoneVlanIdSearch; - protected SearchBuilder ZoneSearch; - protected SearchBuilder ZoneTypeSearch; - protected SearchBuilder ZoneTypeAllPodsSearch; - protected SearchBuilder ZoneTypePodSearch; - protected SearchBuilder ZoneVlanSearch; - protected SearchBuilder NetworkVlanSearch; - protected SearchBuilder PhysicalNetworkVlanSearch; - @Inject protected PodVlanMapDao _podVlanMapDao; - @Inject protected AccountVlanMapDao _accountVlanMapDao; - @Inject protected IPAddressDao _ipAddressDao; - + private final String FindZoneWideVlans = "SELECT * FROM vlan WHERE data_center_id=? and vlan_type=? and vlan_id!=? and id not in (select vlan_db_id from account_vlan_map)"; + + protected SearchBuilder ZoneVlanIdSearch; + protected SearchBuilder ZoneSearch; + protected SearchBuilder ZoneTypeSearch; + protected SearchBuilder ZoneTypeAllPodsSearch; + protected SearchBuilder ZoneTypePodSearch; + protected SearchBuilder ZoneVlanSearch; + protected SearchBuilder NetworkVlanSearch; + protected SearchBuilder PhysicalNetworkVlanSearch; + + @Inject protected PodVlanMapDao _podVlanMapDao; + @Inject protected AccountVlanMapDao _accountVlanMapDao; + @Inject protected IPAddressDao _ipAddressDao; + @Override public VlanVO findByZoneAndVlanId(long zoneId, String vlanId) { - SearchCriteria sc = ZoneVlanIdSearch.create(); - sc.setParameters("zoneId", zoneId); - sc.setParameters("vlanId", vlanId); + SearchCriteria sc = ZoneVlanIdSearch.create(); + sc.setParameters("zoneId", zoneId); + sc.setParameters("vlanId", vlanId); return findOneBy(sc); } - + @Override public List listByZone(long zoneId) { - SearchCriteria sc = ZoneSearch.create(); - sc.setParameters("zoneId", zoneId); - return listBy(sc); + SearchCriteria sc = ZoneSearch.create(); + sc.setParameters("zoneId", zoneId); + return listBy(sc); } - + public VlanDaoImpl() { - ZoneVlanIdSearch = createSearchBuilder(); - ZoneVlanIdSearch.and("zoneId", ZoneVlanIdSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); + ZoneVlanIdSearch = createSearchBuilder(); + ZoneVlanIdSearch.and("zoneId", ZoneVlanIdSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); ZoneVlanIdSearch.and("vlanId", ZoneVlanIdSearch.entity().getVlanTag(), SearchCriteria.Op.EQ); ZoneVlanIdSearch.done(); - + ZoneSearch = createSearchBuilder(); ZoneSearch.and("zoneId", ZoneSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); ZoneSearch.done(); - + ZoneTypeSearch = createSearchBuilder(); ZoneTypeSearch.and("zoneId", ZoneTypeSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); ZoneTypeSearch.and("vlanType", ZoneTypeSearch.entity().getVlanType(), SearchCriteria.Op.EQ); ZoneTypeSearch.done(); - + NetworkVlanSearch = createSearchBuilder(); NetworkVlanSearch.and("networkOfferingId", NetworkVlanSearch.entity().getNetworkId(), SearchCriteria.Op.EQ); NetworkVlanSearch.done(); - + PhysicalNetworkVlanSearch = createSearchBuilder(); PhysicalNetworkVlanSearch.and("physicalNetworkId", PhysicalNetworkVlanSearch.entity().getPhysicalNetworkId(), SearchCriteria.Op.EQ); PhysicalNetworkVlanSearch.done(); @@ -105,211 +104,211 @@ public class VlanDaoImpl extends GenericDaoBase implements VlanDao @Override public List listZoneWideVlans(long zoneId, VlanType vlanType, String vlanId){ - SearchCriteria sc = ZoneVlanSearch.create(); - sc.setParameters("zoneId", zoneId); - sc.setParameters("vlanId", vlanId); - sc.setParameters("vlanType", vlanType); - return listBy(sc); - } - - @Override - public List listByZoneAndType(long zoneId, VlanType vlanType) { - SearchCriteria sc = ZoneTypeSearch.create(); - sc.setParameters("zoneId", zoneId); - sc.setParameters("vlanType", vlanType); + SearchCriteria sc = ZoneVlanSearch.create(); + sc.setParameters("zoneId", zoneId); + sc.setParameters("vlanId", vlanId); + sc.setParameters("vlanType", vlanType); return listBy(sc); - } - - - @Override + } + + @Override + public List listByZoneAndType(long zoneId, VlanType vlanType) { + SearchCriteria sc = ZoneTypeSearch.create(); + sc.setParameters("zoneId", zoneId); + sc.setParameters("vlanType", vlanType); + return listBy(sc); + } + + + @Override public List listByType(VlanType vlanType) { SearchCriteria sc = ZoneTypeSearch.create(); sc.setParameters("vlanType", vlanType); return listBy(sc); } - @Override - public List listVlansForPod(long podId) { - //FIXME: use a join statement to improve the performance (should be minor since we expect only one or two - List vlanMaps = _podVlanMapDao.listPodVlanMapsByPod(podId); - List result = new ArrayList(); - for (PodVlanMapVO pvmvo: vlanMaps) { - result.add(findById(pvmvo.getVlanDbId())); - } - return result; - } + @Override + public List listVlansForPod(long podId) { + //FIXME: use a join statement to improve the performance (should be minor since we expect only one or two + List vlanMaps = _podVlanMapDao.listPodVlanMapsByPod(podId); + List result = new ArrayList(); + for (PodVlanMapVO pvmvo: vlanMaps) { + result.add(findById(pvmvo.getVlanDbId())); + } + return result; + } - @Override - public List listVlansForPodByType(long podId, VlanType vlanType) { - //FIXME: use a join statement to improve the performance (should be minor since we expect only one or two) - List vlanMaps = _podVlanMapDao.listPodVlanMapsByPod(podId); - List result = new ArrayList(); - for (PodVlanMapVO pvmvo: vlanMaps) { - VlanVO vlan =findById(pvmvo.getVlanDbId()); - if (vlan.getVlanType() == vlanType) { - result.add(vlan); - } - } - return result; - } - - @Override - public List listVlansForAccountByType(Long zoneId, long accountId, VlanType vlanType) { - //FIXME: use a join statement to improve the performance (should be minor since we expect only one or two) - List vlanMaps = _accountVlanMapDao.listAccountVlanMapsByAccount(accountId); - List result = new ArrayList(); - for (AccountVlanMapVO acvmvo: vlanMaps) { - VlanVO vlan =findById(acvmvo.getVlanDbId()); - if (vlan.getVlanType() == vlanType && (zoneId == null || vlan.getDataCenterId() == zoneId)) { - result.add(vlan); - } - } - return result; - } + @Override + public List listVlansForPodByType(long podId, VlanType vlanType) { + //FIXME: use a join statement to improve the performance (should be minor since we expect only one or two) + List vlanMaps = _podVlanMapDao.listPodVlanMapsByPod(podId); + List result = new ArrayList(); + for (PodVlanMapVO pvmvo: vlanMaps) { + VlanVO vlan =findById(pvmvo.getVlanDbId()); + if (vlan.getVlanType() == vlanType) { + result.add(vlan); + } + } + return result; + } - @Override - public void addToPod(long podId, long vlanDbId) { - PodVlanMapVO pvmvo = new PodVlanMapVO(podId, vlanDbId); - _podVlanMapDao.persist(pvmvo); - - } + @Override + public List listVlansForAccountByType(Long zoneId, long accountId, VlanType vlanType) { + //FIXME: use a join statement to improve the performance (should be minor since we expect only one or two) + List vlanMaps = _accountVlanMapDao.listAccountVlanMapsByAccount(accountId); + List result = new ArrayList(); + for (AccountVlanMapVO acvmvo: vlanMaps) { + VlanVO vlan =findById(acvmvo.getVlanDbId()); + if (vlan.getVlanType() == vlanType && (zoneId == null || vlan.getDataCenterId() == zoneId)) { + result.add(vlan); + } + } + return result; + } - @Override - public boolean configure(String name, Map params) - throws ConfigurationException { - boolean result = super.configure(name, params); + @Override + public void addToPod(long podId, long vlanDbId) { + PodVlanMapVO pvmvo = new PodVlanMapVO(podId, vlanDbId); + _podVlanMapDao.persist(pvmvo); + + } + + @Override + public boolean configure(String name, Map params) + throws ConfigurationException { + boolean result = super.configure(name, params); ZoneTypeAllPodsSearch = createSearchBuilder(); ZoneTypeAllPodsSearch.and("zoneId", ZoneTypeAllPodsSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); ZoneTypeAllPodsSearch.and("vlanType", ZoneTypeAllPodsSearch.entity().getVlanType(), SearchCriteria.Op.EQ); - + SearchBuilder PodVlanSearch = _podVlanMapDao.createSearchBuilder(); PodVlanSearch.and("podId", PodVlanSearch.entity().getPodId(), SearchCriteria.Op.NNULL); ZoneTypeAllPodsSearch.join("vlan", PodVlanSearch, PodVlanSearch.entity().getVlanDbId(), ZoneTypeAllPodsSearch.entity().getId(), JoinBuilder.JoinType.INNER); - + ZoneTypeAllPodsSearch.done(); PodVlanSearch.done(); - + ZoneTypePodSearch = createSearchBuilder(); ZoneTypePodSearch.and("zoneId", ZoneTypePodSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); ZoneTypePodSearch.and("vlanType", ZoneTypePodSearch.entity().getVlanType(), SearchCriteria.Op.EQ); - + SearchBuilder PodVlanSearch2 = _podVlanMapDao.createSearchBuilder(); PodVlanSearch2.and("podId", PodVlanSearch2.entity().getPodId(), SearchCriteria.Op.EQ); ZoneTypePodSearch.join("vlan", PodVlanSearch2, PodVlanSearch2.entity().getVlanDbId(), ZoneTypePodSearch.entity().getId(), JoinBuilder.JoinType.INNER); PodVlanSearch2.done(); ZoneTypePodSearch.done(); - return result; - } - - private VlanVO findNextVlan(long zoneId, Vlan.VlanType vlanType) { - List allVlans = listByZoneAndType(zoneId, vlanType); - List emptyVlans = new ArrayList(); - List fullVlans = new ArrayList(); - - // Try to find a VLAN that is partially allocated - for (VlanVO vlan : allVlans) { - long vlanDbId = vlan.getId(); - - int countOfAllocatedIps = _ipAddressDao.countIPs(zoneId, vlanDbId, true); - int countOfAllIps = _ipAddressDao.countIPs(zoneId, vlanDbId, false); - - if ((countOfAllocatedIps > 0) && (countOfAllocatedIps < countOfAllIps)) { - return vlan; - } else if (countOfAllocatedIps == 0) { - emptyVlans.add(vlan); - } else if (countOfAllocatedIps == countOfAllIps) { - fullVlans.add(vlan); - } - } - - if (emptyVlans.isEmpty()) { - return null; - } - - // Try to find an empty VLAN with the same tag/subnet as a VLAN that is full - for (VlanVO fullVlan : fullVlans) { - for (VlanVO emptyVlan : emptyVlans) { - if (fullVlan.getVlanTag().equals(emptyVlan.getVlanTag()) && - fullVlan.getVlanGateway().equals(emptyVlan.getVlanGateway()) && - fullVlan.getVlanNetmask().equals(emptyVlan.getVlanNetmask())) { - return emptyVlan; - } - } - } - - // Return a random empty VLAN - return emptyVlans.get(0); - } + return result; + } + + private VlanVO findNextVlan(long zoneId, Vlan.VlanType vlanType) { + List allVlans = listByZoneAndType(zoneId, vlanType); + List emptyVlans = new ArrayList(); + List fullVlans = new ArrayList(); + + // Try to find a VLAN that is partially allocated + for (VlanVO vlan : allVlans) { + long vlanDbId = vlan.getId(); + + int countOfAllocatedIps = _ipAddressDao.countIPs(zoneId, vlanDbId, true); + int countOfAllIps = _ipAddressDao.countIPs(zoneId, vlanDbId, false); + + if ((countOfAllocatedIps > 0) && (countOfAllocatedIps < countOfAllIps)) { + return vlan; + } else if (countOfAllocatedIps == 0) { + emptyVlans.add(vlan); + } else if (countOfAllocatedIps == countOfAllIps) { + fullVlans.add(vlan); + } + } + + if (emptyVlans.isEmpty()) { + return null; + } + + // Try to find an empty VLAN with the same tag/subnet as a VLAN that is full + for (VlanVO fullVlan : fullVlans) { + for (VlanVO emptyVlan : emptyVlans) { + if (fullVlan.getVlanTag().equals(emptyVlan.getVlanTag()) && + fullVlan.getVlanGateway().equals(emptyVlan.getVlanGateway()) && + fullVlan.getVlanNetmask().equals(emptyVlan.getVlanNetmask())) { + return emptyVlan; + } + } + } + + // Return a random empty VLAN + return emptyVlans.get(0); + } + + @Override + public boolean zoneHasDirectAttachUntaggedVlans(long zoneId) { + SearchCriteria sc = ZoneTypeAllPodsSearch.create(); + sc.setParameters("zoneId", zoneId); + sc.setParameters("vlanType", VlanType.DirectAttached); - @Override - public boolean zoneHasDirectAttachUntaggedVlans(long zoneId) { - SearchCriteria sc = ZoneTypeAllPodsSearch.create(); - sc.setParameters("zoneId", zoneId); - sc.setParameters("vlanType", VlanType.DirectAttached); - return listIncludingRemovedBy(sc).size() > 0; - } + } - public Pair assignPodDirectAttachIpAddress(long zoneId, - long podId, long accountId, long domainId) { - SearchCriteria sc = ZoneTypePodSearch.create(); - sc.setParameters("zoneId", zoneId); - sc.setParameters("vlanType", VlanType.DirectAttached); - sc.setJoinParameters("vlan", "podId", podId); - - VlanVO vlan = findOneIncludingRemovedBy(sc); - if (vlan == null) { - return null; - } - - return null; + public Pair assignPodDirectAttachIpAddress(long zoneId, + long podId, long accountId, long domainId) { + SearchCriteria sc = ZoneTypePodSearch.create(); + sc.setParameters("zoneId", zoneId); + sc.setParameters("vlanType", VlanType.DirectAttached); + sc.setJoinParameters("vlan", "podId", podId); + + VlanVO vlan = findOneIncludingRemovedBy(sc); + if (vlan == null) { + return null; + } + + return null; // String ipAddress = _ipAddressDao.assignIpAddress(accountId, domainId, vlan.getId(), false).getAddress(); // if (ipAddress == null) { // return null; // } // return new Pair(ipAddress, vlan); - } - - @Override - @DB - public List searchForZoneWideVlans(long dcId, String vlanType, String vlanId){ - - StringBuilder sql = new StringBuilder(FindZoneWideVlans); + } - Transaction txn = Transaction.currentTxn(); - PreparedStatement pstmt = null; - try { - pstmt = txn.prepareAutoCloseStatement(sql.toString()); - pstmt.setLong(1, dcId); - pstmt.setString(2, vlanType); - pstmt.setString(3, vlanId); - - ResultSet rs = pstmt.executeQuery(); - List zoneWideVlans = new ArrayList(); + @Override + @DB + public List searchForZoneWideVlans(long dcId, String vlanType, String vlanId){ - while (rs.next()) { - zoneWideVlans.add(toEntityBean(rs, false)); - } - - return zoneWideVlans; - } catch (SQLException e) { - throw new CloudRuntimeException("Unable to execute " + pstmt.toString(), e); - } - } - - @Override + StringBuilder sql = new StringBuilder(FindZoneWideVlans); + + Transaction txn = Transaction.currentTxn(); + PreparedStatement pstmt = null; + try { + pstmt = txn.prepareAutoCloseStatement(sql.toString()); + pstmt.setLong(1, dcId); + pstmt.setString(2, vlanType); + pstmt.setString(3, vlanId); + + ResultSet rs = pstmt.executeQuery(); + List zoneWideVlans = new ArrayList(); + + while (rs.next()) { + zoneWideVlans.add(toEntityBean(rs, false)); + } + + return zoneWideVlans; + } catch (SQLException e) { + throw new CloudRuntimeException("Unable to execute " + pstmt.toString(), e); + } + } + + @Override public List listVlansByNetworkId(long networkOfferingId) { - SearchCriteria sc = NetworkVlanSearch.create(); + SearchCriteria sc = NetworkVlanSearch.create(); sc.setParameters("networkOfferingId", networkOfferingId); return listBy(sc); } @Override public List listVlansByPhysicalNetworkId(long physicalNetworkId) { - SearchCriteria sc = PhysicalNetworkVlanSearch.create(); + SearchCriteria sc = PhysicalNetworkVlanSearch.create(); sc.setParameters("physicalNetworkId", physicalNetworkId); return listBy(sc); } diff --git a/server/src/com/cloud/deploy/FirstFitPlanner.java b/server/src/com/cloud/deploy/FirstFitPlanner.java index bcc1d264219..3517bf8ed14 100755 --- a/server/src/com/cloud/deploy/FirstFitPlanner.java +++ b/server/src/com/cloud/deploy/FirstFitPlanner.java @@ -18,7 +18,6 @@ package com.cloud.deploy; import java.util.ArrayList; import java.util.Comparator; -import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -74,7 +73,6 @@ import com.cloud.storage.dao.VolumeDao; import com.cloud.user.AccountManager; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; -import com.cloud.utils.component.Adapters; import com.cloud.vm.DiskProfile; import com.cloud.vm.ReservationContext; import com.cloud.vm.VirtualMachine; @@ -106,7 +104,7 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { //@com.cloud.utils.component.Inject(adapter=StoragePoolAllocator.class) @Inject protected List _storagePoolAllocators; - + //@com.cloud.utils.component.Inject(adapter=HostAllocator.class) @Inject protected List _hostAllocators; protected String _allocationAlgorithm = "random"; @@ -115,7 +113,7 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { @Override public DeployDestination plan(VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid) - throws InsufficientServerCapacityException { + throws InsufficientServerCapacityException { VirtualMachine vm = vmProfile.getVirtualMachine(); DataCenter dc = _dcDao.findById(vm.getDataCenterIdToDeployIn()); @@ -126,7 +124,7 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { } return null; } - + ServiceOffering offering = vmProfile.getServiceOffering(); int cpu_requested = offering.getCpu() * offering.getSpeed(); long ram_requested = offering.getRamSize() * 1024L * 1024L; @@ -143,9 +141,9 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { s_logger.debug("Is ROOT volume READY (pool already allocated)?: " + (plan.getPoolId()!=null ? "Yes": "No")); } - + String haVmTag = (String)vmProfile.getParameter(VirtualMachineProfile.Param.HaTag); - + if(plan.getHostId() != null && haVmTag == null){ Long hostIdSpecified = plan.getHostId(); if (s_logger.isDebugEnabled()){ @@ -238,7 +236,7 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { } s_logger.debug("Cannot choose the last host to deploy this VM "); } - + List clusterList = new ArrayList(); if (plan.getClusterId() != null) { @@ -272,7 +270,7 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { } } else { s_logger.debug("Searching all possible resources under this Zone: "+ plan.getDataCenterId()); - + boolean applyAllocationAtPods = Boolean.parseBoolean(_configDao.getValue(Config.ApplyAllocationAlgorithmToPods.key())); if(applyAllocationAtPods){ //start scan at all pods under this zone. @@ -284,15 +282,15 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { } } - + private DeployDestination scanPodsForDestination(VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid){ - + ServiceOffering offering = vmProfile.getServiceOffering(); int requiredCpu = offering.getCpu() * offering.getSpeed(); long requiredRam = offering.getRamSize() * 1024L * 1024L; String opFactor = _configDao.getValue(Config.CPUOverprovisioningFactor.key()); float cpuOverprovisioningFactor = NumbersUtil.parseFloat(opFactor, 1); - + //list pods under this zone by cpu and ram capacity List prioritizedPodIds = new ArrayList(); Pair, Map> podCapacityInfo = listPodsByCapacity(plan.getDataCenterId(), requiredCpu, requiredRam, cpuOverprovisioningFactor); @@ -313,16 +311,16 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { } podsWithCapacity.removeAll(disabledPods); } - } + } }else{ if (s_logger.isDebugEnabled()) { s_logger.debug("No pods found having a host with enough capacity, returning."); } return null; } - + if(!podsWithCapacity.isEmpty()){ - + prioritizedPodIds = reorderPods(podCapacityInfo, vmProfile, plan); //loop over pods @@ -345,9 +343,9 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { return null; } } - + private DeployDestination scanClustersForDestinationInZoneOrPod(long id, boolean isZone, VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid){ - + VirtualMachine vm = vmProfile.getVirtualMachine(); ServiceOffering offering = vmProfile.getServiceOffering(); DataCenter dc = _dcDao.findById(vm.getDataCenterIdToDeployIn()); @@ -355,7 +353,7 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { long requiredRam = offering.getRamSize() * 1024L * 1024L; String opFactor = _configDao.getValue(Config.CPUOverprovisioningFactor.key()); float cpuOverprovisioningFactor = NumbersUtil.parseFloat(opFactor, 1); - + //list clusters under this zone by cpu and ram capacity Pair, Map> clusterCapacityInfo = listClustersByCapacity(id, requiredCpu, requiredRam, avoid, isZone, cpuOverprovisioningFactor); List prioritizedClusterIds = clusterCapacityInfo.first(); @@ -366,7 +364,7 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { } prioritizedClusterIds.removeAll(avoid.getClustersToAvoid()); } - + if(!isRootAdmin(plan.getReservationContext())){ List disabledClusters = new ArrayList(); if(isZone){ @@ -397,7 +395,7 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { return null; } } - + /** * This method should reorder the given list of Cluster Ids by applying any necessary heuristic * for this planner @@ -409,7 +407,7 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { List reordersClusterIds = clusterCapacityInfo.first(); return reordersClusterIds; } - + /** * This method should reorder the given list of Pod Ids by applying any necessary heuristic * for this planner @@ -421,7 +419,7 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { List podIdsByCapacity = podCapacityInfo.first(); return podIdsByCapacity; } - + private List listDisabledClusters(long zoneId, Long podId){ List disabledClusters = _clusterDao.listDisabledClusters(zoneId, podId); if(podId == null){ @@ -431,70 +429,70 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { } return disabledClusters; } - + private List listDisabledPods(long zoneId){ List disabledPods = _podDao.listDisabledPods(zoneId); return disabledPods; } - + private Map getCapacityThresholdMap(){ - // Lets build this real time so that the admin wont have to restart MS if he changes these values - Map disableThresholdMap = new HashMap(); - - String cpuDisableThresholdString = _configDao.getValue(Config.CPUCapacityDisableThreshold.key()); + // Lets build this real time so that the admin wont have to restart MS if he changes these values + Map disableThresholdMap = new HashMap(); + + String cpuDisableThresholdString = _configDao.getValue(Config.CPUCapacityDisableThreshold.key()); float cpuDisableThreshold = NumbersUtil.parseFloat(cpuDisableThresholdString, 0.85F); disableThresholdMap.put(Capacity.CAPACITY_TYPE_CPU, cpuDisableThreshold); - + String memoryDisableThresholdString = _configDao.getValue(Config.MemoryCapacityDisableThreshold.key()); float memoryDisableThreshold = NumbersUtil.parseFloat(memoryDisableThresholdString, 0.85F); disableThresholdMap.put(Capacity.CAPACITY_TYPE_MEMORY, memoryDisableThreshold); - - return disableThresholdMap; + + return disableThresholdMap; } private List getCapacitiesForCheckingThreshold(){ - List capacityList = new ArrayList(); - capacityList.add(Capacity.CAPACITY_TYPE_CPU); - capacityList.add(Capacity.CAPACITY_TYPE_MEMORY); - return capacityList; + List capacityList = new ArrayList(); + capacityList.add(Capacity.CAPACITY_TYPE_CPU); + capacityList.add(Capacity.CAPACITY_TYPE_MEMORY); + return capacityList; } - + private void removeClustersCrossingThreshold(List clusterListForVmAllocation, ExcludeList avoid, VirtualMachineProfile vmProfile, DeploymentPlan plan){ - - Map capacityThresholdMap = getCapacityThresholdMap(); - List capacityList = getCapacitiesForCheckingThreshold(); - List clustersCrossingThreshold = new ArrayList(); - + + Map capacityThresholdMap = getCapacityThresholdMap(); + List capacityList = getCapacitiesForCheckingThreshold(); + List clustersCrossingThreshold = new ArrayList(); + ServiceOffering offering = vmProfile.getServiceOffering(); int cpu_requested = offering.getCpu() * offering.getSpeed(); long ram_requested = offering.getRamSize() * 1024L * 1024L; - + // For each capacity get the cluster list crossing the threshold and remove it from the clusterList that will be used for vm allocation. for(short capacity : capacityList){ - - if (clusterListForVmAllocation == null || clusterListForVmAllocation.size() == 0){ - return; - } - - if (capacity == Capacity.CAPACITY_TYPE_CPU){ - clustersCrossingThreshold = _capacityDao.listClustersCrossingThreshold(Capacity.CAPACITY_TYPE_CPU, plan.getDataCenterId(), - capacityThresholdMap.get(capacity), cpu_requested, ApiDBUtils.getCpuOverprovisioningFactor()); - }else{ - clustersCrossingThreshold = _capacityDao.listClustersCrossingThreshold(capacity, plan.getDataCenterId(), - capacityThresholdMap.get(capacity), ram_requested, 1.0f);//Mem overprov not supported yet - } - - if (clustersCrossingThreshold != null && clustersCrossingThreshold.size() != 0){ - // addToAvoid Set - avoid.addClusterList(clustersCrossingThreshold); - // Remove clusters crossing disabled threshold - clusterListForVmAllocation.removeAll(clustersCrossingThreshold); - - s_logger.debug("Cannot allocate cluster list " + clustersCrossingThreshold.toString() + " for vm creation since their allocated percentage" + - " crosses the disable capacity threshold: " + capacityThresholdMap.get(capacity) + " for capacity Type : " + capacity + ", skipping these clusters"); - } - + if (clusterListForVmAllocation == null || clusterListForVmAllocation.size() == 0){ + return; + } + + if (capacity == Capacity.CAPACITY_TYPE_CPU){ + clustersCrossingThreshold = _capacityDao.listClustersCrossingThreshold(Capacity.CAPACITY_TYPE_CPU, plan.getDataCenterId(), + capacityThresholdMap.get(capacity), cpu_requested, ApiDBUtils.getCpuOverprovisioningFactor()); + }else{ + clustersCrossingThreshold = _capacityDao.listClustersCrossingThreshold(capacity, plan.getDataCenterId(), + capacityThresholdMap.get(capacity), ram_requested, 1.0f);//Mem overprov not supported yet + } + + + if (clustersCrossingThreshold != null && clustersCrossingThreshold.size() != 0){ + // addToAvoid Set + avoid.addClusterList(clustersCrossingThreshold); + // Remove clusters crossing disabled threshold + clusterListForVmAllocation.removeAll(clustersCrossingThreshold); + + s_logger.debug("Cannot allocate cluster list " + clustersCrossingThreshold.toString() + " for vm creation since their allocated percentage" + + " crosses the disable capacity threshold: " + capacityThresholdMap.get(capacity) + " for capacity Type : " + capacity + ", skipping these clusters"); + } + } } @@ -506,7 +504,7 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { } removeClustersCrossingThreshold(clusterList, avoid, vmProfile, plan); - + for(Long clusterId : clusterList){ Cluster clusterVO = _clusterDao.findById(clusterId); @@ -515,7 +513,7 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { avoid.addCluster(clusterVO.getId()); continue; } - + s_logger.debug("Checking resources in Cluster: "+clusterId + " under Pod: "+clusterVO.getPodId()); //search for resources(hosts and storage) under this zone, pod, cluster. DataCenterDeployment potentialPlan = new DataCenterDeployment(plan.getDataCenterId(), clusterVO.getPodId(), clusterVO.getId(), null, plan.getPoolId(), null, plan.getReservationContext()); @@ -595,11 +593,11 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { if (s_logger.isTraceEnabled()) { s_logger.trace("ClusterId List having enough CPU and RAM capacity & in order of aggregate capacity: " + clusterIdsOrderedByAggregateCapacity); } - + return result; } - + protected Pair, Map> listPodsByCapacity(long zoneId, int requiredCpu, long requiredRam, float cpuOverprovisioningFactor){ //look at the aggregate available cpu and ram per pod //although an aggregate value may be false indicator that a pod can host a vm, it will at the least eliminate those pods which definitely cannot @@ -632,7 +630,7 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { if (s_logger.isTraceEnabled()) { s_logger.trace("PodId List having enough CPU and RAM capacity & in order of aggregate capacity: " + podIdsOrderedByAggregateCapacity); } - + return result; } @@ -719,7 +717,7 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { break; } } - + if(suitableHosts.isEmpty()){ s_logger.debug("No suitable hosts found"); } @@ -801,8 +799,8 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { // when deploying VM based on ISO, we have a service offering and an additional disk offering, use-local storage flag is actually // saved in service offering, overrde the flag from service offering when it is a ROOT disk if(!useLocalStorage && vmProfile.getServiceOffering().getUseLocalStorage()) { - if(toBeCreated.getVolumeType() == Volume.Type.ROOT) - useLocalStorage = true; + if(toBeCreated.getVolumeType() == Volume.Type.ROOT) + useLocalStorage = true; } } diskProfile.setUseLocalStorage(useLocalStorage); @@ -816,7 +814,7 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { break; } } - + if(!foundPotentialPools){ s_logger.debug("No suitable pools found for volume: "+toBeCreated +" under cluster: "+plan.getClusterId()); //No suitable storage pools found under this cluster for this volume. - remove any suitable pools found for other volumes. @@ -862,7 +860,7 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { } return false; } - + @Override public boolean configure(String name, Map params) throws ConfigurationException { super.configure(name, params); diff --git a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java index 6df08229830..813728f78ca 100755 --- a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java +++ b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java @@ -37,7 +37,6 @@ import com.cloud.agent.AgentManager; import com.cloud.alert.AlertManager; import com.cloud.cluster.ClusterManagerListener; import com.cloud.cluster.ManagementServerHostVO; -import com.cloud.cluster.StackMaid; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.ClusterDetailsDao; @@ -142,7 +141,7 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager, Clu ManagementServer _msServer; @Inject ConfigurationDao _configDao; - + String _instance; ScheduledExecutorService _executor; int _stopRetryInterval; @@ -189,12 +188,12 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager, Clu if (host.getType() != Host.Type.Routing) { return; } - + if(host.getHypervisorType() == HypervisorType.VMware) { s_logger.info("Don't restart for VMs on host " + host.getId() + " as the host is VMware host"); - return; + return; } - + s_logger.warn("Scheduling restart for VMs on host " + host.getId()); final List vms = _instanceDao.listByHostId(host.getId()); @@ -268,29 +267,29 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager, Clu @Override public void scheduleRestart(VMInstanceVO vm, boolean investigate) { - Long hostId = vm.getHostId(); - if (hostId == null) { - try { - s_logger.debug("Found a vm that is scheduled to be restarted but has no host id: " + vm); + Long hostId = vm.getHostId(); + if (hostId == null) { + try { + s_logger.debug("Found a vm that is scheduled to be restarted but has no host id: " + vm); _itMgr.advanceStop(vm, true, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount()); } catch (ResourceUnavailableException e) { assert false : "How do we hit this when force is true?"; - throw new CloudRuntimeException("Caught exception even though it should be handled.", e); + throw new CloudRuntimeException("Caught exception even though it should be handled.", e); } catch (OperationTimedoutException e) { assert false : "How do we hit this when force is true?"; - throw new CloudRuntimeException("Caught exception even though it should be handled.", e); + throw new CloudRuntimeException("Caught exception even though it should be handled.", e); } catch (ConcurrentOperationException e) { assert false : "How do we hit this when force is true?"; - throw new CloudRuntimeException("Caught exception even though it should be handled.", e); + throw new CloudRuntimeException("Caught exception even though it should be handled.", e); } - return; - } + return; + } + + if(vm.getHypervisorType() == HypervisorType.VMware) { + s_logger.info("Skip HA for VMware VM " + vm.getInstanceName()); + return; + } - if(vm.getHypervisorType() == HypervisorType.VMware) { - s_logger.info("Skip HA for VMware VM " + vm.getInstanceName()); - return; - } - if (!investigate) { if (s_logger.isDebugEnabled()) { s_logger.debug("VM does not require investigation so I'm marking it as Stopped: " + vm.toString()); @@ -319,13 +318,13 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager, Clu _itMgr.advanceStop(vm, true, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount()); } catch (ResourceUnavailableException e) { assert false : "How do we hit this when force is true?"; - throw new CloudRuntimeException("Caught exception even though it should be handled.", e); + throw new CloudRuntimeException("Caught exception even though it should be handled.", e); } catch (OperationTimedoutException e) { assert false : "How do we hit this when force is true?"; - throw new CloudRuntimeException("Caught exception even though it should be handled.", e); + throw new CloudRuntimeException("Caught exception even though it should be handled.", e); } catch (ConcurrentOperationException e) { assert false : "How do we hit this when force is true?"; - throw new CloudRuntimeException("Caught exception even though it should be handled.", e); + throw new CloudRuntimeException("Caught exception even though it should be handled.", e); } } @@ -360,7 +359,7 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager, Clu s_logger.info(str.toString()); return null; } - + items = _haDao.listRunningHaWorkForVm(work.getInstanceId()); if (items.size() > 0) { StringBuilder str = new StringBuilder("Waiting because there's HA work being executed on an item currently. Work Ids =["); @@ -371,7 +370,7 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager, Clu s_logger.info(str.toString()); return (System.currentTimeMillis() >> 10) + _investigateRetryInterval; } - + long vmId = work.getInstanceId(); VMInstanceVO vm = _itMgr.findByIdAndType(work.getType(), work.getInstanceId()); @@ -420,14 +419,14 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager, Clu Investigator investigator = null; for(Investigator it : _investigators) { - investigator = it; + investigator = it; alive = investigator.isVmAlive(vm, host); s_logger.info(investigator.getName() + " found " + vm + "to be alive? " + alive); if (alive != null) { break; } } - + boolean fenced = false; if (alive == null) { s_logger.debug("Fencing off VM that we don't know the state of"); @@ -439,7 +438,7 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager, Clu break; } } - + } else if (!alive) { fenced = true; } else { @@ -464,13 +463,13 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager, Clu _itMgr.advanceStop(vm, true, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount()); } catch (ResourceUnavailableException e) { assert false : "How do we hit this when force is true?"; - throw new CloudRuntimeException("Caught exception even though it should be handled.", e); + throw new CloudRuntimeException("Caught exception even though it should be handled.", e); } catch (OperationTimedoutException e) { assert false : "How do we hit this when force is true?"; - throw new CloudRuntimeException("Caught exception even though it should be handled.", e); + throw new CloudRuntimeException("Caught exception even though it should be handled.", e); } catch (ConcurrentOperationException e) { assert false : "How do we hit this when force is true?"; - throw new CloudRuntimeException("Caught exception even though it should be handled.", e); + throw new CloudRuntimeException("Caught exception even though it should be handled.", e); } work.setStep(Step.Scheduled); @@ -481,13 +480,13 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager, Clu _itMgr.advanceStop(vm, true, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount()); } catch (ResourceUnavailableException e) { assert false : "How do we hit this when force is true?"; - throw new CloudRuntimeException("Caught exception even though it should be handled.", e); + throw new CloudRuntimeException("Caught exception even though it should be handled.", e); } catch (OperationTimedoutException e) { assert false : "How do we hit this when force is true?"; - throw new CloudRuntimeException("Caught exception even though it should be handled.", e); + throw new CloudRuntimeException("Caught exception even though it should be handled.", e); } catch (ConcurrentOperationException e) { assert false : "How do we hit this when force is true?"; - throw new CloudRuntimeException("Caught exception even though it should be handled.", e); + throw new CloudRuntimeException("Caught exception even though it should be handled.", e); } } } @@ -519,7 +518,7 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager, Clu params.put(VirtualMachineProfile.Param.HaTag, _haTag); } VMInstanceVO started = _itMgr.advanceStart(vm, params, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount()); - + if (started != null) { s_logger.info("VM is now restarted: " + vmId + " on " + started.getHostId()); return null; @@ -735,7 +734,7 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager, Clu if (_instance == null) { _instance = "VMOPS"; } - + _haTag = params.get("ha.tag"); _haDao.releaseWorkItems(_serverId); @@ -785,8 +784,6 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager, Clu _haDao.cleanup(System.currentTimeMillis() - _timeBetweenFailures); } catch (Exception e) { s_logger.warn("Error while cleaning up", e); - } finally { - StackMaid.current().exitCleanup(); } } } @@ -832,7 +829,7 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager, Clu nextTime = destroyVM(work); } else { assert false : "How did we get here with " + wt.toString(); - continue; + continue; } if (nextTime == null) { @@ -852,7 +849,6 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager, Clu } catch (final Throwable th) { s_logger.error("Caught this throwable, ", th); } finally { - StackMaid.current().exitCleanup(); if (work != null) { NDC.pop(); } @@ -885,5 +881,5 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager, Clu public String getHaTag() { return _haTag; } - + } diff --git a/server/src/com/cloud/host/dao/HostDaoImpl.java b/server/src/com/cloud/host/dao/HostDaoImpl.java index 0767befcb70..2a7139cba54 100755 --- a/server/src/com/cloud/host/dao/HostDaoImpl.java +++ b/server/src/com/cloud/host/dao/HostDaoImpl.java @@ -47,7 +47,6 @@ import com.cloud.info.RunningHostCountInfo; import com.cloud.org.Managed; import com.cloud.resource.ResourceState; import com.cloud.utils.DateUtil; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.db.Attribute; import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; @@ -103,7 +102,7 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao protected SearchBuilder ManagedDirectConnectSearch; protected SearchBuilder ManagedRoutingServersSearch; protected SearchBuilder SecondaryStorageVMSearch; - + protected GenericSearchBuilder HostsInStatusSearch; protected GenericSearchBuilder CountRoutingByDc; @@ -123,7 +122,7 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao public HostDaoImpl() { } - + @PostConstruct public void init() { @@ -152,7 +151,7 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao TypeDcSearch.and("type", TypeDcSearch.entity().getType(), SearchCriteria.Op.EQ); TypeDcSearch.and("dc", TypeDcSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); TypeDcSearch.done(); - + SecondaryStorageVMSearch = createSearchBuilder(); SecondaryStorageVMSearch.and("type", SecondaryStorageVMSearch.entity().getType(), SearchCriteria.Op.EQ); SecondaryStorageVMSearch.and("dc", SecondaryStorageVMSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); @@ -165,14 +164,14 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao TypeDcStatusSearch.and("status", TypeDcStatusSearch.entity().getStatus(), SearchCriteria.Op.EQ); TypeDcStatusSearch.and("resourceState", TypeDcStatusSearch.entity().getResourceState(), SearchCriteria.Op.EQ); TypeDcStatusSearch.done(); - + TypeClusterStatusSearch = createSearchBuilder(); TypeClusterStatusSearch.and("type", TypeClusterStatusSearch.entity().getType(), SearchCriteria.Op.EQ); TypeClusterStatusSearch.and("cluster", TypeClusterStatusSearch.entity().getClusterId(), SearchCriteria.Op.EQ); TypeClusterStatusSearch.and("status", TypeClusterStatusSearch.entity().getStatus(), SearchCriteria.Op.EQ); TypeClusterStatusSearch.and("resourceState", TypeClusterStatusSearch.entity().getResourceState(), SearchCriteria.Op.EQ); TypeClusterStatusSearch.done(); - + IdStatusSearch = createSearchBuilder(); IdStatusSearch.and("id", IdStatusSearch.entity().getId(), SearchCriteria.Op.EQ); IdStatusSearch.and("states", IdStatusSearch.entity().getStatus(), SearchCriteria.Op.IN); @@ -218,7 +217,7 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao StatusSearch = createSearchBuilder(); StatusSearch.and("status", StatusSearch.entity().getStatus(), SearchCriteria.Op.IN); StatusSearch.done(); - + ResourceStateSearch = createSearchBuilder(); ResourceStateSearch.and("resourceState", ResourceStateSearch.entity().getResourceState(), SearchCriteria.Op.IN); ResourceStateSearch.done(); @@ -261,7 +260,7 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao ClusterManagedSearch.and("managed", ClusterManagedSearch.entity().getManagedState(), SearchCriteria.Op.EQ); UnmanagedDirectConnectSearch.join("ClusterManagedSearch", ClusterManagedSearch, ClusterManagedSearch.entity().getId(), UnmanagedDirectConnectSearch.entity().getClusterId(), JoinType.INNER); UnmanagedDirectConnectSearch.done(); - + DirectConnectSearch = createSearchBuilder(); DirectConnectSearch.and("resource", DirectConnectSearch.entity().getResource(), SearchCriteria.Op.NNULL); @@ -311,7 +310,7 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao ManagedRoutingServersSearch.and("server", ManagedRoutingServersSearch.entity().getManagementServerId(), SearchCriteria.Op.NNULL); ManagedRoutingServersSearch.and("type", ManagedRoutingServersSearch.entity().getType(), SearchCriteria.Op.EQ); ManagedRoutingServersSearch.done(); - + RoutingSearch = createSearchBuilder(); RoutingSearch.and("type", RoutingSearch.entity().getType(), SearchCriteria.Op.EQ); RoutingSearch.done(); @@ -334,52 +333,52 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao List hosts = listBy(sc); return hosts.size(); } - + @Override public HostVO findByGuid(String guid) { SearchCriteria sc = GuidSearch.create("guid", guid); return findOneBy(sc); } - + @Override @DB public List findAndUpdateDirectAgentToLoad(long lastPingSecondsAfter, Long limit, long managementServerId) { Transaction txn = Transaction.currentTxn(); txn.start(); - SearchCriteria sc = UnmanagedDirectConnectSearch.create(); - sc.setParameters("lastPinged", lastPingSecondsAfter); + SearchCriteria sc = UnmanagedDirectConnectSearch.create(); + sc.setParameters("lastPinged", lastPingSecondsAfter); //sc.setParameters("resourceStates", ResourceState.ErrorInMaintenance, ResourceState.Maintenance, ResourceState.PrepareForMaintenance, ResourceState.Disabled); sc.setJoinParameters("ClusterManagedSearch", "managed", Managed.ManagedState.Managed); List hosts = lockRows(sc, new Filter(HostVO.class, "clusterId", true, 0L, limit), true); - + for (HostVO host : hosts) { host.setManagementServerId(managementServerId); update(host.getId(), host); } - + txn.commit(); - + return hosts; } - + @Override @DB public List findAndUpdateApplianceToLoad(long lastPingSecondsAfter, long managementServerId) { - Transaction txn = Transaction.currentTxn(); - - txn.start(); - SearchCriteria sc = UnmanagedApplianceSearch.create(); - sc.setParameters("lastPinged", lastPingSecondsAfter); + Transaction txn = Transaction.currentTxn(); + + txn.start(); + SearchCriteria sc = UnmanagedApplianceSearch.create(); + sc.setParameters("lastPinged", lastPingSecondsAfter); sc.setParameters("types", Type.ExternalDhcp, Type.ExternalFirewall, Type.ExternalLoadBalancer, Type.PxeServer, Type.TrafficMonitor, Type.L2Networking); - List hosts = lockRows(sc, null, true); - - for (HostVO host : hosts) { - host.setManagementServerId(managementServerId); - update(host.getId(), host); - } - - txn.commit(); - - return hosts; + List hosts = lockRows(sc, null, true); + + for (HostVO host : hosts) { + host.setManagementServerId(managementServerId); + update(host.getId(), host); + } + + txn.commit(); + + return hosts; } @Override @@ -405,7 +404,7 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao ub = getUpdateBuilder(host); update(ub, sc, null); } - + @Override public List listByHostTag(Host.Type type, Long clusterId, Long podId, long dcId, String hostTag) { @@ -438,8 +437,8 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao return listBy(sc); } - - + + @Override public List listAllUpAndEnabledNonHAHosts(Type type, Long clusterId, Long podId, long dcId, String haTag) { SearchBuilder hostTagSearch = null; @@ -449,42 +448,42 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao hostTagSearch.or("tagNull", hostTagSearch.entity().getTag(), SearchCriteria.Op.NULL); hostTagSearch.cp(); } - + SearchBuilder hostSearch = createSearchBuilder(); - + hostSearch.and("type", hostSearch.entity().getType(), SearchCriteria.Op.EQ); hostSearch.and("clusterId", hostSearch.entity().getClusterId(), SearchCriteria.Op.EQ); hostSearch.and("podId", hostSearch.entity().getPodId(), SearchCriteria.Op.EQ); hostSearch.and("zoneId", hostSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); hostSearch.and("status", hostSearch.entity().getStatus(), SearchCriteria.Op.EQ); hostSearch.and("resourceState", hostSearch.entity().getResourceState(), SearchCriteria.Op.EQ); - + if (haTag != null && !haTag.isEmpty()) { hostSearch.join("hostTagSearch", hostTagSearch, hostSearch.entity().getId(), hostTagSearch.entity().getHostId(), JoinBuilder.JoinType.LEFTOUTER); } SearchCriteria sc = hostSearch.create(); - + if (haTag != null && !haTag.isEmpty()) { sc.setJoinParameters("hostTagSearch", "tag", haTag); } - + if (type != null) { sc.setParameters("type", type); } - + if (clusterId != null) { sc.setParameters("clusterId", clusterId); } - + if (podId != null) { sc.setParameters("podId", podId); } - + sc.setParameters("zoneId", dcId); sc.setParameters("status", Status.Up); sc.setParameters("resourceState", ResourceState.Enabled); - + return listBy(sc); } @@ -531,7 +530,7 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao } return result; } - + @Override public void saveDetails(HostVO host) { Map details = host.getDetails(); @@ -653,81 +652,81 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao } - @Override - public boolean updateState(Status oldStatus, Event event, Status newStatus, Host vo, Object data) { - HostVO host = findById(vo.getId()); - long oldPingTime = host.getLastPinged(); + @Override + public boolean updateState(Status oldStatus, Event event, Status newStatus, Host vo, Object data) { + HostVO host = findById(vo.getId()); + long oldPingTime = host.getLastPinged(); - SearchBuilder sb = createSearchBuilder(); - sb.and("status", sb.entity().getStatus(), SearchCriteria.Op.EQ); - sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); - sb.and("update", sb.entity().getUpdated(), SearchCriteria.Op.EQ); - if (newStatus.checkManagementServer()) { - sb.and("ping", sb.entity().getLastPinged(), SearchCriteria.Op.EQ); - sb.and().op("nullmsid", sb.entity().getManagementServerId(), SearchCriteria.Op.NULL); - sb.or("msid", sb.entity().getManagementServerId(), SearchCriteria.Op.EQ); - sb.closeParen(); - } - sb.done(); + SearchBuilder sb = createSearchBuilder(); + sb.and("status", sb.entity().getStatus(), SearchCriteria.Op.EQ); + sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); + sb.and("update", sb.entity().getUpdated(), SearchCriteria.Op.EQ); + if (newStatus.checkManagementServer()) { + sb.and("ping", sb.entity().getLastPinged(), SearchCriteria.Op.EQ); + sb.and().op("nullmsid", sb.entity().getManagementServerId(), SearchCriteria.Op.NULL); + sb.or("msid", sb.entity().getManagementServerId(), SearchCriteria.Op.EQ); + sb.closeParen(); + } + sb.done(); - SearchCriteria sc = sb.create(); + SearchCriteria sc = sb.create(); - sc.setParameters("status", oldStatus); - sc.setParameters("id", host.getId()); - sc.setParameters("update", host.getUpdated()); - long oldUpdateCount = host.getUpdated(); - if (newStatus.checkManagementServer()) { - sc.setParameters("ping", oldPingTime); - sc.setParameters("msid", host.getManagementServerId()); - } + sc.setParameters("status", oldStatus); + sc.setParameters("id", host.getId()); + sc.setParameters("update", host.getUpdated()); + long oldUpdateCount = host.getUpdated(); + if (newStatus.checkManagementServer()) { + sc.setParameters("ping", oldPingTime); + sc.setParameters("msid", host.getManagementServerId()); + } - long newUpdateCount = host.incrUpdated(); - UpdateBuilder ub = getUpdateBuilder(host); - ub.set(host, _statusAttr, newStatus); - if (newStatus.updateManagementServer()) { - if (newStatus.lostConnection()) { - ub.set(host, _msIdAttr, null); - } else { - ub.set(host, _msIdAttr, host.getManagementServerId()); - } - if (event.equals(Event.Ping) || event.equals(Event.AgentConnected)) { - ub.set(host, _pingTimeAttr, System.currentTimeMillis() >> 10); - } - } - if (event.equals(Event.ManagementServerDown)) { - ub.set(host, _pingTimeAttr, ((System.currentTimeMillis() >> 10) - (10 * 60))); - } - int result = update(ub, sc, null); - assert result <= 1 : "How can this update " + result + " rows? "; + long newUpdateCount = host.incrUpdated(); + UpdateBuilder ub = getUpdateBuilder(host); + ub.set(host, _statusAttr, newStatus); + if (newStatus.updateManagementServer()) { + if (newStatus.lostConnection()) { + ub.set(host, _msIdAttr, null); + } else { + ub.set(host, _msIdAttr, host.getManagementServerId()); + } + if (event.equals(Event.Ping) || event.equals(Event.AgentConnected)) { + ub.set(host, _pingTimeAttr, System.currentTimeMillis() >> 10); + } + } + if (event.equals(Event.ManagementServerDown)) { + ub.set(host, _pingTimeAttr, ((System.currentTimeMillis() >> 10) - (10 * 60))); + } + int result = update(ub, sc, null); + assert result <= 1 : "How can this update " + result + " rows? "; - if (status_logger.isDebugEnabled() && result == 0) { - HostVO ho = findById(host.getId()); - assert ho != null : "How how how? : " + host.getId(); + if (status_logger.isDebugEnabled() && result == 0) { + HostVO ho = findById(host.getId()); + assert ho != null : "How how how? : " + host.getId(); + + StringBuilder str = new StringBuilder("Unable to update host for event:").append(event.toString()); + str.append(". Name=").append(host.getName()); + str.append("; New=[status=").append(newStatus.toString()).append(":msid=") + .append(newStatus.lostConnection() ? "null" : host.getManagementServerId()).append(":lastpinged=").append(host.getLastPinged()).append("]"); + str.append("; Old=[status=").append(oldStatus.toString()).append(":msid=").append(host.getManagementServerId()).append(":lastpinged=") + .append(oldPingTime).append("]"); + str.append("; DB=[status=").append(vo.getStatus().toString()).append(":msid=").append(vo.getManagementServerId()).append(":lastpinged=") + .append(vo.getLastPinged()).append(":old update count=").append(oldUpdateCount).append("]"); + status_logger.debug(str.toString()); + } else { + StringBuilder msg = new StringBuilder("Agent status update: ["); + msg.append("id = " + host.getId()); + msg.append("; name = " + host.getName()); + msg.append("; old status = " + oldStatus); + msg.append("; event = " + event); + msg.append("; new status = " + newStatus); + msg.append("; old update count = " + oldUpdateCount); + msg.append("; new update count = " + newUpdateCount + "]"); + status_logger.debug(msg.toString()); + } + + return result > 0; + } - StringBuilder str = new StringBuilder("Unable to update host for event:").append(event.toString()); - str.append(". Name=").append(host.getName()); - str.append("; New=[status=").append(newStatus.toString()).append(":msid=") - .append(newStatus.lostConnection() ? "null" : host.getManagementServerId()).append(":lastpinged=").append(host.getLastPinged()).append("]"); - str.append("; Old=[status=").append(oldStatus.toString()).append(":msid=").append(host.getManagementServerId()).append(":lastpinged=") - .append(oldPingTime).append("]"); - str.append("; DB=[status=").append(vo.getStatus().toString()).append(":msid=").append(vo.getManagementServerId()).append(":lastpinged=") - .append(vo.getLastPinged()).append(":old update count=").append(oldUpdateCount).append("]"); - status_logger.debug(str.toString()); - } else { - StringBuilder msg = new StringBuilder("Agent status update: ["); - msg.append("id = " + host.getId()); - msg.append("; name = " + host.getName()); - msg.append("; old status = " + oldStatus); - msg.append("; event = " + event); - msg.append("; new status = " + newStatus); - msg.append("; old update count = " + oldUpdateCount); - msg.append("; new update count = " + newUpdateCount + "]"); - status_logger.debug(msg.toString()); - } - - return result > 0; - } - @Override public boolean updateResourceState(ResourceState oldState, ResourceState.Event event, ResourceState newState, Host vo) { HostVO host = (HostVO)vo; @@ -735,41 +734,41 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao sb.and("resource_state", sb.entity().getResourceState(), SearchCriteria.Op.EQ); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.done(); - + SearchCriteria sc = sb.create(); sc.setParameters("resource_state", oldState); sc.setParameters("id", host.getId()); - + UpdateBuilder ub = getUpdateBuilder(host); ub.set(host, _resourceStateAttr, newState); int result = update(ub, sc, null); assert result <= 1 : "How can this update " + result + " rows? "; - + if (state_logger.isDebugEnabled() && result == 0) { HostVO ho = findById(host.getId()); assert ho != null : "How how how? : " + host.getId(); StringBuilder str = new StringBuilder("Unable to update resource state: ["); - str.append("m = " + host.getId()); - str.append("; name = " + host.getName()); - str.append("; old state = " + oldState); - str.append("; event = " + event); - str.append("; new state = " + newState + "]"); - state_logger.debug(str.toString()); + str.append("m = " + host.getId()); + str.append("; name = " + host.getName()); + str.append("; old state = " + oldState); + str.append("; event = " + event); + str.append("; new state = " + newState + "]"); + state_logger.debug(str.toString()); } else { - StringBuilder msg = new StringBuilder("Resource state update: ["); - msg.append("id = " + host.getId()); - msg.append("; name = " + host.getName()); - msg.append("; old state = " + oldState); - msg.append("; event = " + event); - msg.append("; new state = " + newState + "]"); - state_logger.debug(msg.toString()); + StringBuilder msg = new StringBuilder("Resource state update: ["); + msg.append("id = " + host.getId()); + msg.append("; name = " + host.getName()); + msg.append("; old state = " + oldState); + msg.append("; event = " + event); + msg.append("; new state = " + newState + "]"); + state_logger.debug(msg.toString()); } - + return result > 0; } - + @Override public HostVO findByTypeNameAndZoneId(long zoneId, String name, Host.Type type) { SearchCriteria sc = TypeNameZoneSearch.create(); @@ -779,15 +778,15 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao return findOneBy(sc); } - @Override - public List findHypervisorHostInCluster(long clusterId) { - SearchCriteria sc = TypeClusterStatusSearch.create(); - sc.setParameters("type", Host.Type.Routing); - sc.setParameters("cluster", clusterId); - sc.setParameters("status", Status.Up); - sc.setParameters("resourceState", ResourceState.Enabled); - - return listBy(sc); - } + @Override + public List findHypervisorHostInCluster(long clusterId) { + SearchCriteria sc = TypeClusterStatusSearch.create(); + sc.setParameters("type", Host.Type.Routing); + sc.setParameters("cluster", clusterId); + sc.setParameters("status", Status.Up); + sc.setParameters("resourceState", ResourceState.Enabled); + + return listBy(sc); + } } diff --git a/server/src/com/cloud/hypervisor/HypervisorGuruManagerImpl.java b/server/src/com/cloud/hypervisor/HypervisorGuruManagerImpl.java index 5a32de744a0..b0c25c74166 100644 --- a/server/src/com/cloud/hypervisor/HypervisorGuruManagerImpl.java +++ b/server/src/com/cloud/hypervisor/HypervisorGuruManagerImpl.java @@ -33,8 +33,6 @@ import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.utils.component.Adapters; -import com.cloud.utils.component.ComponentLocator; @Component @Local(value = { HypervisorGuruManager.class } ) @@ -42,54 +40,56 @@ public class HypervisorGuruManagerImpl implements HypervisorGuruManager { public static final Logger s_logger = Logger.getLogger(HypervisorGuruManagerImpl.class.getName()); @Inject HostDao _hostDao; - - String _name; - - @Inject List _hvGuruList; + + String _name; + + @Inject List _hvGuruList; Map _hvGurus = new HashMap(); - - @Override - public boolean configure(String name, Map params) throws ConfigurationException { - _name = name; - return true; - } - - @PostConstruct - public void init() { - for(HypervisorGuru guru : _hvGuruList) { - _hvGurus.put(guru.getHypervisorType(), guru); - } - } - @Override - public boolean start() { - return true; - } + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + _name = name; + return true; + } - @Override - public boolean stop() { - return true; - } + @PostConstruct + public void init() { + for(HypervisorGuru guru : _hvGuruList) { + _hvGurus.put(guru.getHypervisorType(), guru); + } + } - @Override - public String getName() { - return _name; - } + @Override + public boolean start() { + return true; + } - public HypervisorGuru getGuru(HypervisorType hypervisorType) { - return _hvGurus.get(hypervisorType); - } - + @Override + public boolean stop() { + return true; + } + + @Override + public String getName() { + return _name; + } + + @Override + public HypervisorGuru getGuru(HypervisorType hypervisorType) { + return _hvGurus.get(hypervisorType); + } + + @Override public long getGuruProcessedCommandTargetHost(long hostId, Command cmd) { - HostVO hostVo = _hostDao.findById(hostId); - HypervisorGuru hvGuru = null; - if(hostVo.getType() == Host.Type.Routing) { - hvGuru = _hvGurus.get(hostVo.getHypervisorType()); - } - - if(hvGuru != null) - return hvGuru.getCommandHostDelegation(hostId, cmd); - - return hostId; + HostVO hostVo = _hostDao.findById(hostId); + HypervisorGuru hvGuru = null; + if(hostVo.getType() == Host.Type.Routing) { + hvGuru = _hvGurus.get(hostVo.getHypervisorType()); + } + + if(hvGuru != null) + return hvGuru.getCommandHostDelegation(hostId, cmd); + + return hostId; } } diff --git a/server/src/com/cloud/maint/UpgradeManagerImpl.java b/server/src/com/cloud/maint/UpgradeManagerImpl.java index 2f50dffad71..03c7d2f0cea 100644 --- a/server/src/com/cloud/maint/UpgradeManagerImpl.java +++ b/server/src/com/cloud/maint/UpgradeManagerImpl.java @@ -36,15 +36,14 @@ import javax.naming.ConfigurationException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; -import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; +import org.apache.commons.httpclient.methods.GetMethod; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.maint.dao.AgentUpgradeDao; import com.cloud.utils.PropertiesUtil; -import com.cloud.utils.component.ComponentLocator; /** * @@ -57,7 +56,7 @@ import com.cloud.utils.component.ComponentLocator; @Component @Local(UpgradeManager.class) public class UpgradeManagerImpl implements UpgradeManager { - private final static Logger s_logger = Logger.getLogger(UpgradeManagerImpl.class); + private final static Logger s_logger = Logger.getLogger(UpgradeManagerImpl.class); private static final MultiThreadedHttpConnectionManager s_httpClientManager = new MultiThreadedHttpConnectionManager(); String _name; @@ -66,10 +65,10 @@ public class UpgradeManagerImpl implements UpgradeManager { // String _upgradeUrl; String _agentPath; long _checkInterval; - + @Inject AgentUpgradeDao _upgradeDao; @Inject ConfigurationDao _configDao; - + @Override public State registerForUpgrade(long hostId, String version) { State state = State.UpToDate; @@ -90,11 +89,11 @@ public class UpgradeManagerImpl implements UpgradeManager { _upgradeDao.persist(vo); } } - */ - + */ + return state; } - + public String deployNewAgent(String url) { s_logger.info("Updating agent with binary from " + url); @@ -132,18 +131,18 @@ public class UpgradeManagerImpl implements UpgradeManager { s_logger.debug("New Agent zip file is now retrieved"); } catch (final HttpException e) { - return "Unable to retrieve the file from " + url; + return "Unable to retrieve the file from " + url; } catch (final IOException e) { - return "Unable to retrieve the file from " + url; + return "Unable to retrieve the file from " + url; } finally { - method.releaseConnection(); + method.releaseConnection(); } - + file.delete(); - + return "File will be deployed."; } - + // @Override // public String getAgentUrl() { // return _upgradeUrl; @@ -174,7 +173,7 @@ public class UpgradeManagerImpl implements UpgradeManager { } //_upgradeUrl = configs.get("upgrade.url"); - + // if (_upgradeUrl == null) { // s_logger.debug("There is no upgrade url found in configuration table"); // // _upgradeUrl = "http://updates.vmops.com/releases/rss.xml"; diff --git a/server/src/com/cloud/migration/Db21to22MigrationUtil.java b/server/src/com/cloud/migration/Db21to22MigrationUtil.java index b6ff9069ed3..66a7d59f53a 100755 --- a/server/src/com/cloud/migration/Db21to22MigrationUtil.java +++ b/server/src/com/cloud/migration/Db21to22MigrationUtil.java @@ -19,9 +19,7 @@ package com.cloud.migration; import java.io.File; import java.sql.PreparedStatement; import java.sql.ResultSet; -import java.util.LinkedList; import java.util.List; -import java.util.Queue; import javax.inject.Inject; @@ -32,21 +30,17 @@ import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.ResourceCountVO; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.configuration.dao.ResourceCountDao; -import com.cloud.dc.ClusterVO; import com.cloud.dc.DataCenter.NetworkType; import com.cloud.dc.DataCenterVO; import com.cloud.dc.dao.ClusterDao; import com.cloud.dc.dao.DataCenterDao; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; -import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; -import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.resource.ResourceManager; import com.cloud.user.Account; import com.cloud.user.dao.AccountDao; import com.cloud.utils.PropertiesUtil; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; @@ -56,37 +50,37 @@ import com.cloud.vm.dao.InstanceGroupDao; import com.cloud.vm.dao.InstanceGroupVMMapDao; public class Db21to22MigrationUtil { - - @Inject private ClusterDao _clusterDao; - @Inject private HostDao _hostDao; - @Inject private AccountDao _accountDao; - @Inject private DomainDao _domainDao; - @Inject private ResourceCountDao _resourceCountDao; - @Inject private InstanceGroupDao _vmGroupDao; - @Inject private InstanceGroupVMMapDao _groupVMMapDao; - @Inject private ConfigurationDao _configurationDao; - @Inject private DataCenterDao _zoneDao; - @Inject private ResourceManager _resourceMgr; - + + @Inject private ClusterDao _clusterDao; + @Inject private HostDao _hostDao; + @Inject private AccountDao _accountDao; + @Inject private DomainDao _domainDao; + @Inject private ResourceCountDao _resourceCountDao; + @Inject private InstanceGroupDao _vmGroupDao; + @Inject private InstanceGroupVMMapDao _groupVMMapDao; + @Inject private ConfigurationDao _configurationDao; + @Inject private DataCenterDao _zoneDao; + @Inject private ResourceManager _resourceMgr; + private void doMigration() { setupComponents(); migrateResourceCounts(); - + setupInstanceGroups(); migrateZones(); - + setupClusterGuid(); - + System.out.println("Migration done"); } - + /* add guid in cluster table */ private void setupClusterGuid() { - - //FIXME moving out XenServer code out of server. This upgrade step need to be taken care of - /* + + //FIXME moving out XenServer code out of server. This upgrade step need to be taken care of + /* XenServerConnectionPool _connPool = XenServerConnectionPool.getInstance(); List clusters = _clusterDao.listByHyTypeWithoutGuid(HypervisorType.XenServer.toString()); for (ClusterVO cluster : clusters) { @@ -120,34 +114,34 @@ public class Db21to22MigrationUtil { break; } } - */ + */ } - + /** * This method migrates the zones based on bug: 7204 * based on the param direct.attach.untagged.vlan.enabled, we update zone to basic or advanced for 2.2 */ private void migrateZones(){ - try { - System.out.println("Migrating zones"); - String val = _configurationDao.getValue("direct.attach.untagged.vlan.enabled"); - NetworkType networkType; - if(val == null || val.equalsIgnoreCase("true")){ - networkType = NetworkType.Basic; - }else{ - networkType = NetworkType.Advanced; - } - List existingZones = _zoneDao.listAll(); - for(DataCenterVO zone : existingZones){ - zone.setNetworkType(networkType); - _zoneDao.update(zone.getId(), zone); - } - } catch (Exception e) { - System.out.println("Unhandled exception in migrateZones()" + e); - } + try { + System.out.println("Migrating zones"); + String val = _configurationDao.getValue("direct.attach.untagged.vlan.enabled"); + NetworkType networkType; + if(val == null || val.equalsIgnoreCase("true")){ + networkType = NetworkType.Basic; + }else{ + networkType = NetworkType.Advanced; + } + List existingZones = _zoneDao.listAll(); + for(DataCenterVO zone : existingZones){ + zone.setNetworkType(networkType); + _zoneDao.update(zone.getId(), zone); + } + } catch (Exception e) { + System.out.println("Unhandled exception in migrateZones()" + e); + } } - + private void migrateResourceCounts() { System.out.println("migrating resource counts"); SearchBuilder sb = _resourceCountDao.createSearchBuilder(); @@ -175,46 +169,46 @@ public class Db21to22MigrationUtil { private void setupComponents() { } - + private void setupInstanceGroups() { - System.out.println("setting up vm instance groups"); - - //Search for all the vms that have not null groups - Long vmId = 0L; - Long accountId = 0L; - String groupName; - Transaction txn = Transaction.open(Transaction.CLOUD_DB); - txn.start(); - try { - String request = "SELECT vm.id, uservm.account_id, vm.group from vm_instance vm, user_vm uservm where vm.group is not null and vm.removed is null and vm.id=uservm.id order by id"; - System.out.println(request); - PreparedStatement statement = txn.prepareStatement(request); - ResultSet result = statement.executeQuery(); - while (result.next()) { - vmId = result.getLong(1); - accountId = result.getLong(2); - groupName = result.getString(3); - InstanceGroupVO group = _vmGroupDao.findByAccountAndName(accountId, groupName); - //Create vm group if the group doesn't exist for this account - if (group == null) { - group = new InstanceGroupVO(groupName, accountId); - group = _vmGroupDao.persist(group); - System.out.println("Created new isntance group with name " + groupName + " for account id=" + accountId); - } - - if (group != null) { - InstanceGroupVMMapVO groupVmMapVO = new InstanceGroupVMMapVO(group.getId(), vmId); - _groupVMMapDao.persist(groupVmMapVO); - System.out.println("Assigned vm id=" + vmId + " to group with name " + groupName + " for account id=" + accountId); - } - } - txn.commit(); - statement.close(); - } catch (Exception e) { - System.out.println("Unhandled exception: " + e); - } finally { - txn.close(); - } + System.out.println("setting up vm instance groups"); + + //Search for all the vms that have not null groups + Long vmId = 0L; + Long accountId = 0L; + String groupName; + Transaction txn = Transaction.open(Transaction.CLOUD_DB); + txn.start(); + try { + String request = "SELECT vm.id, uservm.account_id, vm.group from vm_instance vm, user_vm uservm where vm.group is not null and vm.removed is null and vm.id=uservm.id order by id"; + System.out.println(request); + PreparedStatement statement = txn.prepareStatement(request); + ResultSet result = statement.executeQuery(); + while (result.next()) { + vmId = result.getLong(1); + accountId = result.getLong(2); + groupName = result.getString(3); + InstanceGroupVO group = _vmGroupDao.findByAccountAndName(accountId, groupName); + //Create vm group if the group doesn't exist for this account + if (group == null) { + group = new InstanceGroupVO(groupName, accountId); + group = _vmGroupDao.persist(group); + System.out.println("Created new isntance group with name " + groupName + " for account id=" + accountId); + } + + if (group != null) { + InstanceGroupVMMapVO groupVmMapVO = new InstanceGroupVMMapVO(group.getId(), vmId); + _groupVMMapDao.persist(groupVmMapVO); + System.out.println("Assigned vm id=" + vmId + " to group with name " + groupName + " for account id=" + accountId); + } + } + txn.commit(); + statement.close(); + } catch (Exception e) { + System.out.println("Unhandled exception: " + e); + } finally { + txn.close(); + } } diff --git a/server/src/com/cloud/network/ExteralIpAddressAllocator.java b/server/src/com/cloud/network/ExteralIpAddressAllocator.java index f8b5c152519..eca5ff6eda9 100644 --- a/server/src/com/cloud/network/ExteralIpAddressAllocator.java +++ b/server/src/com/cloud/network/ExteralIpAddressAllocator.java @@ -19,7 +19,6 @@ package com.cloud.network; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; -import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; @@ -33,136 +32,135 @@ import org.apache.log4j.Logger; import org.springframework.stereotype.Component; import com.cloud.configuration.dao.ConfigurationDao; - import com.cloud.dc.dao.VlanDao; import com.cloud.network.dao.IPAddressDao; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; @Component @Local(value=IpAddrAllocator.class) public class ExteralIpAddressAllocator implements IpAddrAllocator{ - private static final Logger s_logger = Logger.getLogger(ExteralIpAddressAllocator.class); - String _name; + private static final Logger s_logger = Logger.getLogger(ExteralIpAddressAllocator.class); + String _name; @Inject ConfigurationDao _configDao = null; @Inject IPAddressDao _ipAddressDao = null; @Inject VlanDao _vlanDao; - private boolean _isExternalIpAllocatorEnabled = false; - private String _externalIpAllocatorUrl = null; + private boolean _isExternalIpAllocatorEnabled = false; + private String _externalIpAllocatorUrl = null; - - @Override - public IpAddr getPrivateIpAddress(String macAddr, long dcId, long podId) { - if (_externalIpAllocatorUrl == null || this._externalIpAllocatorUrl.equalsIgnoreCase("")) { - return new IpAddr(); - } - String urlString = this._externalIpAllocatorUrl + "?command=getIpAddr&mac=" + macAddr + "&dc=" + dcId + "&pod=" + podId; - s_logger.debug("getIP:" + urlString); - - BufferedReader in = null; - try { - URL url = new URL(urlString); - URLConnection conn = url.openConnection(); - conn.setReadTimeout(30000); - - in = new BufferedReader(new InputStreamReader(conn.getInputStream())); - String inputLine; - while ((inputLine = in.readLine()) != null) { - s_logger.debug(inputLine); - String[] tokens = inputLine.split(","); - if (tokens.length != 3) { - s_logger.debug("the return value should be: mac,netmask,gateway"); - return new IpAddr(); - } - return new IpAddr(tokens[0], tokens[1], tokens[2]); - } - - return new IpAddr(); - } catch (MalformedURLException e) { - throw new CloudRuntimeException("URL is malformed " + urlString, e); - } catch (IOException e) { - return new IpAddr(); - } finally { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - } - } - } - - } - - @Override - public IpAddr getPublicIpAddress(String macAddr, long dcId, long podId) { - /*TODO: call API to get ip address from external DHCP server*/ - return getPrivateIpAddress(macAddr, dcId, podId); - } - - @Override - public boolean releasePrivateIpAddress(String ip, long dcId, long podId) { - /*TODO: call API to release the ip address from external DHCP server*/ - if (_externalIpAllocatorUrl == null || this._externalIpAllocatorUrl.equalsIgnoreCase("")) { - return false; - } - - String urlString = this._externalIpAllocatorUrl + "?command=releaseIpAddr&ip=" + ip + "&dc=" + dcId + "&pod=" + podId; - - s_logger.debug("releaseIP:" + urlString); - BufferedReader in = null; - try { - URL url = new URL(urlString); - URLConnection conn = url.openConnection(); - conn.setReadTimeout(30000); - - in = new BufferedReader(new InputStreamReader(conn.getInputStream())); - - return true; - } catch (MalformedURLException e) { - throw new CloudRuntimeException("URL is malformed " + urlString, e); - } catch (IOException e) { - return false; - } finally { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - } - } - } - } - - @Override - public boolean releasePublicIpAddress(String ip, long dcId, long podId) { - /*TODO: call API to release the ip address from external DHCP server*/ - return releasePrivateIpAddress(ip, dcId, podId); - } - - public boolean exteralIpAddressAllocatorEnabled() { - return _isExternalIpAllocatorEnabled; - } - - @Override - public boolean configure(String name, Map params) throws ConfigurationException { - _isExternalIpAllocatorEnabled = Boolean.parseBoolean(_configDao.getValue("direct.attach.network.externalIpAllocator.enabled")); - _externalIpAllocatorUrl = _configDao.getValue("direct.attach.network.externalIpAllocator.url"); - _name = name; - - return true; - } - @Override - public String getName() { - return _name; - } + @Override + public IpAddr getPrivateIpAddress(String macAddr, long dcId, long podId) { + if (_externalIpAllocatorUrl == null || this._externalIpAllocatorUrl.equalsIgnoreCase("")) { + return new IpAddr(); + } + String urlString = this._externalIpAllocatorUrl + "?command=getIpAddr&mac=" + macAddr + "&dc=" + dcId + "&pod=" + podId; + s_logger.debug("getIP:" + urlString); - @Override - public boolean start() { - return true; - } + BufferedReader in = null; + try { + URL url = new URL(urlString); + URLConnection conn = url.openConnection(); + conn.setReadTimeout(30000); - @Override - public boolean stop() { - return true; - } + in = new BufferedReader(new InputStreamReader(conn.getInputStream())); + String inputLine; + while ((inputLine = in.readLine()) != null) { + s_logger.debug(inputLine); + String[] tokens = inputLine.split(","); + if (tokens.length != 3) { + s_logger.debug("the return value should be: mac,netmask,gateway"); + return new IpAddr(); + } + return new IpAddr(tokens[0], tokens[1], tokens[2]); + } + + return new IpAddr(); + } catch (MalformedURLException e) { + throw new CloudRuntimeException("URL is malformed " + urlString, e); + } catch (IOException e) { + return new IpAddr(); + } finally { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + } + } + } + + } + + @Override + public IpAddr getPublicIpAddress(String macAddr, long dcId, long podId) { + /*TODO: call API to get ip address from external DHCP server*/ + return getPrivateIpAddress(macAddr, dcId, podId); + } + + @Override + public boolean releasePrivateIpAddress(String ip, long dcId, long podId) { + /*TODO: call API to release the ip address from external DHCP server*/ + if (_externalIpAllocatorUrl == null || this._externalIpAllocatorUrl.equalsIgnoreCase("")) { + return false; + } + + String urlString = this._externalIpAllocatorUrl + "?command=releaseIpAddr&ip=" + ip + "&dc=" + dcId + "&pod=" + podId; + + s_logger.debug("releaseIP:" + urlString); + BufferedReader in = null; + try { + URL url = new URL(urlString); + URLConnection conn = url.openConnection(); + conn.setReadTimeout(30000); + + in = new BufferedReader(new InputStreamReader(conn.getInputStream())); + + return true; + } catch (MalformedURLException e) { + throw new CloudRuntimeException("URL is malformed " + urlString, e); + } catch (IOException e) { + return false; + } finally { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + } + } + } + } + + @Override + public boolean releasePublicIpAddress(String ip, long dcId, long podId) { + /*TODO: call API to release the ip address from external DHCP server*/ + return releasePrivateIpAddress(ip, dcId, podId); + } + + @Override + public boolean exteralIpAddressAllocatorEnabled() { + return _isExternalIpAllocatorEnabled; + } + + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + _isExternalIpAllocatorEnabled = Boolean.parseBoolean(_configDao.getValue("direct.attach.network.externalIpAllocator.enabled")); + _externalIpAllocatorUrl = _configDao.getValue("direct.attach.network.externalIpAllocator.url"); + _name = name; + + return true; + } + + @Override + public String getName() { + return _name; + } + + @Override + public boolean start() { + return true; + } + + @Override + public boolean stop() { + return true; + } } diff --git a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java index 93e0ef6d01d..e95dd175fc8 100755 --- a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java @@ -27,22 +27,21 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.command.admin.network.AddNetworkDeviceCmd; +import org.apache.cloudstack.api.command.admin.network.DeleteNetworkDeviceCmd; import org.apache.cloudstack.api.command.admin.network.ListNetworkDeviceCmd; +import org.apache.cloudstack.api.response.NetworkDeviceResponse; import org.apache.cloudstack.network.ExternalNetworkDeviceManager; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; import com.cloud.agent.AgentManager; import com.cloud.api.ApiDBUtils; - -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.IdentityService; -import org.apache.cloudstack.api.command.admin.network.DeleteNetworkDeviceCmd; import com.cloud.baremetal.ExternalDhcpManager; import com.cloud.baremetal.PxeServerManager; -import com.cloud.baremetal.PxeServerProfile; import com.cloud.baremetal.PxeServerManager.PxeServerType; +import com.cloud.baremetal.PxeServerProfile; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.DataCenter; import com.cloud.dc.Pod; @@ -64,14 +63,11 @@ import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; import com.cloud.network.dao.VpnUserDao; import com.cloud.network.rules.dao.PortForwardingRulesDao; import com.cloud.offerings.dao.NetworkOfferingDao; -import com.cloud.server.ManagementServer; -import org.apache.cloudstack.api.response.NetworkDeviceResponse; import com.cloud.server.api.response.NwDeviceDhcpResponse; import com.cloud.server.api.response.PxePingResponse; import com.cloud.user.AccountManager; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.UserStatisticsDao; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.NicDao; @@ -112,16 +108,16 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa // obsolete // private final static IdentityService _identityService = (IdentityService)ComponentLocator.getLocator(ManagementServer.Name).getManager(IdentityService.class); - + private static final org.apache.log4j.Logger s_logger = Logger.getLogger(ExternalNetworkDeviceManagerImpl.class); protected String _name; - + @Override public boolean configure(String name, Map params) throws ConfigurationException { _name = name; return true; } - + @Override public boolean start() { return true; @@ -136,21 +132,21 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa public String getName() { return _name; } - + @Override public Host addNetworkDevice(AddNetworkDeviceCmd cmd) { Map paramList = cmd.getParamList(); if (paramList == null) { throw new CloudRuntimeException("Parameter list is null"); } - + Collection paramsCollection = paramList.values(); HashMap params = (HashMap) (paramsCollection.toArray())[0]; if (cmd.getDeviceType().equalsIgnoreCase(NetworkDevice.ExternalDhcp.getName())) { //Long zoneId = _identityService.getIdentityId("data_center", (String) params.get(ApiConstants.ZONE_ID)); //Long podId = _identityService.getIdentityId("host_pod_ref", (String)params.get(ApiConstants.POD_ID)); - Long zoneId = Long.valueOf((String) params.get(ApiConstants.ZONE_ID)); - Long podId = Long.valueOf((String)params.get(ApiConstants.POD_ID)); + Long zoneId = Long.valueOf((String) params.get(ApiConstants.ZONE_ID)); + Long podId = Long.valueOf((String)params.get(ApiConstants.POD_ID)); String type = (String) params.get(ApiConstants.DHCP_SERVER_TYPE); String url = (String) params.get(ApiConstants.URL); String username = (String) params.get(ApiConstants.USERNAME); @@ -217,7 +213,7 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa } else { throw new CloudRuntimeException("Unsupported network device type:" + host.getType()); } - + response.setId(device.getUuid()); return response; } @@ -234,19 +230,19 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa // } else { // List devs = _hostDao.listBy(type, zoneId); // res.addAll(devs); - // } - - // return res; + // } + + // return res; return null; } - + @Override public List listNetworkDevice(ListNetworkDeviceCmd cmd) { Map paramList = cmd.getParamList(); if (paramList == null) { throw new CloudRuntimeException("Parameter list is null"); } - + List res; Collection paramsCollection = paramList.values(); HashMap params = (HashMap) (paramsCollection.toArray())[0]; @@ -275,13 +271,13 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa } else { throw new CloudRuntimeException("Unknown network device type:" + cmd.getDeviceType()); } - + return res; } @Override public boolean deleteNetworkDevice(DeleteNetworkDeviceCmd cmd) { - HostVO device = _hostDao.findById(cmd.getId()); - return true; + HostVO device = _hostDao.findById(cmd.getId()); + return true; } } diff --git a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java index d49f4aa168e..7c8a6f5a800 100644 --- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java +++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java @@ -23,27 +23,31 @@ import java.util.List; import java.util.Map; import javax.ejb.Local; +import javax.inject.Inject; import javax.naming.ConfigurationException; import org.apache.cloudstack.acl.ControlledEntity; -import org.apache.cloudstack.api.command.admin.autoscale.CreateCounterCmd; -import org.apache.cloudstack.api.command.user.autoscale.*; -import org.apache.log4j.Logger; - import org.apache.cloudstack.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiDispatcher; import org.apache.cloudstack.api.BaseListAccountResourcesCmd; +import org.apache.cloudstack.api.command.admin.autoscale.CreateCounterCmd; import org.apache.cloudstack.api.command.user.autoscale.CreateAutoScalePolicyCmd; import org.apache.cloudstack.api.command.user.autoscale.CreateAutoScaleVmGroupCmd; +import org.apache.cloudstack.api.command.user.autoscale.CreateAutoScaleVmProfileCmd; import org.apache.cloudstack.api.command.user.autoscale.CreateConditionCmd; -import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; +import org.apache.cloudstack.api.command.user.autoscale.ListAutoScalePoliciesCmd; import org.apache.cloudstack.api.command.user.autoscale.ListAutoScaleVmGroupsCmd; +import org.apache.cloudstack.api.command.user.autoscale.ListAutoScaleVmProfilesCmd; import org.apache.cloudstack.api.command.user.autoscale.ListConditionsCmd; +import org.apache.cloudstack.api.command.user.autoscale.ListCountersCmd; import org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScalePolicyCmd; +import org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScaleVmGroupCmd; import org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScaleVmProfileCmd; +import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; +import org.apache.log4j.Logger; import org.springframework.stereotype.Component; +import com.cloud.api.ApiDBUtils; +import com.cloud.api.ApiDispatcher; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.dao.ConfigurationDao; @@ -81,7 +85,6 @@ import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.UserDao; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; -import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; diff --git a/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java b/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java index e5ee604a2dd..0c79676b8e1 100644 --- a/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java +++ b/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java @@ -32,7 +32,6 @@ import com.cloud.network.rules.FirewallRule.TrafficType; import com.cloud.network.rules.FirewallRuleVO; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.tags.dao.ResourceTagsDaoImpl; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericSearchBuilder; @@ -286,11 +285,12 @@ public class FirewallRulesDaoImpl extends GenericDaoBase i if (purpose != null) { sc.setParameters("purpose", purpose); } - + sc.setParameters("trafficType", trafficType); return listBy(sc); } + @Override @DB public boolean remove(Long id) { Transaction txn = Transaction.currentTxn(); @@ -316,7 +316,7 @@ public class FirewallRulesDaoImpl extends GenericDaoBase i public List listByIpAndPurposeWithState(Long ipId, Purpose purpose, State state) { SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("ipId", ipId); - + if (state != null) { sc.setParameters("state", state); } diff --git a/server/src/com/cloud/network/dao/IPAddressDaoImpl.java b/server/src/com/cloud/network/dao/IPAddressDaoImpl.java index 833c8314ca8..4d6bd080e2a 100755 --- a/server/src/com/cloud/network/dao/IPAddressDaoImpl.java +++ b/server/src/com/cloud/network/dao/IPAddressDaoImpl.java @@ -35,7 +35,6 @@ import com.cloud.network.IPAddressVO; import com.cloud.network.IpAddress.State; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.tags.dao.ResourceTagsDaoImpl; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericSearchBuilder; @@ -62,11 +61,11 @@ public class IPAddressDaoImpl extends GenericDaoBase implemen @Inject protected VlanDaoImpl _vlanDao; protected GenericSearchBuilder CountFreePublicIps; @Inject ResourceTagsDaoImpl _tagsDao; - + // make it public for JUnit test public IPAddressDaoImpl() { } - + @PostConstruct public void init() { AllFieldsSearch = createSearchBuilder(); @@ -101,7 +100,7 @@ public class IPAddressDaoImpl extends GenericDaoBase implemen AllocatedIpCount.and("vlan", AllocatedIpCount.entity().getVlanId(), Op.EQ); AllocatedIpCount.and("allocated", AllocatedIpCount.entity().getAllocatedTime(), Op.NNULL); AllocatedIpCount.done(); - + AllIpCountForDashboard = createSearchBuilder(Integer.class); AllIpCountForDashboard.select(null, Func.COUNT, AllIpCountForDashboard.entity().getAddress()); AllIpCountForDashboard.and("dc", AllIpCountForDashboard.entity().getDataCenterId(), Op.EQ); @@ -111,7 +110,7 @@ public class IPAddressDaoImpl extends GenericDaoBase implemen virtaulNetworkVlan.and("vlanType", virtaulNetworkVlan.entity().getVlanType(), SearchCriteria.Op.EQ); AllIpCountForDashboard.join("vlan", virtaulNetworkVlan, virtaulNetworkVlan.entity().getId(), - AllIpCountForDashboard.entity().getVlanId(), JoinBuilder.JoinType.INNER); + AllIpCountForDashboard.entity().getVlanId(), JoinBuilder.JoinType.INNER); virtaulNetworkVlan.done(); AllIpCountForDashboard.done(); @@ -121,7 +120,7 @@ public class IPAddressDaoImpl extends GenericDaoBase implemen AllocatedIpCountForAccount.and("allocated", AllocatedIpCountForAccount.entity().getAllocatedTime(), Op.NNULL); AllocatedIpCountForAccount.and("network", AllocatedIpCountForAccount.entity().getAssociatedWithNetworkId(), Op.NNULL); AllocatedIpCountForAccount.done(); - + CountFreePublicIps = createSearchBuilder(Long.class); CountFreePublicIps.select(null, Func.COUNT, null); CountFreePublicIps.and("state", CountFreePublicIps.entity().getState(), SearchCriteria.Op.EQ); @@ -167,14 +166,14 @@ public class IPAddressDaoImpl extends GenericDaoBase implemen sc.setParameters("accountId", accountId); return listBy(sc); } - + @Override public List listByVlanId(long vlanId) { SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("vlan", vlanId); return listBy(sc); } - + @Override public IPAddressVO findByIpAndSourceNetworkId(long networkId, String ipAddress) { SearchCriteria sc = AllFieldsSearch.create(); @@ -197,7 +196,7 @@ public class IPAddressDaoImpl extends GenericDaoBase implemen sc.setParameters("dataCenterId", dcId); return listBy(sc); } - + @Override public List listByDcIdIpAddress(long dcId, String ipAddress) { SearchCriteria sc = AllFieldsSearch.create(); @@ -205,19 +204,19 @@ public class IPAddressDaoImpl extends GenericDaoBase implemen sc.setParameters("ipAddress", ipAddress); return listBy(sc); } - + @Override public List listByAssociatedNetwork(long networkId, Boolean isSourceNat) { SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("network", networkId); - + if (isSourceNat != null) { sc.setParameters("sourceNat", isSourceNat); } - + return listBy(sc); } - + @Override public List listStaticNatPublicIps(long networkId) { SearchCriteria sc = AllFieldsSearch.create(); @@ -225,12 +224,12 @@ public class IPAddressDaoImpl extends GenericDaoBase implemen sc.setParameters("oneToOneNat", true); return listBy(sc); } - + @Override public IPAddressVO findByAssociatedVmId(long vmId) { SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("associatedWithVmId", vmId); - + return findOneBy(sc); } @@ -248,13 +247,13 @@ public class IPAddressDaoImpl extends GenericDaoBase implemen SearchCriteria sc = AllIpCountForDashboard.create(); sc.setParameters("dc", dcId); if (onlyCountAllocated){ - sc.setParameters("state", State.Free); + sc.setParameters("state", State.Free); } sc.setJoinParameters("vlan", "vlanType", vlanType.toString()); return customSearch(sc, null).get(0); } - + @Override @DB public int countIPs(long dcId, Long accountId, String vlanId, String vlanGateway, String vlanNetmask) { @@ -285,35 +284,35 @@ public class IPAddressDaoImpl extends GenericDaoBase implemen public IPAddressVO markAsUnavailable(long ipAddressId) { SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("id", ipAddressId); - + IPAddressVO ip = createForUpdate(); ip.setState(State.Releasing); if (update(ip, sc) != 1) { return null; } - + return findOneBy(sc); } @Override public long countAllocatedIPsForAccount(long accountId) { - SearchCriteria sc = AllocatedIpCountForAccount.create(); + SearchCriteria sc = AllocatedIpCountForAccount.create(); sc.setParameters("account", accountId); return customSearch(sc, null).get(0); } - + @Override public List listByPhysicalNetworkId(long physicalNetworkId) { SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("physicalNetworkId", physicalNetworkId); return listBy(sc); } - + @Override public long countFreePublicIPs() { - SearchCriteria sc = CountFreePublicIps.create(); - sc.setParameters("state", State.Free); - sc.setJoinParameters("vlans", "vlanType", VlanType.VirtualNetwork); + SearchCriteria sc = CountFreePublicIps.create(); + sc.setParameters("state", State.Free); + sc.setJoinParameters("vlans", "vlanType", VlanType.VirtualNetwork); return customSearch(sc, null).get(0); } @@ -321,21 +320,22 @@ public class IPAddressDaoImpl extends GenericDaoBase implemen public List listByAssociatedVpc(long vpcId, Boolean isSourceNat) { SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("vpcId", vpcId); - + if (isSourceNat != null) { sc.setParameters("sourceNat", isSourceNat); } - + return listBy(sc); } - + + @Override public long countFreeIPsInNetwork(long networkId) { SearchCriteria sc = CountFreePublicIps.create(); sc.setParameters("state", State.Free); sc.setParameters("networkId", networkId); return customSearch(sc, null).get(0); } - + @Override @DB public boolean remove(Long id) { diff --git a/server/src/com/cloud/network/dao/LoadBalancerDaoImpl.java b/server/src/com/cloud/network/dao/LoadBalancerDaoImpl.java index 31180db56e3..ec9dbc57a71 100644 --- a/server/src/com/cloud/network/dao/LoadBalancerDaoImpl.java +++ b/server/src/com/cloud/network/dao/LoadBalancerDaoImpl.java @@ -29,7 +29,6 @@ import org.springframework.stereotype.Component; import com.cloud.network.LoadBalancerVO; import com.cloud.network.rules.FirewallRule.State; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -135,5 +134,5 @@ public class LoadBalancerDaoImpl extends GenericDaoBase im sc.setParameters("state", State.Add.toString(), State.Revoke.toString()); return listBy(sc); } - + } diff --git a/server/src/com/cloud/network/dao/NetworkDaoImpl.java b/server/src/com/cloud/network/dao/NetworkDaoImpl.java index c6a65dd604f..206373ec8fb 100644 --- a/server/src/com/cloud/network/dao/NetworkDaoImpl.java +++ b/server/src/com/cloud/network/dao/NetworkDaoImpl.java @@ -45,7 +45,6 @@ import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDaoImpl; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.tags.dao.ResourceTagsDaoImpl; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericSearchBuilder; diff --git a/server/src/com/cloud/network/dao/PhysicalNetworkDaoImpl.java b/server/src/com/cloud/network/dao/PhysicalNetworkDaoImpl.java index e1603dbfa01..f4648fbcde7 100644 --- a/server/src/com/cloud/network/dao/PhysicalNetworkDaoImpl.java +++ b/server/src/com/cloud/network/dao/PhysicalNetworkDaoImpl.java @@ -25,23 +25,20 @@ import org.springframework.stereotype.Component; import com.cloud.network.Networks.TrafficType; import com.cloud.network.PhysicalNetworkVO; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; -import com.cloud.utils.db.GenericSearchBuilder; import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; -import com.cloud.utils.db.SearchCriteria.Func; import com.cloud.utils.db.SearchCriteria.Op; @Component @Local(value=PhysicalNetworkDao.class) @DB(txn=false) public class PhysicalNetworkDaoImpl extends GenericDaoBase implements PhysicalNetworkDao { final SearchBuilder ZoneSearch; - + @Inject protected PhysicalNetworkTrafficTypeDaoImpl _trafficTypeDao; - + protected PhysicalNetworkDaoImpl() { super(); ZoneSearch = createSearchBuilder(); @@ -65,7 +62,7 @@ public class PhysicalNetworkDaoImpl extends GenericDaoBase listByZoneAndTrafficType(long dataCenterId, TrafficType trafficType) { - + SearchBuilder trafficTypeSearch = _trafficTypeDao.createSearchBuilder(); PhysicalNetworkTrafficTypeVO trafficTypeEntity = trafficTypeSearch.entity(); trafficTypeSearch.and("trafficType", trafficTypeSearch.entity().getTrafficType(), SearchCriteria.Op.EQ); diff --git a/server/src/com/cloud/network/dao/Site2SiteVpnConnectionDaoImpl.java b/server/src/com/cloud/network/dao/Site2SiteVpnConnectionDaoImpl.java index 2dbae756d0d..8ad61767cae 100644 --- a/server/src/com/cloud/network/dao/Site2SiteVpnConnectionDaoImpl.java +++ b/server/src/com/cloud/network/dao/Site2SiteVpnConnectionDaoImpl.java @@ -25,10 +25,8 @@ import javax.inject.Inject; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; -import com.cloud.network.IPAddressVO; import com.cloud.network.Site2SiteVpnConnectionVO; import com.cloud.network.Site2SiteVpnGatewayVO; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.JoinBuilder.JoinType; import com.cloud.utils.db.SearchBuilder; @@ -41,35 +39,35 @@ public class Site2SiteVpnConnectionDaoImpl extends GenericDaoBase AllFieldsSearch; private SearchBuilder VpcSearch; private SearchBuilder VpnGatewaySearch; public Site2SiteVpnConnectionDaoImpl() { } - + @PostConstruct protected void init() { AllFieldsSearch = createSearchBuilder(); AllFieldsSearch.and("customerGatewayId", AllFieldsSearch.entity().getCustomerGatewayId(), SearchCriteria.Op.EQ); AllFieldsSearch.and("vpnGatewayId", AllFieldsSearch.entity().getVpnGatewayId(), SearchCriteria.Op.EQ); AllFieldsSearch.done(); - + VpcSearch = createSearchBuilder(); VpnGatewaySearch = _vpnGatewayDao.createSearchBuilder(); VpnGatewaySearch.and("vpcId", VpnGatewaySearch.entity().getVpcId(), SearchCriteria.Op.EQ); VpcSearch.join("vpnGatewaySearch", VpnGatewaySearch, VpnGatewaySearch.entity().getId(), VpcSearch.entity().getVpnGatewayId(), JoinType.INNER); VpcSearch.done(); } - + @Override public List listByCustomerGatewayId(long id) { SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("customerGatewayId", id); return listBy(sc); } - + @Override public List listByVpnGatewayId(long id) { SearchCriteria sc = AllFieldsSearch.create(); diff --git a/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java b/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java index b5e0ad5e582..491b172c082 100644 --- a/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java +++ b/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java @@ -23,7 +23,6 @@ import org.apache.log4j.Logger; import org.springframework.stereotype.Component; import com.cloud.network.Site2SiteVpnGatewayVO; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -32,9 +31,9 @@ import com.cloud.utils.db.SearchCriteria; @Local(value={Site2SiteVpnGatewayDao.class}) public class Site2SiteVpnGatewayDaoImpl extends GenericDaoBase implements Site2SiteVpnGatewayDao { @Inject protected IPAddressDaoImpl _addrDao; - + private static final Logger s_logger = Logger.getLogger(Site2SiteVpnGatewayDaoImpl.class); - + private final SearchBuilder AllFieldsSearch; protected Site2SiteVpnGatewayDaoImpl() { @@ -42,7 +41,7 @@ public class Site2SiteVpnGatewayDaoImpl extends GenericDaoBase sc = AllFieldsSearch.create(); diff --git a/server/src/com/cloud/network/guru/ControlNetworkGuru.java b/server/src/com/cloud/network/guru/ControlNetworkGuru.java index 1195f682819..469a08b31d6 100755 --- a/server/src/com/cloud/network/guru/ControlNetworkGuru.java +++ b/server/src/com/cloud/network/guru/ControlNetworkGuru.java @@ -46,7 +46,7 @@ import com.cloud.network.Networks.Mode; import com.cloud.network.Networks.TrafficType; import com.cloud.offering.NetworkOffering; import com.cloud.user.Account; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; import com.cloud.vm.Nic; diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 85e86f6dfd2..6a40f2b6ec5 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -206,7 +206,7 @@ import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.PasswordGenerator; import com.cloud.utils.StringUtils; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; diff --git a/server/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java b/server/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java index 119ab3d6317..5406ab624e0 100644 --- a/server/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java +++ b/server/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java @@ -27,7 +27,7 @@ import com.cloud.network.dao.FirewallRulesCidrsDaoImpl; import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.FirewallRule.State; import com.cloud.network.rules.PortForwardingRuleVO; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java index 0a0844fc3bc..c7848b8f2fa 100755 --- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java @@ -87,7 +87,7 @@ import com.cloud.uservm.UserVm; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; diff --git a/server/src/com/cloud/network/security/dao/SecurityGroupDaoImpl.java b/server/src/com/cloud/network/security/dao/SecurityGroupDaoImpl.java index bd44328117f..68112c0a7c1 100644 --- a/server/src/com/cloud/network/security/dao/SecurityGroupDaoImpl.java +++ b/server/src/com/cloud/network/security/dao/SecurityGroupDaoImpl.java @@ -26,7 +26,7 @@ import org.springframework.stereotype.Component; import com.cloud.network.security.SecurityGroupVO; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.tags.dao.ResourceTagsDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java index 58c497e7327..00205a10515 100644 --- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java @@ -99,7 +99,7 @@ import com.cloud.user.UserContext; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; diff --git a/server/src/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java b/server/src/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java index c5270f840ce..0ebccabfa8e 100644 --- a/server/src/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java +++ b/server/src/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java @@ -27,7 +27,7 @@ import com.cloud.network.vpc.StaticRoute; import com.cloud.network.vpc.StaticRouteVO; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.tags.dao.ResourceTagsDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericSearchBuilder; diff --git a/server/src/com/cloud/network/vpc/dao/VpcDaoImpl.java b/server/src/com/cloud/network/vpc/dao/VpcDaoImpl.java index b7e4d30ba87..a9b5e182b60 100644 --- a/server/src/com/cloud/network/vpc/dao/VpcDaoImpl.java +++ b/server/src/com/cloud/network/vpc/dao/VpcDaoImpl.java @@ -27,7 +27,7 @@ import com.cloud.network.vpc.Vpc; import com.cloud.network.vpc.VpcVO; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.tags.dao.ResourceTagsDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericSearchBuilder; diff --git a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java index ad75502db42..5b7d9d422cc 100755 --- a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java @@ -70,7 +70,7 @@ import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.PasswordGenerator; import com.cloud.utils.Ternary; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.component.Manager; import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; diff --git a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java index d8371c44b17..e34f7d47c85 100644 --- a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java @@ -70,7 +70,7 @@ import com.cloud.user.dao.AccountDao; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.component.Manager; import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; diff --git a/server/src/com/cloud/projects/dao/ProjectDaoImpl.java b/server/src/com/cloud/projects/dao/ProjectDaoImpl.java index 52ab141f264..e07aecc5ec6 100644 --- a/server/src/com/cloud/projects/dao/ProjectDaoImpl.java +++ b/server/src/com/cloud/projects/dao/ProjectDaoImpl.java @@ -28,7 +28,7 @@ import com.cloud.projects.Project; import com.cloud.projects.ProjectVO; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.tags.dao.ResourceTagsDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericSearchBuilder; diff --git a/server/src/com/cloud/resource/DiscovererBase.java b/server/src/com/cloud/resource/DiscovererBase.java index 6f6d1bace00..8bf599bdf06 100644 --- a/server/src/com/cloud/resource/DiscovererBase.java +++ b/server/src/com/cloud/resource/DiscovererBase.java @@ -34,7 +34,7 @@ import com.cloud.dc.dao.ClusterDao; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.network.NetworkManager; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.net.UrlUtil; public abstract class DiscovererBase implements Discoverer { diff --git a/server/src/com/cloud/servlet/ConsoleProxyServlet.java b/server/src/com/cloud/servlet/ConsoleProxyServlet.java index afa5c407316..c1001da20d6 100644 --- a/server/src/com/cloud/servlet/ConsoleProxyServlet.java +++ b/server/src/com/cloud/servlet/ConsoleProxyServlet.java @@ -46,7 +46,7 @@ import com.cloud.user.User; import com.cloud.uservm.UserVm; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.Transaction; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; diff --git a/server/src/com/cloud/servlet/RegisterCompleteServlet.java b/server/src/com/cloud/servlet/RegisterCompleteServlet.java index 7755851a2d8..d159c887fab 100644 --- a/server/src/com/cloud/servlet/RegisterCompleteServlet.java +++ b/server/src/com/cloud/servlet/RegisterCompleteServlet.java @@ -37,7 +37,7 @@ import com.cloud.user.User; import com.cloud.user.UserVO; import com.cloud.user.dao.UserDao; import com.cloud.utils.SerialVersionUID; -import com.cloud.utils.component.ComponentLocator; + public class RegisterCompleteServlet extends HttpServlet implements ServletContextListener { public static final Logger s_logger = Logger.getLogger(RegisterCompleteServlet.class.getName()); diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index ef36a829ccb..602d10d19c3 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -173,7 +173,7 @@ import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.UriUtils; import com.cloud.utils.component.Adapters; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; diff --git a/server/src/com/cloud/storage/StorageMigrationCleanupMaid.java b/server/src/com/cloud/storage/StorageMigrationCleanupMaid.java index 3ba8483d320..03a49760f98 100644 --- a/server/src/com/cloud/storage/StorageMigrationCleanupMaid.java +++ b/server/src/com/cloud/storage/StorageMigrationCleanupMaid.java @@ -25,7 +25,7 @@ import com.cloud.cluster.CheckPointManager; import com.cloud.cluster.CleanupMaid; import com.cloud.server.ManagementServer; import com.cloud.storage.dao.VolumeDao; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.Transaction; import com.cloud.utils.fsm.NoTransitionException; import com.cloud.utils.fsm.StateMachine2; diff --git a/server/src/com/cloud/storage/allocator/GarbageCollectingStoragePoolAllocator.java b/server/src/com/cloud/storage/allocator/GarbageCollectingStoragePoolAllocator.java index 3e1030d077c..dbef8d5f250 100644 --- a/server/src/com/cloud/storage/allocator/GarbageCollectingStoragePoolAllocator.java +++ b/server/src/com/cloud/storage/allocator/GarbageCollectingStoragePoolAllocator.java @@ -31,7 +31,7 @@ import com.cloud.deploy.DeploymentPlan; import com.cloud.deploy.DeploymentPlanner.ExcludeList; import com.cloud.storage.StorageManager; import com.cloud.storage.StoragePool; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.vm.DiskProfile; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; diff --git a/server/src/com/cloud/storage/allocator/UseLocalForRootAllocator.java b/server/src/com/cloud/storage/allocator/UseLocalForRootAllocator.java index ace7303170c..2c19406fef6 100644 --- a/server/src/com/cloud/storage/allocator/UseLocalForRootAllocator.java +++ b/server/src/com/cloud/storage/allocator/UseLocalForRootAllocator.java @@ -34,7 +34,7 @@ import com.cloud.deploy.DeploymentPlanner.ExcludeList; import com.cloud.host.Host; import com.cloud.storage.StoragePool; import com.cloud.storage.Volume.Type; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.vm.DiskProfile; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; diff --git a/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java b/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java index 7868b3619d3..8347c4e1301 100644 --- a/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java +++ b/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java @@ -34,7 +34,7 @@ import com.cloud.storage.SnapshotVO; import com.cloud.storage.Volume; import com.cloud.storage.VolumeVO; import com.cloud.tags.dao.ResourceTagsDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDaoBase; diff --git a/server/src/com/cloud/storage/dao/StoragePoolDaoImpl.java b/server/src/com/cloud/storage/dao/StoragePoolDaoImpl.java index 9a50189277d..4019dffd4ae 100644 --- a/server/src/com/cloud/storage/dao/StoragePoolDaoImpl.java +++ b/server/src/com/cloud/storage/dao/StoragePoolDaoImpl.java @@ -35,7 +35,7 @@ import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.StoragePoolDetailVO; import com.cloud.storage.StoragePoolStatus; import com.cloud.storage.StoragePoolVO; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericSearchBuilder; diff --git a/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java b/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java index 8093fd5f9e2..42f10d34c1b 100755 --- a/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java +++ b/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java @@ -59,7 +59,7 @@ import com.cloud.tags.dao.ResourceTagsDaoImpl; import com.cloud.template.VirtualMachineTemplate.TemplateFilter; import com.cloud.user.Account; import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDaoBase; diff --git a/server/src/com/cloud/storage/dao/VolumeDaoImpl.java b/server/src/com/cloud/storage/dao/VolumeDaoImpl.java index d4cc692c06a..a189d00fead 100755 --- a/server/src/com/cloud/storage/dao/VolumeDaoImpl.java +++ b/server/src/com/cloud/storage/dao/VolumeDaoImpl.java @@ -39,7 +39,7 @@ import com.cloud.storage.Volume.Type; import com.cloud.storage.VolumeVO; import com.cloud.tags.dao.ResourceTagsDaoImpl; import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericSearchBuilder; diff --git a/server/src/com/cloud/storage/listener/StoragePoolMonitor.java b/server/src/com/cloud/storage/listener/StoragePoolMonitor.java index af6f0f5276a..3a7dac7a70f 100755 --- a/server/src/com/cloud/storage/listener/StoragePoolMonitor.java +++ b/server/src/com/cloud/storage/listener/StoragePoolMonitor.java @@ -38,7 +38,7 @@ import com.cloud.storage.StoragePoolStatus; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.dao.StoragePoolDao; -import com.cloud.utils.component.ComponentLocator; + public class StoragePoolMonitor implements Listener { private static final Logger s_logger = Logger.getLogger(StoragePoolMonitor.class); diff --git a/server/src/com/cloud/storage/resource/DummySecondaryStorageResource.java b/server/src/com/cloud/storage/resource/DummySecondaryStorageResource.java index 23f3def0c22..1f33330811b 100644 --- a/server/src/com/cloud/storage/resource/DummySecondaryStorageResource.java +++ b/server/src/com/cloud/storage/resource/DummySecondaryStorageResource.java @@ -50,7 +50,7 @@ import com.cloud.storage.VMTemplateVO; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.template.TemplateConstants; import com.cloud.storage.template.TemplateInfo; -import com.cloud.utils.component.ComponentLocator; + public class DummySecondaryStorageResource extends ServerResourceBase implements ServerResource { private static final Logger s_logger = Logger.getLogger(DummySecondaryStorageResource.class); diff --git a/server/src/com/cloud/storage/s3/S3ManagerImpl.java b/server/src/com/cloud/storage/s3/S3ManagerImpl.java index 069edf37612..8a1354c9282 100644 --- a/server/src/com/cloud/storage/s3/S3ManagerImpl.java +++ b/server/src/com/cloud/storage/s3/S3ManagerImpl.java @@ -77,7 +77,7 @@ import com.cloud.storage.dao.VMTemplateS3Dao; import com.cloud.storage.dao.VMTemplateZoneDao; import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.utils.S3Utils.ClientOptions; -import com.cloud.utils.component.Inject; + import com.cloud.utils.db.Filter; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.exception.CloudRuntimeException; diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java index fb4ece5187c..6bf6d5e5f2a 100755 --- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -114,7 +114,7 @@ import com.cloud.utils.DateUtil.IntervalType; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.component.Manager; import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; diff --git a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java index 190b054a1d0..18dc1f9d053 100644 --- a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java @@ -55,7 +55,7 @@ import com.cloud.user.User; import com.cloud.utils.DateUtil; import com.cloud.utils.DateUtil.IntervalType; import com.cloud.utils.NumbersUtil; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.concurrency.TestClock; import com.cloud.utils.db.DB; import com.cloud.utils.db.GlobalLock; diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index 0c208530b54..3a8bec5ff87 100755 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -131,7 +131,7 @@ import com.cloud.user.dao.UserDao; import com.cloud.uservm.UserVm; import com.cloud.utils.NumbersUtil; import com.cloud.utils.component.AdapterBase; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; diff --git a/server/src/com/cloud/test/IPRangeConfig.java b/server/src/com/cloud/test/IPRangeConfig.java index c8bc76c3163..1f1f90f006a 100755 --- a/server/src/com/cloud/test/IPRangeConfig.java +++ b/server/src/com/cloud/test/IPRangeConfig.java @@ -26,7 +26,7 @@ import java.util.List; import java.util.UUID; import java.util.Vector; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DB; import com.cloud.utils.db.Transaction; import com.cloud.utils.net.NetUtils; diff --git a/server/src/com/cloud/test/PodZoneConfig.java b/server/src/com/cloud/test/PodZoneConfig.java index f5787211e57..70ee0acc8b5 100644 --- a/server/src/com/cloud/test/PodZoneConfig.java +++ b/server/src/com/cloud/test/PodZoneConfig.java @@ -25,7 +25,7 @@ import java.util.List; import java.util.Vector; import com.cloud.network.Networks.TrafficType; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DB; import com.cloud.utils.db.Transaction; import com.cloud.utils.net.NetUtils; diff --git a/server/src/com/cloud/upgrade/DatabaseCreator.java b/server/src/com/cloud/upgrade/DatabaseCreator.java index 079e1e93b14..f0a8c5a03b2 100755 --- a/server/src/com/cloud/upgrade/DatabaseCreator.java +++ b/server/src/com/cloud/upgrade/DatabaseCreator.java @@ -26,7 +26,7 @@ import java.sql.Connection; import java.sql.SQLException; import com.cloud.utils.PropertiesUtil; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.component.SystemIntegrityChecker; import com.cloud.utils.db.ScriptRunner; import com.cloud.utils.db.Transaction; diff --git a/server/src/com/cloud/upgrade/DatabaseIntegrityChecker.java b/server/src/com/cloud/upgrade/DatabaseIntegrityChecker.java index d6e55a9d0af..1905bb3c2f8 100755 --- a/server/src/com/cloud/upgrade/DatabaseIntegrityChecker.java +++ b/server/src/com/cloud/upgrade/DatabaseIntegrityChecker.java @@ -30,7 +30,7 @@ import org.springframework.stereotype.Component; import com.cloud.maint.Version; import com.cloud.upgrade.dao.VersionDao; import com.cloud.upgrade.dao.VersionDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.component.SystemIntegrityChecker; import com.cloud.utils.db.GlobalLock; import com.cloud.utils.db.Transaction; diff --git a/server/src/com/cloud/upgrade/DatabaseUpgradeChecker.java b/server/src/com/cloud/upgrade/DatabaseUpgradeChecker.java index c07d03f873e..f831a032385 100755 --- a/server/src/com/cloud/upgrade/DatabaseUpgradeChecker.java +++ b/server/src/com/cloud/upgrade/DatabaseUpgradeChecker.java @@ -63,7 +63,7 @@ import com.cloud.upgrade.dao.VersionDao; import com.cloud.upgrade.dao.VersionDaoImpl; import com.cloud.upgrade.dao.VersionVO; import com.cloud.upgrade.dao.VersionVO.Step; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.component.SystemIntegrityChecker; import com.cloud.utils.db.GlobalLock; import com.cloud.utils.db.ScriptRunner; diff --git a/server/src/com/cloud/upgrade/PremiumDatabaseUpgradeChecker.java b/server/src/com/cloud/upgrade/PremiumDatabaseUpgradeChecker.java index 43d025ada22..896cb5618ed 100755 --- a/server/src/com/cloud/upgrade/PremiumDatabaseUpgradeChecker.java +++ b/server/src/com/cloud/upgrade/PremiumDatabaseUpgradeChecker.java @@ -43,7 +43,7 @@ import com.cloud.upgrade.dao.Upgrade30to301; import com.cloud.upgrade.dao.UpgradeSnapshot217to224; import com.cloud.upgrade.dao.UpgradeSnapshot223to224; import com.cloud.upgrade.dao.VersionDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.component.SystemIntegrityChecker; @Component diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index b90413218de..dc0370bc94b 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -113,7 +113,7 @@ import com.cloud.user.dao.UserDao; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 55d0d4fe756..197230475b8 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -214,7 +214,7 @@ import com.cloud.uservm.UserVm; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.PasswordGenerator; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.crypt.RSAHelper; diff --git a/server/src/com/cloud/vm/dao/UserVmDaoImpl.java b/server/src/com/cloud/vm/dao/UserVmDaoImpl.java index 8eda2e24ba1..e2cf02e010c 100755 --- a/server/src/com/cloud/vm/dao/UserVmDaoImpl.java +++ b/server/src/com/cloud/vm/dao/UserVmDaoImpl.java @@ -37,7 +37,7 @@ import com.cloud.configuration.Resource; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.tags.dao.ResourceTagsDaoImpl; import com.cloud.user.Account; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.Attribute; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericSearchBuilder; diff --git a/server/src/com/cloud/vm/dao/VMInstanceDaoImpl.java b/server/src/com/cloud/vm/dao/VMInstanceDaoImpl.java index d5693da9d0c..2e1d8514f7f 100644 --- a/server/src/com/cloud/vm/dao/VMInstanceDaoImpl.java +++ b/server/src/com/cloud/vm/dao/VMInstanceDaoImpl.java @@ -39,7 +39,7 @@ import com.cloud.host.dao.HostDaoImpl; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.tags.dao.ResourceTagsDaoImpl; import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.Attribute; import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; diff --git a/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java b/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java index 461bde0b95d..6bf94a2ef95 100644 --- a/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java +++ b/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java @@ -46,7 +46,7 @@ import com.cloud.user.MockAccountManagerImpl; import com.cloud.user.MockDomainManagerImpl; import com.cloud.user.dao.AccountDaoImpl; import com.cloud.utils.Profiler; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.component.MockComponentLocator; import com.cloud.vm.MockUserVmManagerImpl; import com.cloud.vm.MockVirtualMachineManagerImpl; diff --git a/server/test/com/cloud/snapshot/SnapshotDaoTest.java b/server/test/com/cloud/snapshot/SnapshotDaoTest.java index c412f49b3d4..644980b6931 100644 --- a/server/test/com/cloud/snapshot/SnapshotDaoTest.java +++ b/server/test/com/cloud/snapshot/SnapshotDaoTest.java @@ -21,7 +21,7 @@ import java.util.List; import com.cloud.storage.Snapshot; import com.cloud.storage.SnapshotVO; import com.cloud.storage.dao.SnapshotDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import junit.framework.Assert; import junit.framework.TestCase; diff --git a/server/test/com/cloud/storage/dao/StoragePoolDaoTest.java b/server/test/com/cloud/storage/dao/StoragePoolDaoTest.java index ed766f557f6..57d74f682f9 100644 --- a/server/test/com/cloud/storage/dao/StoragePoolDaoTest.java +++ b/server/test/com/cloud/storage/dao/StoragePoolDaoTest.java @@ -19,7 +19,7 @@ package com.cloud.storage.dao; import junit.framework.TestCase; import com.cloud.storage.StoragePoolStatus; -import com.cloud.utils.component.ComponentLocator; + public class StoragePoolDaoTest extends TestCase { diff --git a/server/test/com/cloud/upgrade/AdvanceZone217To224UpgradeTest.java b/server/test/com/cloud/upgrade/AdvanceZone217To224UpgradeTest.java index 27b2a7b723c..9d442dcf4fa 100644 --- a/server/test/com/cloud/upgrade/AdvanceZone217To224UpgradeTest.java +++ b/server/test/com/cloud/upgrade/AdvanceZone217To224UpgradeTest.java @@ -29,7 +29,7 @@ import org.junit.After; import org.junit.Before; import com.cloud.upgrade.dao.VersionDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DbTestUtils; import com.cloud.utils.db.Transaction; diff --git a/server/test/com/cloud/upgrade/AdvanceZone223To224UpgradeTest.java b/server/test/com/cloud/upgrade/AdvanceZone223To224UpgradeTest.java index a0394993404..17f3158d324 100644 --- a/server/test/com/cloud/upgrade/AdvanceZone223To224UpgradeTest.java +++ b/server/test/com/cloud/upgrade/AdvanceZone223To224UpgradeTest.java @@ -25,7 +25,7 @@ import org.junit.After; import org.junit.Before; import com.cloud.upgrade.dao.VersionDaoImpl; -import com.cloud.utils.component.ComponentLocator; + public class AdvanceZone223To224UpgradeTest extends TestCase { private static final Logger s_logger = Logger.getLogger(AdvanceZone223To224UpgradeTest.class); diff --git a/server/test/com/cloud/upgrade/BasicZone218To224UpgradeTest.java b/server/test/com/cloud/upgrade/BasicZone218To224UpgradeTest.java index 521e92a042f..19048e0c923 100644 --- a/server/test/com/cloud/upgrade/BasicZone218To224UpgradeTest.java +++ b/server/test/com/cloud/upgrade/BasicZone218To224UpgradeTest.java @@ -29,7 +29,7 @@ import org.junit.After; import org.junit.Before; import com.cloud.upgrade.dao.VersionDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DbTestUtils; import com.cloud.utils.db.Transaction; diff --git a/server/test/com/cloud/upgrade/HostCapacity218to22Test.java b/server/test/com/cloud/upgrade/HostCapacity218to22Test.java index af6321abf60..3d89f219520 100644 --- a/server/test/com/cloud/upgrade/HostCapacity218to22Test.java +++ b/server/test/com/cloud/upgrade/HostCapacity218to22Test.java @@ -25,7 +25,7 @@ import org.junit.After; import org.junit.Before; import com.cloud.upgrade.dao.VersionDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DbTestUtils; public class HostCapacity218to22Test extends TestCase { diff --git a/server/test/com/cloud/upgrade/InstanceGroup218To224UpgradeTest.java b/server/test/com/cloud/upgrade/InstanceGroup218To224UpgradeTest.java index 601b1e83212..8624019e0c7 100644 --- a/server/test/com/cloud/upgrade/InstanceGroup218To224UpgradeTest.java +++ b/server/test/com/cloud/upgrade/InstanceGroup218To224UpgradeTest.java @@ -30,7 +30,7 @@ import org.junit.After; import org.junit.Before; import com.cloud.upgrade.dao.VersionDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DbTestUtils; import com.cloud.utils.db.Transaction; diff --git a/server/test/com/cloud/upgrade/PortForwarding218To224UpgradeTest.java b/server/test/com/cloud/upgrade/PortForwarding218To224UpgradeTest.java index a430584d7bf..647d2b07dfc 100644 --- a/server/test/com/cloud/upgrade/PortForwarding218To224UpgradeTest.java +++ b/server/test/com/cloud/upgrade/PortForwarding218To224UpgradeTest.java @@ -29,7 +29,7 @@ import org.junit.After; import org.junit.Before; import com.cloud.upgrade.dao.VersionDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DbTestUtils; import com.cloud.utils.db.Transaction; diff --git a/server/test/com/cloud/upgrade/Sanity220To224UpgradeTest.java b/server/test/com/cloud/upgrade/Sanity220To224UpgradeTest.java index ef47aadc83b..080482fa6f8 100644 --- a/server/test/com/cloud/upgrade/Sanity220To224UpgradeTest.java +++ b/server/test/com/cloud/upgrade/Sanity220To224UpgradeTest.java @@ -28,7 +28,7 @@ import org.junit.After; import org.junit.Before; import com.cloud.upgrade.dao.VersionDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DbTestUtils; import com.cloud.utils.db.Transaction; diff --git a/server/test/com/cloud/upgrade/Sanity222To224UpgradeTest.java b/server/test/com/cloud/upgrade/Sanity222To224UpgradeTest.java index aa30df2a5f6..44e90eb05c8 100644 --- a/server/test/com/cloud/upgrade/Sanity222To224UpgradeTest.java +++ b/server/test/com/cloud/upgrade/Sanity222To224UpgradeTest.java @@ -28,7 +28,7 @@ import org.junit.After; import org.junit.Before; import com.cloud.upgrade.dao.VersionDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DbTestUtils; import com.cloud.utils.db.Transaction; diff --git a/server/test/com/cloud/upgrade/Sanity223To225UpgradeTest.java b/server/test/com/cloud/upgrade/Sanity223To225UpgradeTest.java index 32910276948..7312cc69894 100644 --- a/server/test/com/cloud/upgrade/Sanity223To225UpgradeTest.java +++ b/server/test/com/cloud/upgrade/Sanity223To225UpgradeTest.java @@ -28,7 +28,7 @@ import org.junit.After; import org.junit.Before; import com.cloud.upgrade.dao.VersionDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.Transaction; public class Sanity223To225UpgradeTest extends TestCase { diff --git a/server/test/com/cloud/upgrade/Sanity224To225UpgradeTest.java b/server/test/com/cloud/upgrade/Sanity224To225UpgradeTest.java index a7b6ba152a4..89ab58b4911 100644 --- a/server/test/com/cloud/upgrade/Sanity224To225UpgradeTest.java +++ b/server/test/com/cloud/upgrade/Sanity224To225UpgradeTest.java @@ -28,7 +28,7 @@ import org.junit.After; import org.junit.Before; import com.cloud.upgrade.dao.VersionDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DbTestUtils; import com.cloud.utils.db.Transaction; diff --git a/server/test/com/cloud/upgrade/Template2214To30UpgradeTest.java b/server/test/com/cloud/upgrade/Template2214To30UpgradeTest.java index e7a01e30859..88a4ea4dcd1 100644 --- a/server/test/com/cloud/upgrade/Template2214To30UpgradeTest.java +++ b/server/test/com/cloud/upgrade/Template2214To30UpgradeTest.java @@ -29,7 +29,7 @@ import org.apache.log4j.Logger; import org.junit.After; import org.junit.Before; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DbTestUtils; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; diff --git a/server/test/com/cloud/upgrade/Test2214To30DBUpgrade.java b/server/test/com/cloud/upgrade/Test2214To30DBUpgrade.java index 5f05ac32a1c..66a2fda7c20 100644 --- a/server/test/com/cloud/upgrade/Test2214To30DBUpgrade.java +++ b/server/test/com/cloud/upgrade/Test2214To30DBUpgrade.java @@ -29,7 +29,7 @@ import org.apache.log4j.Logger; import org.junit.After; import org.junit.Before; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DbTestUtils; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; diff --git a/server/test/com/cloud/upgrade/Usage217To224UpgradeTest.java b/server/test/com/cloud/upgrade/Usage217To224UpgradeTest.java index d349247a810..17a85fb6399 100644 --- a/server/test/com/cloud/upgrade/Usage217To224UpgradeTest.java +++ b/server/test/com/cloud/upgrade/Usage217To224UpgradeTest.java @@ -29,7 +29,7 @@ import org.junit.After; import org.junit.Before; import com.cloud.upgrade.dao.VersionDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DbTestUtils; import com.cloud.utils.db.Transaction; diff --git a/server/test/com/cloud/upgrade/UsageEvents218To224UpgradeTest.java b/server/test/com/cloud/upgrade/UsageEvents218To224UpgradeTest.java index 7319afa4469..94ae83628da 100644 --- a/server/test/com/cloud/upgrade/UsageEvents218To224UpgradeTest.java +++ b/server/test/com/cloud/upgrade/UsageEvents218To224UpgradeTest.java @@ -29,7 +29,7 @@ import org.junit.After; import org.junit.Before; import com.cloud.upgrade.dao.VersionDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DbTestUtils; import com.cloud.utils.db.Transaction; diff --git a/server/test/com/cloud/vm/dao/UserVmDaoImplTest.java b/server/test/com/cloud/vm/dao/UserVmDaoImplTest.java index f07abca439c..b062dd2a414 100644 --- a/server/test/com/cloud/vm/dao/UserVmDaoImplTest.java +++ b/server/test/com/cloud/vm/dao/UserVmDaoImplTest.java @@ -19,7 +19,7 @@ package com.cloud.vm.dao; import junit.framework.TestCase; import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.vm.UserVmVO; import com.cloud.vm.VirtualMachine; diff --git a/server/test/com/cloud/vpc/MockVpcManagerImpl.java b/server/test/com/cloud/vpc/MockVpcManagerImpl.java index 25799d19b9e..c41bb7b27e8 100644 --- a/server/test/com/cloud/vpc/MockVpcManagerImpl.java +++ b/server/test/com/cloud/vpc/MockVpcManagerImpl.java @@ -50,7 +50,7 @@ import com.cloud.offering.NetworkOffering; import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.component.Manager; import com.cloud.vm.DomainRouterVO; import com.cloud.vpc.dao.MockVpcDaoImpl; diff --git a/server/test/com/cloud/vpc/VpcApiUnitTest.java b/server/test/com/cloud/vpc/VpcApiUnitTest.java index 5cc325ffac0..14e376a9ee8 100644 --- a/server/test/com/cloud/vpc/VpcApiUnitTest.java +++ b/server/test/com/cloud/vpc/VpcApiUnitTest.java @@ -45,7 +45,7 @@ import com.cloud.tags.dao.ResourceTagsDaoImpl; import com.cloud.user.AccountVO; import com.cloud.user.MockAccountManagerImpl; import com.cloud.user.dao.AccountDaoImpl; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.component.MockComponentLocator; import com.cloud.vm.dao.DomainRouterDaoImpl; import com.cloud.vpc.dao.MockNetworkDaoImpl; diff --git a/usage/src/com/cloud/usage/UsageAlertManagerImpl.java b/usage/src/com/cloud/usage/UsageAlertManagerImpl.java index 2b698c83708..f6e0374875a 100644 --- a/usage/src/com/cloud/usage/UsageAlertManagerImpl.java +++ b/usage/src/com/cloud/usage/UsageAlertManagerImpl.java @@ -40,7 +40,7 @@ import com.cloud.alert.AlertVO; import com.cloud.alert.dao.AlertDao; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.utils.NumbersUtil; -import com.cloud.utils.component.ComponentLocator; + import com.sun.mail.smtp.SMTPMessage; import com.sun.mail.smtp.SMTPSSLTransport; import com.sun.mail.smtp.SMTPTransport; diff --git a/usage/src/com/cloud/usage/UsageManagerImpl.java b/usage/src/com/cloud/usage/UsageManagerImpl.java index bbf2cd65ba8..971f5dfa707 100644 --- a/usage/src/com/cloud/usage/UsageManagerImpl.java +++ b/usage/src/com/cloud/usage/UsageManagerImpl.java @@ -66,8 +66,8 @@ import com.cloud.user.AccountVO; import com.cloud.user.UserStatisticsVO; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.UserStatisticsDao; -import com.cloud.utils.component.ComponentLocator; -import com.cloud.utils.component.Inject; + + import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; diff --git a/usage/src/com/cloud/usage/UsageServer.java b/usage/src/com/cloud/usage/UsageServer.java index 4cdca7986c2..aedbe768476 100644 --- a/usage/src/com/cloud/usage/UsageServer.java +++ b/usage/src/com/cloud/usage/UsageServer.java @@ -18,7 +18,7 @@ package com.cloud.usage; import org.apache.log4j.Logger; -import com.cloud.utils.component.ComponentLocator; + public class UsageServer { private static final Logger s_logger = Logger.getLogger(UsageServer.class.getName()); diff --git a/usage/src/com/cloud/usage/parser/IPAddressUsageParser.java b/usage/src/com/cloud/usage/parser/IPAddressUsageParser.java index 08cb02190e6..f60c0bf6b40 100644 --- a/usage/src/com/cloud/usage/parser/IPAddressUsageParser.java +++ b/usage/src/com/cloud/usage/parser/IPAddressUsageParser.java @@ -32,7 +32,7 @@ import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageIPAddressDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; + public class IPAddressUsageParser { public static final Logger s_logger = Logger.getLogger(IPAddressUsageParser.class.getName()); diff --git a/usage/src/com/cloud/usage/parser/LoadBalancerUsageParser.java b/usage/src/com/cloud/usage/parser/LoadBalancerUsageParser.java index c1423c6cc8d..8763527b398 100644 --- a/usage/src/com/cloud/usage/parser/LoadBalancerUsageParser.java +++ b/usage/src/com/cloud/usage/parser/LoadBalancerUsageParser.java @@ -32,7 +32,7 @@ import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageLoadBalancerPolicyDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; + public class LoadBalancerUsageParser { public static final Logger s_logger = Logger.getLogger(LoadBalancerUsageParser.class.getName()); diff --git a/usage/src/com/cloud/usage/parser/NetworkOfferingUsageParser.java b/usage/src/com/cloud/usage/parser/NetworkOfferingUsageParser.java index fc7fc2a54e7..c2bf1c30427 100644 --- a/usage/src/com/cloud/usage/parser/NetworkOfferingUsageParser.java +++ b/usage/src/com/cloud/usage/parser/NetworkOfferingUsageParser.java @@ -32,7 +32,7 @@ import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageNetworkOfferingDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; + public class NetworkOfferingUsageParser { public static final Logger s_logger = Logger.getLogger(NetworkOfferingUsageParser.class.getName()); diff --git a/usage/src/com/cloud/usage/parser/NetworkUsageParser.java b/usage/src/com/cloud/usage/parser/NetworkUsageParser.java index acdbc484dcd..c0ba15f08c4 100644 --- a/usage/src/com/cloud/usage/parser/NetworkUsageParser.java +++ b/usage/src/com/cloud/usage/parser/NetworkUsageParser.java @@ -31,7 +31,7 @@ import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageNetworkDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.SearchCriteria; public class NetworkUsageParser { diff --git a/usage/src/com/cloud/usage/parser/PortForwardingUsageParser.java b/usage/src/com/cloud/usage/parser/PortForwardingUsageParser.java index 469fb655f9e..42cc74c10fb 100644 --- a/usage/src/com/cloud/usage/parser/PortForwardingUsageParser.java +++ b/usage/src/com/cloud/usage/parser/PortForwardingUsageParser.java @@ -32,7 +32,7 @@ import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsagePortForwardingRuleDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; + public class PortForwardingUsageParser { public static final Logger s_logger = Logger.getLogger(PortForwardingUsageParser.class.getName()); diff --git a/usage/src/com/cloud/usage/parser/SecurityGroupUsageParser.java b/usage/src/com/cloud/usage/parser/SecurityGroupUsageParser.java index 28323851ed9..f175ae27d19 100644 --- a/usage/src/com/cloud/usage/parser/SecurityGroupUsageParser.java +++ b/usage/src/com/cloud/usage/parser/SecurityGroupUsageParser.java @@ -32,7 +32,7 @@ import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageSecurityGroupDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; + public class SecurityGroupUsageParser { public static final Logger s_logger = Logger.getLogger(SecurityGroupUsageParser.class.getName()); diff --git a/usage/src/com/cloud/usage/parser/StorageUsageParser.java b/usage/src/com/cloud/usage/parser/StorageUsageParser.java index 4d48e39b750..a0fee2df535 100644 --- a/usage/src/com/cloud/usage/parser/StorageUsageParser.java +++ b/usage/src/com/cloud/usage/parser/StorageUsageParser.java @@ -33,7 +33,7 @@ import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageStorageDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; + public class StorageUsageParser { public static final Logger s_logger = Logger.getLogger(StorageUsageParser.class.getName()); diff --git a/usage/src/com/cloud/usage/parser/VMInstanceUsageParser.java b/usage/src/com/cloud/usage/parser/VMInstanceUsageParser.java index 681e8ec31ba..0680ec3afb9 100644 --- a/usage/src/com/cloud/usage/parser/VMInstanceUsageParser.java +++ b/usage/src/com/cloud/usage/parser/VMInstanceUsageParser.java @@ -32,7 +32,7 @@ import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageVMInstanceDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; + public class VMInstanceUsageParser { public static final Logger s_logger = Logger.getLogger(VMInstanceUsageParser.class.getName()); diff --git a/usage/src/com/cloud/usage/parser/VPNUserUsageParser.java b/usage/src/com/cloud/usage/parser/VPNUserUsageParser.java index 089bf9072c0..7a96e3ce7b0 100644 --- a/usage/src/com/cloud/usage/parser/VPNUserUsageParser.java +++ b/usage/src/com/cloud/usage/parser/VPNUserUsageParser.java @@ -32,7 +32,7 @@ import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageVPNUserDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; + public class VPNUserUsageParser { public static final Logger s_logger = Logger.getLogger(VPNUserUsageParser.class.getName()); diff --git a/usage/src/com/cloud/usage/parser/VolumeUsageParser.java b/usage/src/com/cloud/usage/parser/VolumeUsageParser.java index db58f41a6ef..1eb7664c290 100644 --- a/usage/src/com/cloud/usage/parser/VolumeUsageParser.java +++ b/usage/src/com/cloud/usage/parser/VolumeUsageParser.java @@ -32,7 +32,7 @@ import com.cloud.usage.dao.UsageDao; import com.cloud.usage.dao.UsageVolumeDao; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; + public class VolumeUsageParser { public static final Logger s_logger = Logger.getLogger(VolumeUsageParser.class.getName()); diff --git a/utils/test/com/cloud/utils/db/TransactionTest.java b/utils/test/com/cloud/utils/db/TransactionTest.java index 96d31b40597..5bd1e9aca65 100644 --- a/utils/test/com/cloud/utils/db/TransactionTest.java +++ b/utils/test/com/cloud/utils/db/TransactionTest.java @@ -26,7 +26,7 @@ import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.exception.CloudRuntimeException; /** diff --git a/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java b/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java index 5a9501dcc9c..13e396db06d 100644 --- a/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java +++ b/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java @@ -20,7 +20,7 @@ import junit.framework.TestCase; import org.apache.log4j.Logger; -import com.cloud.utils.component.ComponentLocator; + import com.cloud.utils.db.DB; import com.cloud.utils.exception.CloudRuntimeException;