----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/11479/ -----------------------------------------------------------
(Updated June 20, 2013, 5:35 p.m.) Review request for cloudstack, edison su and John Burwell. Changes ------- Updated changes that include mutual exclusion of the storage and hypervisor QoS features Description ------- This patch implements a storage plug-in for SolidFire. The plug-in is based on the new storage framework that went in with 4.2, as well. In addition, there are GUI (and related) changes to enable admins and end users to specify a Min, Max, and Burst number of IOPS for a Disk Offering. These fields (although optional) tend to follow the pattern previously established for the Disk Size field. Also, the storage framework itself has been enhanced. For example, it now supports creating and deleting storage repositories as is necessary for a dynamic type of zone-wide primary storage (such as the SolidFire plug-in is). The desired behavior of the software is as such: * Allow an admin to invoke the CloudStack API to add Primary Storage based on the SolidFire plug-in. * Allow an admin to create a Disk Offering that specifies a Min, Max, and Burst number of IOPS or allows the admin to pass this ability on to the end user. * Allow an end user to execute such a Disk Offering. As is the case for any Disk Offering, this leads to the creation of a row in the volumes table. * Allow an end user to attach the resultant volume (noted in the DB) to a VM. The storage framework invokes logic in the plug-in and the plug-in creates a volume on its SAN with the correct size and IOPS values. The agent software for XenServer detects that such an attach is being requested and creates a Storage Repository (and single VDI within the SR) based on the storage IP address of the SAN and the IQN of the volume. The VDI is then hooked up to the VM. * Allow an end user to detach the volume. This leads to the destruction of the SR, but the SAN volume remains intact and can be reattached later to any VM running in a XenServer resource pool in the zone. * Allow an end user to delete the volume. This leads to the volume being deleted on the SAN and being marked in the CloudStack DB as deleted. Diffs (updated) ----- api/src/com/cloud/offering/DiskOffering.java ae4528c api/src/com/cloud/storage/StoragePool.java 8b95383 api/src/com/cloud/storage/Volume.java 4903594 api/src/org/apache/cloudstack/api/ApiConstants.java 1704ca3 api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java a2c5f77 api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java 74eb2b9 api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java 86a494b api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java 35cf21a api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java 965407d api/src/org/apache/cloudstack/api/response/VolumeResponse.java e3463bd client/WEB-INF/classes/resources/messages.properties a0a36c8 client/pom.xml ab758eb client/tomcatconf/applicationContext.xml.in 049e483 core/src/com/cloud/agent/api/AttachVolumeAnswer.java b377b7c core/src/com/cloud/agent/api/AttachVolumeCommand.java 2658262 core/test/org/apache/cloudstack/api/agent/test/AttachVolumeAnswerTest.java 251a6cb core/test/org/apache/cloudstack/api/agent/test/AttachVolumeCommandTest.java 1ec416a core/test/org/apache/cloudstack/api/agent/test/BackupSnapshotCommandTest.java 44d53aa core/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java c2d69c0 core/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java 02085f5 engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreDriver.java cf5759b engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreParameters.java b2b787c engine/api/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java d461d58 engine/api/src/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java 0262f65 engine/schema/src/com/cloud/storage/DiskOfferingVO.java 44f9e8f engine/schema/src/com/cloud/storage/VolumeVO.java 1699afd engine/schema/src/com/cloud/storage/dao/VolumeDao.java 2513181 engine/schema/src/com/cloud/storage/dao/VolumeDaoImpl.java 12ca3c7 engine/storage/image/src/org/apache/cloudstack/storage/image/ImageServiceImpl.java 99b1013 engine/storage/image/src/org/apache/cloudstack/storage/image/driver/AncientImageDataStoreDriverImpl.java 4c16f2f engine/storage/image/src/org/apache/cloudstack/storage/image/driver/DefaultImageDataStoreDriverImpl.java 3d46c73 engine/storage/integration-test/test/org/apache/cloudstack/storage/allocator/StorageAllocatorTest.java 9444fa5 engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/AncientSnapshotStrategy.java 4aba3d9 engine/storage/src/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java 5326701 engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java d8d4132 engine/storage/src/org/apache/cloudstack/storage/datastore/DataObjectManagerImpl.java 9d1afbe engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreEntityImpl.java 2dc3e25 engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java 349f6ba engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java 31e6908 engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java e5ee742 engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java cffa1ce engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java ea31be3 engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java 54dcbd2 plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java 7d90f6a plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java a50dff6 plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java 1af4239 plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java 5e8283a plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java 0486902 plugins/storage/volume/solidfire/pom.xml 9db0685 plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidfirePrimaryDataStoreDriver.java f31126c plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/lifecycle/SolidFirePrimaryDataStoreLifeCycle.java PRE-CREATION plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidfirePrimaryDataStoreProvider.java 650cac8 plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/util/SolidFireUtil.java PRE-CREATION server/src/com/cloud/api/query/dao/DiskOfferingJoinDaoImpl.java 7022ee6 server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java f2b9525 server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java 453e82e server/src/com/cloud/api/query/vo/DiskOfferingJoinVO.java 2336a48 server/src/com/cloud/api/query/vo/StoragePoolJoinVO.java 29e97f4 server/src/com/cloud/api/query/vo/VolumeJoinVO.java 735cf9a server/src/com/cloud/configuration/ConfigurationManager.java 93cadfa server/src/com/cloud/configuration/ConfigurationManagerImpl.java e7e3f74 server/src/com/cloud/server/ConfigurationServerImpl.java 510455b server/src/com/cloud/storage/StorageManager.java 29c7ebc server/src/com/cloud/storage/StorageManagerImpl.java 20b435c server/src/com/cloud/storage/VolumeManager.java 56de408 server/src/com/cloud/storage/VolumeManagerImpl.java e5868d3 server/src/com/cloud/test/DatabaseConfig.java ef0259d server/test/com/cloud/vpc/MockConfigurationManagerImpl.java 6e3d187 setup/db/db/schema-410to420.sql bcdf2d9 tools/marvin/marvin/cloudstackConnection.py b092ef0 ui/dictionary.jsp 7809cdb ui/scripts/configuration.js 150f244 ui/scripts/docs.js 5aa352a ui/scripts/sharedFunctions.js d87f0dc ui/scripts/storage.js 2c03d39 ui/scripts/system.js df37f31 utils/src/com/cloud/utils/StringUtils.java 359b169 vmware-base/src/com/cloud/hypervisor/vmware/mo/HostDatastoreSystemMO.java 3dcd724 vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java a866fdc vmware-base/src/com/cloud/hypervisor/vmware/mo/HostStorageSystemMO.java PRE-CREATION Diff: https://reviews.apache.org/r/11479/diff/ Testing ------- Manual testing has been performed: A plug-in can be added to CloudStack via an API call. Create a Disk Offering where the admin specifies both Disk Size and Disk IOPS. Disk IOPS are left blank. Create a Disk Offering where the admin allows the end user to customize both Disk Size and Disk IOPS. Disk IOPS are left blank. Create a Disk Offering where the admin specifies Disk Size, but allows the end user to customize Disk IOPS. Disk IOPS are left blank. Create a Disk Offering where the admin specifies Disk IOPS, but allows the end user to customize Disk Size. Disk IOPS are left blank. Create a Disk Offering where the admin specifies both Disk Size and Disk IOPS. Disk IOPS are all filled in. Create a Disk Offering where the admin allows the end user to customize both Disk Size and Disk IOPS. Disk IOPS are all filled in. Create a Disk Offering where the admin specifies Disk Size, but allows the end user to customize Disk IOPS. Disk IOPS are all filled in. Create a Disk Offering where the admin specifies Disk IOPS, but allows the end user to customize Disk Size. Disk IOPS are all filled in. A newly created volume is attached to a VM for the first time and an SR and VDI are created. This volume is detached and the VDI and SR are deleted. The volume is reattached and is properly introduced into the SR and VDI ("introduced" in the sense that the data that was previously on the volume is not destroyed upon reattach). This volume is detached and the VDI and SR are deleted. Thanks, Mike Tutkowski