Hi Mike, Seems some of your comments are related to the scope of their implementation, such as do you support this, do you support that, can you do this, can you do that etc. From my point of view, it's not important, as the capability of driver is totally controlled by the vendors, vendors can implement whatever functionalities they want. My criteria to check in the code is very simple: the plugin should not modify common code.
From: Mike Tutkowski [mailto:mike.tutkow...@solidfire.com] Sent: Thursday, March 13, 2014 3:25 PM To: Edison Su; Mike Tutkowski Cc: punith s; cloudstack Subject: Re: Review Request 19021: Cloudbyte Elastistor storage plug-in Hi Punith, Once you close out the open issues, we can work to get your code in. Feature freeze is Friday, March 14th, so we should do it sometime tomorrow. Thanks! On Thu, Mar 13, 2014 at 4:24 PM, Mike Tutkowski <mike.tutkow...@solidfire.com<mailto:mike.tutkow...@solidfire.com>> wrote: This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/19021/ plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/lifecycle/ElastistorPrimaryDataStoreLifeCycle.java<https://reviews.apache.org/r/19021/diff/5/?file=518383#file518383line99> (Diff revision 5) 99 if(details.get("esaccountid") != null) Does this plug-in support multiple CloudByte SANs at the same time? It looks like whatever values you set most recently for ElastistorUtil will be utilized if you don't provide them in the details. Is this OK if you don't provide all of the details for your second or more SAN? - Mike Tutkowski On March 13th, 2014, 9:16 a.m. UTC, punith s wrote: Review request for cloudstack, edison su and Mike Tutkowski. By punith s. Updated March 13, 2014, 9:16 a.m. Repository: cloudstack-git Description This patch implements a basic storage plug-in for cloudbyte elastistor v1.3.0, The plug-in is a new feature for cloudstack 4.4 and above. this does not implement managed storage yet, it is been integrated only with CreateStoragePool and DeleteStoragePool api's. the desired behavior of the plugin are: * Allow an Admin to create a primary storage at cluster level, hence creates a volume in elastistor and gets attached to the host with the given capacityiops and capacitybytes through CreateStoragePool api with provider being elastistor. *Allow an admin to delete a primary storage at cluster level, hence it deletes the volume from host in cloudstack and deletes the respective volume in elastistor. * volume and datadisks fuctions performs the default storage fuctions, ie. the driver extends the CloudStackPrimaryDataStoreDriverImpl. * support for both nfs and icsci primary storage. Testing Build test using, mvn -P developer,systemvm clean install, which is successful. Manual testing has been performed using cloudmonkey. * Creating a primary storage based on cloudbyte storage plugin. cloudmonkey# create storagepool scope=cluster zoneid=dac7223c-6d09-4dcb-82fb-bdecf7c657f5 podid=20a613c4-eccf-4fdc-b8ca-c51df483326f clusterid=9a89bc12-bf00-496b-b1d8-8e92cdf1795f name=cloudbytevolume provider=elastistor url=nfs://10.10.171.137/cloudbytetest<http://10.10.171.137/cloudbytetest> capacityiops=500 capacitybytes=214748364800 tags=cloudbytetest storagepool: name = cloudbytevolume id = 57f70aa4-659b-3b53-b8ab-2f712474f107 capacityiops = 500 clusterid = 9a89bc12-bf00-496b-b1d8-8e92cdf1795f clustername = test000 created = 2014-03-11T12:42:38+0530 disksizeallocated = 0 disksizetotal = 214748364800 hypervisor = Any ipaddress = 10.10.171.137 path = /cloudbytetest podid = 20a613c4-eccf-4fdc-b8ca-c51df483326f podname = test00 scope = CLUSTER state = Up tags = cloudbytetest type = NetworkFilesystem zoneid = dac7223c-6d09-4dcb-82fb-bdecf7c657f5 zonename = DevCloud0 * Deleting the primary storage based on cloudbyte storage plugin. cloudmonkey# delete storagepool id=57f70aa4-659b-3b53-b8ab-2f712474f107 success = true * creation of primary storage with negative capacityiops throws an exception. * creation of primary storage with already available name and ip throws an exception. * if the elastistor params which are required for plugin configuration are not injected through spring-storage-volume-cloudbyte-context.xml, it can be set from details map. cloudmonkey# create storagepool scope=cluster zoneid=afacc706-3f4d-4f50-82e6-bf0f82959ba8 podid=821ad540-6c98-43f3-935d-72a47a319b20 clusterid=e0ced156-532e-4941-99c0-f34ff1727544 name=nfsvol provider=elastistor url=nfs://10.10.171.143/volnfs<http://10.10.171.143/volnfs> details[0].esaccountid=9e9f67d5-e06f-4d63-a0b8-e7255cba84b8 details[1].espoolid=d2d15d11-0f06-3426-a097-3e6e8b36f85c details[2].esdefaultgateway=10.10.1.1 details[3].essubnet=8 details[4].estntinterface=em0 details[5].esmanagementip=10.10.171.180 details[6].esapikey=PubSInZaCji8hrRfOsCxgbug2I2k_sRJ0i2a9qmAzZIiCTcFPmZelzx6uNK9TYgqkdohCmq1L2J9eYmUe9YO6A capacityiops=100 capacitybytes=214748364800 storagepool: name = nfsvol id = 7ea08bf6-777a-3553-8f1e-c3a9f9b626cb capacityiops = 100 clusterid = e0ced156-532e-4941-99c0-f34ff1727544 clustername = test000 created = 2014-03-12T17:45:10+0530 disksizeallocated = 0 disksizetotal = 214748364800 hypervisor = Any ipaddress = 10.10.171.143 path = /volnfs podid = 821ad540-6c98-43f3-935d-72a47a319b20 podname = test00 scope = CLUSTER state = Up type = NetworkFilesystem zoneid = afacc706-3f4d-4f50-82e6-bf0f82959ba8 zonename = DevCloud0 * creation of volume on created storage pool. cloudmonkey# create volume zoneid=afacc706-3f4d-4f50-82e6-bf0f82959ba8 diskofferingid=f20e3b76-82e3-43d1-91e3-3ff337d7181d name=testvolume accountid = 819b1dfe-a9d3-11e3-a500-f46d04ee0527 cmd = org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd created = 2014-03-13T11:51:27+0530 jobid = 596294b8-2b49-4b49-8526-9117cf56c95d jobprocstatus = 0 jobresult: volume: name = testvolume id = e079281e-d822-4b90-9e85-9648350a0369 account = admin created = 2014-03-13T11:51:27+0530 destroyed = False diskofferingdisplaytext = Small Disk, 5 GB diskofferingid = f20e3b76-82e3-43d1-91e3-3ff337d7181d diskofferingname = Small displayvolume = True domain = ROOT domainid = 819ae3b6-a9d3-11e3-a500-f46d04ee0527 isextractable = True jobid = 596294b8-2b49-4b49-8526-9117cf56c95d jobstatus = 0 size = 5368709120 state = Allocated storagetype = shared tags: type = DATADISK zoneid = afacc706-3f4d-4f50-82e6-bf0f82959ba8 zonename = DevCloud0 jobresultcode = 0 jobresulttype = object jobstatus = 1 userid = 819b856e-a9d3-11e3-a500-f46d04ee0527 * attaching a specific volume. cloudmonkey# attach volume id=e079281e-d822-4b90-9e85-9648350a0369 virtualmachineid=3e6eeab1-e624-461e-94e0-230215a8dbc3 accountid = 819b1dfe-a9d3-11e3-a500-f46d04ee0527 cmd = org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd created = 2014-03-13T11:55:09+0530 jobid = 364d7636-72ad-410c-891c-c38ac34b6d42 jobprocstatus = 0 jobresult: volume: id = e079281e-d822-4b90-9e85-9648350a0369 name = testvolume account = admin attached = 2014-03-13T11:55:11+0530 created = 2014-03-13T11:51:27+0530 destroyed = False deviceid = 2 diskofferingdisplaytext = Small Disk, 5 GB diskofferingid = f20e3b76-82e3-43d1-91e3-3ff337d7181d diskofferingname = Small displayvolume = True domain = ROOT domainid = 819ae3b6-a9d3-11e3-a500-f46d04ee0527 hypervisor = XenServer isextractable = True jobid = 364d7636-72ad-410c-891c-c38ac34b6d42 jobstatus = 0 size = 5368709120 state = Ready storage = okay storagetype = shared tags: type = DATADISK virtualmachineid = 3e6eeab1-e624-461e-94e0-230215a8dbc3 vmdisplayname = tiny vmname = tiny vmstate = Running zoneid = afacc706-3f4d-4f50-82e6-bf0f82959ba8 zonename = DevCloud0 jobresultcode = 0 jobresulttype = object jobstatus = 1 userid = 819b856e-a9d3-11e3-a500-f46d04ee0527 *detaching a specific volume. cloudmonkey# detach volume id=e079281e-d822-4b90-9e85-9648350a0369 accountid = 819b1dfe-a9d3-11e3-a500-f46d04ee0527 cmd = org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd created = 2014-03-13T11:57:40+0530 jobid = 38fb6463-7d95-4d4c-8a50-1ec8a1c9ba98 jobprocstatus = 0 jobresult: volume: id = e079281e-d822-4b90-9e85-9648350a0369 name = testvolume account = admin created = 2014-03-13T11:51:27+0530 destroyed = False diskofferingdisplaytext = Small Disk, 5 GB diskofferingid = f20e3b76-82e3-43d1-91e3-3ff337d7181d diskofferingname = Small displayvolume = True domain = ROOT domainid = 819ae3b6-a9d3-11e3-a500-f46d04ee0527 hypervisor = XenServer isextractable = True jobid = 38fb6463-7d95-4d4c-8a50-1ec8a1c9ba98 jobstatus = 0 size = 5368709120 state = Ready storage = okay storagetype = shared tags: type = DATADISK zoneid = afacc706-3f4d-4f50-82e6-bf0f82959ba8 zonename = DevCloud0 jobresultcode = 0 jobresulttype = object jobstatus = 1 userid = 819b856e-a9d3-11e3-a500-f46d04ee0527 *deleting a volume cloudmonkey# delete volume id=e079281e-d822-4b90-9e85-9648350a0369 success = true Diffs * client/pom.xml (af724b1) * plugins/pom.xml (097f224) * plugins/storage/volume/cloudbyte/pom.xml (PRE-CREATION) * plugins/storage/volume/cloudbyte/resources/META-INF/cloudstack/storage-volume-cloudbyte/module.properties (PRE-CREATION) * plugins/storage/volume/cloudbyte/resources/META-INF/cloudstack/storage-volume-cloudbyte/spring-storage-volume-cloudbyte-context.xml (PRE-CREATION) * plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/driver/ElastistorPrimaryDataStoreDriver.java (PRE-CREATION) * plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/lifecycle/ElastistorPrimaryDataStoreLifeCycle.java (PRE-CREATION) * plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/provider/ElastistorHostListener.java (PRE-CREATION) * plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/provider/ElastistorPrimaryDataStoreProvider.java (PRE-CREATION) * plugins/storage/volume/cloudbyte/src/org/apache/cloudstack/storage/datastore/util/ElastistorUtil.java (PRE-CREATION) View Diff<https://reviews.apache.org/r/19021/diff/> -- Mike Tutkowski Senior CloudStack Developer, SolidFire Inc. e: mike.tutkow...@solidfire.com<mailto:mike.tutkow...@solidfire.com> o: 303.746.7302 Advancing the way the world uses the cloud<http://solidfire.com/solution/overview/?video=play>(tm)