As I think more about createAsync, I believe I would need to accomplish two
tasks here:

1) Create my volume on the SAN.

2) Add a row to the volumes table describing this new SAN volume.

So, I think CreateCommand, though, is used when you want to actually create
a volume on an SR, right?  If that's the case, I wouldn't want to do that
in createAsync because at that point I don't know what cluster my volume
will be on, right?  I would just want to update the DB table volumes with
my SAN volume info.


On Wed, Apr 17, 2013 at 12:52 PM, Mike Tutkowski <
mike.tutkow...@solidfire.com> wrote:

> Meant to send this out to the entire list, so others could hear what
> Edison has to say, as well.
>
>
> ---------- Forwarded message ----------
> From: Mike Tutkowski <mike.tutkow...@solidfire.com>
> Date: Wed, Apr 17, 2013 at 12:42 PM
> Subject: Re: createAsync Question
> To: Edison Su <edison...@citrix.com>
>
>
> Ah, I remember our discussion about that more now.
>
> Here is what my createAsync currently looks like (after I read your
> e-mail):
>
>     @Override
>
>     public void createAsync(DataObject data,
> AsyncCompletionCallback<CreateCmdResult> callback) {
>
>         String iqn = null;
>
>         String errMsg = null;
>
>          if (data.getType() == DataObjectType.VOLUME) {
>
>             try {
>
>                 // just create a SolidFire volume and return IQN
>
>                 iqn = createSolidFireVolume((VolumeInfo)data);
>
>             } catch (StorageUnavailableException e) {
>
>                 s_logger.debug("Failed to create volume
> (StorageUnavailableException)", e);
>
>                 errMsg = e.toString();
>
>            } catch (Exception e) {
>
>                s_logger.debug("Failed to create volume (Exception)", e);
>
>                errMsg = e.toString();
>
>            }
>
>         }
>
>         else {
>
>             errMsg = "Invalid DataObjectType (" + data.getType() + ")
> passed to createAsync";
>
>         }
>
>          // path = iqn
>
>         // size is pulled from DataObject instance, if errMsg is null
>
>         CreateCmdResult result = new CreateCmdResult(iqn, errMsg != null? 
> null : data.getSize());
>
>          if (errMsg != null) {
>
>             result.setResult(errMsg);
>
>         }
>
>
>         callback.complete(result);
>
>     }
>
>
> Do I have to update any DB table at this point now that my volume has been
> created on the SAN?
>
>
> Thanks!!
>
>
> On Wed, Apr 17, 2013 at 12:09 AM, Edison Su <edison...@citrix.com> wrote:
>
>>  Creatasync doesn't need to create a storage pool on the hypervisor
>> host, as you don't know which hypervisor host want to access the volume yet.
>> The volume will be accessed by hypervisor host in attachvolumecmd, you
>> can add your code in citrixresource: execute(attachvolumecmd), to create a
>> sr from an iscsi lun, and also create a vdi from the sr, then vbd, the
>> attach it to vm.
>>
>> Sent from my Windows Phone
>>  ------------------------------
>> From: Mike Tutkowski <mike.tutkow...@solidfire.com>
>> Sent: 4/16/2013 1:59 PM
>>
>> To: Edison Su <edison...@citrix.com>; cloudstack-...@incubator.apache.org
>> Subject: createAsync Question
>>
>>  Hi Edison,
>>
>>  I have another question regarding our discussion yesterday.
>>
>>  I'm trying to implement the createAsync method.
>>
>>  This is my impression for how I should start doing so:
>>
>>  Create a volume on our SAN.  I believe I can get the specs for this
>> volume from the Disk Offering like this:
>>
>>  DiskOfferingVO offering = diskOfferingDao
>> .findById(volume.getDiskOfferingId());
>>
>>  The next part is a bit hazy.  As we discussed yesterday, let's just
>> deal with XenServer for the moment.  :)
>>
>>  I'm thinking after I create my volume on the SAN, I should create an
>> instance of CreateStoragePoolCommand and send it to the hypervisor this way:
>>
>>  Answer answer = storageMgr.sendToPool(pool, null, cmd);
>>
>>  The type of the storage pool I would place in the
>> CreateStoragePoolCommand instance is StoragePoolType.IscsiLUN.
>>
>>  This would create a storage repository for me on the hypervisor.
>>
>>  I would then need to create an instance of CreateCommand and send it to
>> the hypervisor the same way to create a volume on the storage repository I
>> just created:
>>
>>  Answer answer = storageMgr.sendToPool(pool, null, cmd);
>>
>>  This volume on the storage repository would consume the entire SR.
>>
>>  Am I making decent sense here?
>>
>>  Thanks!
>>
>>  --
>> *Mike Tutkowski*
>> *Senior CloudStack Developer, SolidFire Inc.*
>> e: mike.tutkow...@solidfire.com
>> o: 303.746.7302
>> Advancing the way the world uses the 
>> cloud<http://solidfire.com/solution/overview/?video=play>
>> *™*
>>
>
>
>
> --
> *Mike Tutkowski*
>  *Senior CloudStack Developer, SolidFire Inc.*
> e: mike.tutkow...@solidfire.com
> o: 303.746.7302
> Advancing the way the world uses the 
> cloud<http://solidfire.com/solution/overview/?video=play>
> *™*
>
>
>
> --
> *Mike Tutkowski*
> *Senior CloudStack Developer, SolidFire Inc.*
> e: mike.tutkow...@solidfire.com
> o: 303.746.7302
> Advancing the way the world uses the 
> cloud<http://solidfire.com/solution/overview/?video=play>
> *™*
>



-- 
*Mike Tutkowski*
*Senior CloudStack Developer, SolidFire Inc.*
e: mike.tutkow...@solidfire.com
o: 303.746.7302
Advancing the way the world uses the
cloud<http://solidfire.com/solution/overview/?video=play>
*™*

Reply via email to