Return-Path: X-Original-To: apmail-cloudstack-dev-archive@www.apache.org Delivered-To: apmail-cloudstack-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9C17DF2FC for ; Fri, 31 May 2013 20:32:13 +0000 (UTC) Received: (qmail 61037 invoked by uid 500); 31 May 2013 20:32:13 -0000 Delivered-To: apmail-cloudstack-dev-archive@cloudstack.apache.org Received: (qmail 60994 invoked by uid 500); 31 May 2013 20:32:13 -0000 Mailing-List: contact dev-help@cloudstack.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cloudstack.apache.org Delivered-To: mailing list dev@cloudstack.apache.org Received: (qmail 60984 invoked by uid 500); 31 May 2013 20:32:13 -0000 Delivered-To: apmail-incubator-cloudstack-dev@incubator.apache.org Received: (qmail 60973 invoked by uid 99); 31 May 2013 20:32:13 -0000 Received: from reviews-vm.apache.org (HELO reviews.apache.org) (140.211.11.40) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 31 May 2013 20:32:13 +0000 Received: from reviews.apache.org (localhost [127.0.0.1]) by reviews.apache.org (Postfix) with ESMTP id EB7061CC2A3; Fri, 31 May 2013 20:32:06 +0000 (UTC) Content-Type: multipart/alternative; boundary="===============2620911078502354464==" MIME-Version: 1.0 Subject: Re: Review Request: SolidFire storage plug-in and enhancements to the storage framework and GUI From: "Wei Zhou" To: "edison su" , "John Burwell" Cc: "cloudstack" , "Mike Tutkowski" , "Wei Zhou" Date: Fri, 31 May 2013 20:32:06 -0000 Message-ID: <20130531203206.1348.56648@reviews.apache.org> X-ReviewBoard-URL: https://reviews.apache.org Auto-Submitted: auto-generated Sender: "Wei Zhou" X-ReviewGroup: cloudstack X-ReviewRequest-URL: https://reviews.apache.org/r/11479/ X-Sender: "Wei Zhou" References: <20130531000846.1348.9907@reviews.apache.org> In-Reply-To: <20130531000846.1348.9907@reviews.apache.org> Reply-To: "Wei Zhou" --===============2620911078502354464== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/11479/#review21265 ----------------------------------------------------------- Mike, I think it is better to create a table for SolidFire instead of changing di= sk_offering table. It is not a good idea to change disk_offering for a specific vendor. You can have a look at what nicira did in the past, maybe it helps you. -Wei - Wei Zhou On May 31, 2013, 12:08 a.m., Mike Tutkowski wrote: > = > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/11479/ > ----------------------------------------------------------- > = > (Updated May 31, 2013, 12:08 a.m.) > = > = > Review request for cloudstack, edison su and John Burwell. > = > = > Description > ------- > = > This patch implements a storage plug-in for SolidFire. The plug-in is bas= ed 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 est= ablished 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 base= d 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 en= d user. > = > * Allow an end user to execute such a Disk Offering. As is the case for a= ny 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 cre= ates a volume on its SAN with the correct size and IOPS values. The agent s= oftware for XenServer detects that such an attach is being requested and cr= eates a Storage Repository (and single VDI within the SR) based on the stor= age 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 o= f 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 > ----- > = > api/src/com/cloud/offering/DiskOffering.java dd77c70 = > api/src/com/cloud/storage/Storage.java c130fe2 = > api/src/com/cloud/storage/Volume.java 4903594 = > api/src/org/apache/cloudstack/api/ApiConstants.java 1e9435f = > api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOffe= ringCmd.java aa11599 = > api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.j= ava 86a494b = > api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java 37= 7e66e = > api/src/org/apache/cloudstack/api/response/VolumeResponse.java 21d7d1a = > client/WEB-INF/classes/resources/messages.properties 1638be1 = > client/pom.xml 0c38ecb = > client/tomcatconf/applicationContext.xml.in edf83a9 = > core/src/com/cloud/agent/api/AttachVolumeCommand.java 302b8f8 = > core/test/org/apache/cloudstack/api/agent/test/AttachVolumeAnswerTest.j= ava 251a6cb = > core/test/org/apache/cloudstack/api/agent/test/AttachVolumeCommandTest.= java 1ec416a = > engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/Prima= ryDataStoreParameters.java b2b787c = > engine/schema/src/com/cloud/storage/DiskOfferingVO.java 909d7fe = > engine/schema/src/com/cloud/storage/VolumeVO.java 1699afd = > engine/storage/integration-test/test/org/apache/cloudstack/storage/allo= cator/StorageAllocatorTest.java 9444fa5 = > engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStor= agePoolAllocator.java e976980 = > engine/storage/src/org/apache/cloudstack/storage/volume/datastore/Prima= ryDataStoreHelper.java 5f8daf4 = > engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeOb= ject.java ea31be3 = > plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixRes= ourceBase.java 4680fde = > plugins/storage/volume/solidfire/pom.xml 9db0685 = > plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/data= store/driver/SolidfirePrimaryDataStoreDriver.java f31126c = > plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/data= store/lifecycle/SolidFirePrimaryDataStoreLifeCycle.java PRE-CREATION = > plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/data= store/provider/SolidfirePrimaryDataStoreProvider.java 650cac8 = > plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/data= store/util/SolidFireUtil.java PRE-CREATION = > server/src/com/cloud/api/query/dao/DiskOfferingJoinDaoImpl.java 283181f = > server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java e27e2d9 = > server/src/com/cloud/api/query/vo/DiskOfferingJoinVO.java 6d3cdcb = > server/src/com/cloud/api/query/vo/VolumeJoinVO.java 6ef8c91 = > server/src/com/cloud/configuration/ConfigurationManager.java 8db037b = > server/src/com/cloud/configuration/ConfigurationManagerImpl.java 8baf1f= b = > server/src/com/cloud/server/ConfigurationServerImpl.java bc52e9a = > server/src/com/cloud/storage/VolumeManager.java d198e5d = > server/src/com/cloud/storage/VolumeManagerImpl.java 4b654eb = > server/src/com/cloud/test/DatabaseConfig.java 70c8178 = > server/test/com/cloud/vpc/MockConfigurationManagerImpl.java 21b3590 = > setup/db/db/schema-410to420.sql cf4e98d = > tools/marvin/marvin/cloudstackConnection.py b092ef0 = > ui/dictionary.jsp ded9ea0 = > ui/scripts/configuration.js 211d7b7 = > ui/scripts/docs.js 7c1aaf8 = > ui/scripts/storage.js e816334 = > ui/scripts/system.js 8b9a81f = > = > 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 b= oth Disk Size and Disk IOPS. Disk IOPS are left blank. > Create a Disk Offering where the admin specifies Disk Size, but allows th= e end user to customize Disk IOPS. Disk IOPS are left blank. > Create a Disk Offering where the admin specifies Disk IOPS, but allows th= e 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 b= oth Disk Size and Disk IOPS. Disk IOPS are all filled in. > Create a Disk Offering where the admin specifies Disk Size, but allows th= e end user to customize Disk IOPS. Disk IOPS are all filled in. > Create a Disk Offering where the admin specifies Disk IOPS, but allows th= e 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 a= nd VDI are created. > This volume is detached and the VDI and SR are deleted. > The volume is reattach and is properly introduced into the SR and VDI ("i= ntroduced" 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 > = > --===============2620911078502354464==--