<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>> Date: Sun, 5 Aug 2012 23:04:07 +0200<br>> Subject: Re: [libvirt] Proposal to add iSCSI support to esx storage driver<br>> From: matthias.bolte@googlemail.com<br>> To: ata.husain@hotmail.com<br>> CC: libvir-list@redhat.com<br>> <br>> 2012/8/2 Ata Bohra <ata.husain@hotmail.com>:<br>> > Hi All,<br>> ><br>> > I just want to go over the design that I am working on to incorporate iSCSI<br>> > support to libvirt ESX storage driver. The highlights are:<br>> ><br>> > Current Implementation<br>> > At present esx_storage_driver supports only VMFS type datastore and does not<br>> > provide much leeway to enhance or add other supported storage pools such as<br>> > iSCSI.<br>> ><br>> > Proposal<br>> > My proposal is:<br>> > 1. Split the current code such as esx_storage_driver becomes more like a<br>> > facade; this driver will use "backend" drivers to perform the request task<br>> > (such as: esx_storage_backend_iscsi and esx_storage_backend_vmfs)<br>> > 2. Based on the pool type (lookup can determine storage pool type), the base<br>> > driver then invoke the appropriate backend driver routine to get the job<br>> > done.<br>> > 3. Backend driver shall implement same routines exposed by<br>> > esx_storage_driver if needed, but the implementation will be pertinent to<br>> > its specific type.<br>> <br>> I took a quick look at the vSphere API regarding iSCSI but I'm not<br>> sure how it's supposed to work. Do you have a better understanding<br>> about this. I'd like to discuss the conceptual part first. How does<br>> storage pool and volume listing/creation/destruction work with iSCSI?<br>> Does it differ from the current code at all? If it differs is it that<br>> different that we really need this radical split?<br>> <br>> -- <br>> Matthias Bolte<br>> <a href="http://photron.blogspot.com">http://photron.blogspot.com</a><br><BR>Hi Matthias, <BR> <BR>Below is my understanding as per the iSCSI operations mapping of vSphere APIs and libvirt. <BR> <BR>Storage Pool  <---> iSCSI target (as ESX provides set of static targets as well dynamic target, I am targetting list of only static targets as they gaurantee LUN exposed on that IQN and covers corresponding dynamic target too)<BR> <BR>Volumes <----> Logical Units Number exposed to that host on that IQN.<BR> <BR>Above listed mapping are real important for me to get right, please let me know if you think they does not map well. ( I have based my understanding as per brief discussion mentioned at <a href="http://libvirt.org/storage.html">http://libvirt.org/storage.html</a>) <BR> <BR>As iSCSI and VMFS (encapsulating all ESX supported datastores) operation differ significantly such as:<BR>1. iSCSI volumes can be listed but cannot be created/destroyed.<BR>2. iSCSI ESX data objects have no similarity with datastore type storage dataobjects (for iSCSI they are: HostScsiTopology and ScsiLun; it would be useful to share the complete mapping if you are interested, please let me know). <BR> <BR>The current esx_storage_driver.c is written solely for pool/volumes that support VMFS datastore operations, BUT a subset of operation can be provided for iSCSI storage pool/volume. It is possible to append the current code to support iSCSI operation but I think it clutter the code. <BR>With that intention I proposed to split the pool specific implementation to backend drivers and esx libvirt storage interface driver simply delegates task to the backend driver.<BR> <BR>Looking forward for your comments and suggestions. <BR> <BR>Thanks!<BR>Ata<BR>                                          </div></body>
</html>