[libvirt] [PATCH v2 2/3] storage: Introduce iscsi_direct pool type
Clementine Hayat
clementinehayat at gmail.com
Tue Jul 24 16:19:45 UTC 2018
2018-07-24 14:24 GMT+02:00 Michal Privoznik <mprivozn at redhat.com>:
> On 07/23/2018 08:43 PM, clem at lse.epita.fr wrote:
>> From: Clementine Hayat <clem at lse.epita.fr>
>>
>> Introducing the pool as a noop. Integration inside the build
>> system. Implementation will be in the following commits.
>>
>> Signed-off-by: Clementine Hayat <clem at lse.epita.fr>
>> ---
>> configure.ac | 6 ++-
>> m4/virt-storage-iscsi-direct.m4 | 41 +++++++++++++++
>> src/conf/domain_conf.c | 4 ++
>> src/conf/storage_conf.c | 33 ++++++++++--
>> src/conf/storage_conf.h | 1 +
>> src/conf/virstorageobj.c | 2 +
>> src/storage/Makefile.inc.am | 22 ++++++++
>> src/storage/storage_backend.c | 6 +++
>> src/storage/storage_backend_iscsi_direct.c | 58 ++++++++++++++++++++++
>> src/storage/storage_backend_iscsi_direct.h | 6 +++
>> src/storage/storage_driver.c | 1 +
>> tools/virsh-pool.c | 3 ++
>> 12 files changed, 178 insertions(+), 5 deletions(-)
>> create mode 100644 m4/virt-storage-iscsi-direct.m4
>> create mode 100644 src/storage/storage_backend_iscsi_direct.c
>> create mode 100644 src/storage/storage_backend_iscsi_direct.h
>
> Missing documentation. I can not push these without any documentation.
> You need to document what the new type is doing, what the XML should
> look like. Also, might be worth putting some test cases into
> storagepoolxml2xmltest.
> Since you will be sending v3, can you add docs/news.xml entry (in a
> separate patch) too please?
Yes sure.
>> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>> index 7396616eda..5af27a6ad2 100644
>> --- a/src/conf/domain_conf.c
>> +++ b/src/conf/domain_conf.c
>> @@ -30163,6 +30163,10 @@ virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def)
>>
>> break;
>>
>> + case VIR_STORAGE_POOL_ISCSI_DIRECT:
>> + def->src->srcpool->mode = VIR_STORAGE_SOURCE_POOL_MODE_DIRECT;
>> + break;
>> +
>> case VIR_STORAGE_POOL_ISCSI:
>> if (def->startupPolicy) {
>> virReportError(VIR_ERR_XML_ERROR, "%s",
>> diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
>> index 5036ab9ef8..ee1586410b 100644
>> --- a/src/conf/storage_conf.c
>> +++ b/src/conf/storage_conf.c
>> @@ -62,9 +62,9 @@ VIR_ENUM_IMPL(virStoragePool,
>> VIR_STORAGE_POOL_LAST,
>> "dir", "fs", "netfs",
>> "logical", "disk", "iscsi",
>> - "scsi", "mpath", "rbd",
>> - "sheepdog", "gluster", "zfs",
>> - "vstorage")
>> + "iscsi-direct", "scsi", "mpath",
>> + "rbd", "sheepdog", "gluster",
>> + "zfs", "vstorage")
>>
>> VIR_ENUM_IMPL(virStoragePoolFormatFileSystem,
>> VIR_STORAGE_POOL_FS_LAST,
>> @@ -207,6 +207,17 @@ static virStoragePoolTypeInfo poolTypeInfo[] = {
>> .formatToString = virStoragePoolFormatDiskTypeToString,
>> }
>> },
>> + {.poolType = VIR_STORAGE_POOL_ISCSI_DIRECT,
>> + .poolOptions = {
>> + .flags = (VIR_STORAGE_POOL_SOURCE_HOST |
>> + VIR_STORAGE_POOL_SOURCE_DEVICE |
>> + VIR_STORAGE_POOL_SOURCE_NETWORK |
>> + VIR_STORAGE_POOL_SOURCE_INITIATOR_IQN),
>> + },
>> + .volOptions = {
>> + .formatToString = virStoragePoolFormatDiskTypeToString,
>> + }
>> + },
>> {.poolType = VIR_STORAGE_POOL_SCSI,
>> .poolOptions = {
>> .flags = (VIR_STORAGE_POOL_SOURCE_ADAPTER),
>> @@ -803,6 +814,19 @@ virStoragePoolDefParseXML(xmlXPathContextPtr ctxt)
>> goto error;
>> }
>>
>> + if (ret->type == VIR_STORAGE_POOL_ISCSI_DIRECT) {
>> + if (!ret->source.initiator.iqn) {
>> + virReportError(VIR_ERR_XML_ERROR, "%s",
>> + _("missing storage pool initiator iqn"));
>> + goto error;
>> + }
>> + if (!ret->source.ndevice) {
>> + virReportError(VIR_ERR_XML_ERROR, "%s",
>> + _("missing storage pool device path"));
>> + goto error;
>> + }
>> + }
>
> So the wole idea of poolOptions and volOptions is to specify which parts
> of pool/volume XML are required so that we don't have to base checks
> like this on ret->type rather than flags.
> On the other hand, comment just above VIR_STORAGE_POOL_SOURCE_* enum
> says it declares mandatory components which it clearly doesn't. So after
> all I think we are safe here.
That actually isn't the case for the initiator iqn flag.
Is it on purpose or should I patch it in another thread?
>> +
>> cleanup:
>> VIR_FREE(uuid);
>> VIR_FREE(type);
>> @@ -1004,7 +1028,8 @@ virStoragePoolDefFormatBuf(virBufferPtr buf,
>> * files, so they don't have a target */
>> if (def->type != VIR_STORAGE_POOL_RBD &&
>> def->type != VIR_STORAGE_POOL_SHEEPDOG &&
>> - def->type != VIR_STORAGE_POOL_GLUSTER) {
>> + def->type != VIR_STORAGE_POOL_GLUSTER &&
>> + def->type != VIR_STORAGE_POOL_ISCSI_DIRECT) {
>> virBufferAddLit(buf, "<target>\n");
>> virBufferAdjustIndent(buf, 2);
>
> Might be worth updating the comment just above this block ;-)
>
Sure!
--
Clementine Hayat
More information about the libvir-list
mailing list