From a73f41e56c7ff207c5a2b484732a91ddacce6218 Mon Sep 17 00:00:00 2001 From: Kelven Yang Date: Wed, 7 Sep 2011 15:36:25 -0700 Subject: [PATCH] bug 11360: make user_vm_details generic to all VMs instead of user-only VMs, VM details info will be carried down to hypervisor resource --- core/src/com/cloud/vm/UserVmVO.java | 19 ------------------ core/src/com/cloud/vm/VMInstanceVO.java | 20 ++++++++++++++++--- .../consoleproxy/ConsoleProxyManagerImpl.java | 9 +++++++++ .../VirtualNetworkApplianceManagerImpl.java | 6 ++++++ .../SecondaryStorageManagerImpl.java | 7 +++++++ setup/db/create-schema.sql | 3 ++- setup/db/db/schema-2211to2212.sql | 2 ++ 7 files changed, 43 insertions(+), 23 deletions(-) diff --git a/core/src/com/cloud/vm/UserVmVO.java b/core/src/com/cloud/vm/UserVmVO.java index 498db148238..147c16250c0 100755 --- a/core/src/com/cloud/vm/UserVmVO.java +++ b/core/src/com/cloud/vm/UserVmVO.java @@ -47,9 +47,6 @@ public class UserVmVO extends VMInstanceVO implements UserVm { transient String password; - @Transient - Map details; - @Override public String getPassword() { return password; @@ -119,26 +116,10 @@ public class UserVmVO extends VMInstanceVO implements UserVm { this.displayName = displayName; } - @Override - public Map getDetails() { - return details; - } - @Override public String getDetail(String name) { assert (details != null) : "Did you forget to load the details?"; return details != null ? details.get(name) : null; } - - public void setDetail(String name, String value) { - assert (details != null) : "Did you forget to load the details?"; - - details.put(name, value); - } - - public void setDetails(Map details) { - this.details = details; - } - } diff --git a/core/src/com/cloud/vm/VMInstanceVO.java b/core/src/com/cloud/vm/VMInstanceVO.java index 60b00a1b2fc..df02d666230 100644 --- a/core/src/com/cloud/vm/VMInstanceVO.java +++ b/core/src/com/cloud/vm/VMInstanceVO.java @@ -35,6 +35,7 @@ import javax.persistence.Table; import javax.persistence.TableGenerator; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import javax.persistence.Transient; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.utils.db.GenericDao; @@ -140,6 +141,9 @@ public class VMInstanceVO implements VirtualMachine, FiniteStateObject details; public VMInstanceVO(long id, long serviceOfferingId, @@ -396,9 +400,19 @@ public class VMInstanceVO implements VirtualMachine, FiniteStateObject getDetails() { - return null; - } + public Map getDetails() { + return details; + } + + public void setDetail(String name, String value) { + assert (details != null) : "Did you forget to load the details?"; + + details.put(name, value); + } + + public void setDetails(Map details) { + this.details = details; + } transient String toString; @Override diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index 897ecab68c0..8101789425a 100644 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -121,6 +121,7 @@ import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; import com.cloud.vm.SystemVmLoadScanHandler; import com.cloud.vm.SystemVmLoadScanner; +import com.cloud.vm.UserVmVO; import com.cloud.vm.SystemVmLoadScanner.AfterScanAction; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; @@ -130,6 +131,7 @@ import com.cloud.vm.VirtualMachineManager; import com.cloud.vm.VirtualMachineName; import com.cloud.vm.VirtualMachineProfile; import com.cloud.vm.dao.ConsoleProxyDao; +import com.cloud.vm.dao.UserVmDetailsDao; import com.cloud.vm.dao.VMInstanceDao; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -195,6 +197,8 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx NetworkOfferingDao _networkOfferingDao; @Inject StoragePoolDao _storagePoolDao; + @Inject + UserVmDetailsDao _vmDetailsDao; private ConsoleProxyListener _listener; @@ -1288,6 +1292,11 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx @Override public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, DeployDestination dest, ReservationContext context) { + + ConsoleProxyVO vm = profile.getVirtualMachine(); + Map details = _vmDetailsDao.findDetails(vm.getId()); + vm.setDetails(details); + StringBuilder buf = profile.getBootArgsBuilder(); buf.append(" template=domP type=consoleproxy"); buf.append(" host=").append(_mgmt_host); diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index b44a4c25b9b..50647b93c05 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -195,6 +195,7 @@ import com.cloud.vm.VirtualMachineProfile.Param; import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; +import com.cloud.vm.dao.UserVmDetailsDao; import com.cloud.vm.dao.VMInstanceDao; /** @@ -301,6 +302,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian VolumeDao _volumeDao = null; @Inject FirewallRulesCidrsDao _firewallCidrsDao; + @Inject + UserVmDetailsDao _vmDetailsDao; int _routerRamSize; int _routerCpuMHz; @@ -1211,6 +1214,9 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, DeployDestination dest, ReservationContext context) { DomainRouterVO router = profile.getVirtualMachine(); + Map details = _vmDetailsDao.findDetails(router.getId()); + router.setDetails(details); + NetworkVO network = _networkDao.findById(router.getNetworkId()); String type = null; diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java index d2c022f1abe..d18aecf8c28 100644 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java @@ -108,6 +108,7 @@ import com.cloud.vm.VirtualMachineManager; import com.cloud.vm.VirtualMachineName; import com.cloud.vm.VirtualMachineProfile; import com.cloud.vm.dao.SecondaryStorageVmDao; +import com.cloud.vm.dao.UserVmDetailsDao; import com.cloud.vm.dao.VMInstanceDao; // @@ -186,6 +187,8 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V protected VMInstanceDao _vmDao; @Inject protected CapacityDao _capacityDao; + @Inject + UserVmDetailsDao _vmDetailsDao; private long _capacityScanInterval = DEFAULT_CAPACITY_SCAN_INTERVAL; @@ -940,6 +943,10 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V @Override public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, DeployDestination dest, ReservationContext context) { + SecondaryStorageVmVO vm = profile.getVirtualMachine(); + Map details = _vmDetailsDao.findDetails(vm.getId()); + vm.setDetails(details); + HostVO secHost = _hostDao.findSecondaryStorageHost(dest.getDataCenter().getId()); assert (secHost != null); diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index b2bc889bbe3..667b99e89fc 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -915,13 +915,14 @@ CREATE TABLE `cloud`.`user_vm` ( CONSTRAINT `fk_user_vm__id` FOREIGN KEY `fk_user_vm__id` (`id`) REFERENCES `vm_instance`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +-- note, uer_vm_details is now used for all VMs (not just for user vms) CREATE TABLE `cloud`.`user_vm_details` ( `id` bigint unsigned NOT NULL auto_increment, `vm_id` bigint unsigned NOT NULL COMMENT 'vm id', `name` varchar(255) NOT NULL, `value` varchar(1024) NOT NULL, PRIMARY KEY (`id`), - CONSTRAINT `fk_user_vm_details__vm_id` FOREIGN KEY `fk_user_vm_details__vm_id`(`vm_id`) REFERENCES `user_vm`(`id`) ON DELETE CASCADE + CONSTRAINT `fk_user_vm_details__vm_id` FOREIGN KEY `fk_user_vm_details__vm_id`(`vm_id`) REFERENCES `vm_instance`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/setup/db/db/schema-2211to2212.sql b/setup/db/db/schema-2211to2212.sql index faaf7ae304f..6eafa4b9ab5 100644 --- a/setup/db/db/schema-2211to2212.sql +++ b/setup/db/db/schema-2211to2212.sql @@ -8,3 +8,5 @@ UPDATE vm_instance SET state='Error' WHERE state='Creating' AND removed IS null; INSERT IGNORE INTO configuration VALUES ('Advanced', 'DEFAULT', 'management-server', 'json.content.type', 'text/javascript', 'Http response content type for .js files (default is text/javascript)'); +ALTER IGNORE TABLE `cloud`.`user_vm_details` DROP FOREIGN KEY `fk_user_vm_details__vm_id`; +ALTER TABLE `cloud`.`user_vm_details` ADD CONSTRAINT `fk_user_vm_details__vm_id` FOREIGN KEY `fk_user_vm_details__vm_id`(`vm_id`) REFERENCES `vm_instance`(`id`) ON DELETE CASCADE;