On Mon, Jan 18, 2021 at 02:12:04PM +0100, Peter Krempa wrote:
On Fri, Jan 15, 2021 at 08:16:47 +0100, Rene Peinthor wrote:
> Implement a LINSTOR backend storage driver.
> The Linstor client needs to be installed and it needs to be configured
> on the nodes used by the controller.
>
> It supports most pool/vol commands, except for pool-build/pool-delete
> and provides a block device in RAW file mode.
> Linstor supports more than just DRBD so it would also be possible to have
> it provide LVM, ZFS or NVME volumes, but the common case will be to provide
> DRBD volumes in a cluster.
>
> Sample pool XML:
> <pool type='linstor'>
> <name>linstor</name>
> <source>
> <host name='ubuntu-focal-60'/>
> <name>libvirtgrp</name>
> </source>
> </pool>
>
> <pool/source/name> element must point to an already created LINSTOR
> resource-group, which is used to spawn resources/volumes.
> <pool/source/host@name> attribute should be the local linstor node name,
> if missing it will try to get the hosts uname and use that instead.
>
> Result volume XML sample:
> <volume type='block'>
> <name>alpine12</name>
> <key>libvirtgrp/alpine12</key>
> <capacity unit='bytes'>5368709120</capacity>
> <allocation unit='bytes'>5540028416</allocation>
> <target>
> <path>/dev/drbd1000</path>
> <format type='raw'/>
> </target>
> </volume>
>
> Signed-off-by: Rene Peinthor <rene.peinthor(a)linbit.com>
> ---
Firstly I'd like you to split the patch into more granular commits as
it's customary in our project ...
> docs/schemas/storagepool.rng | 27 +
> docs/storage.html.in | 39 +
> include/libvirt/libvirt-storage.h | 1 +
> meson.build | 6 +
> meson_options.txt | 1 +
> po/POTFILES.in | 1 +
> src/conf/domain_conf.c | 1 +
> src/conf/storage_conf.c | 14 +-
> src/conf/storage_conf.h | 1 +
> src/conf/virstorageobj.c | 4 +-a
Conf changes are usually separate
> src/storage/meson.build | 25 +
> src/storage/storage_backend.c | 6 +
> src/storage/storage_backend_linstor.c | 803 ++++++++++++++++++
> src/storage/storage_backend_linstor.h | 23 +
> src/storage/storage_backend_linstor_priv.h | 53 ++
> src/storage/storage_driver.c | 1 +
Implementation should also be separate
> src/test/test_driver.c | 1 +
> tests/linstorjsondata/broken.json | 1 +
> tests/linstorjsondata/resource-group.json | 1 +
> .../linstorjsondata/resource-list-test2.json | 332 ++++++++
> .../storage-pools-ssdpool.json | 72 ++
> tests/linstorjsondata/storage-pools.json | 192 +++++
> tests/linstorjsondata/volume-def-list.json | 158 ++++
> .../volume-definition-test2.json | 1 +
> tests/meson.build | 6 +
> tests/storagebackendlinstortest.c | 371 ++++++++
> .../storagepoolcapsschemadata/poolcaps-fs.xml | 7 +
> .../poolcaps-full.xml | 7 +
> tests/storagepoolxml2argvtest.c | 1 +
> tests/storagepoolxml2xmlin/pool-linstor.xml | 8 +
> tests/storagevolxml2xmlin/vol-linstor.xml | 10 +
Placing tests depends. Usually XML related tests go with the commits
implementing the parser/formatter or follow that commit.
Other tests should be added separately.
> tools/virsh-pool.c | 3 +
This is adding the support for the new type so it goes where the type is
declared
> 32 files changed, 2175 insertions(+), 2 deletions(-)
[...]
> diff --git a/docs/schemas/storagepool.rng b/docs/schemas/storagepool.rng
> index bd24b8b8d0..9b163e611d 100644
> --- a/docs/schemas/storagepool.rng
> +++ b/docs/schemas/storagepool.rng
> @@ -26,6 +26,7 @@
> <ref name="poolgluster"/>
> <ref name="poolzfs"/>
> <ref name="poolvstorage"/>
> + <ref name="poollinstor"/>
> </choice>
> </element>
> </define>
> @@ -224,6 +225,21 @@
> </interleave>
> </define>
>
> + <define name="poollinstor">
> + <attribute name="type">
> + <value>linstor</value>
> + </attribute>
> + <interleave>
> + <ref name="commonMetadataNameOptional"/>
> + <ref name="sizing"/>
> + <ref name="features"/>
> + <ref name="sourcelinstor"/>
> + <optional>
> + <ref name="target"/>
> + </optional>
> + </interleave>
> + </define>
> +
> <define name="sourceinfovendor">
> <interleave>
> <optional>
> @@ -463,6 +479,17 @@
> </element>
> </define>
>
> + <define name="sourcelinstor">
> + <element name="source">
> + <interleave>
> + <ref name="sourceinfoname"/>
> + <optional>
> + <ref name="sourceinfohost"/>
> + </optional>
> + </interleave>
> + </element>
> + </define>
> +
> <define name="sourcefmtfs">
> <optional>
> <element name="format">
> diff --git a/docs/storage.html.in b/docs/storage.html.in
> index b2cf343933..9130fbd180 100644
> --- a/docs/storage.html.in
> +++ b/docs/storage.html.in
> @@ -829,5 +829,44 @@
>
> <h3>Valid volume format types</h3>
> <p>The valid volume types are the same as for the directory
pool.</p>
> +
> +
> + <h2><a id="StorageBackendLINSTOR">LINSTOR
pool</a></h2>
> + <p>
> + This provides a pool using the LINSTOR software-defined-storage.
> + LINSTOR can provide block storage devices based on DRBD or basic
> + LVM/ZFS volumes.
> + </p>
> +
> + <p>
> + To use LINSTOR in libvirt, setup a working LINSTOR cluster, documentation
> + for that is in the LINSTOR Users-guide.
Could you link to it?
Also I'd like to ask you to provide a way to setup this storage on our
CI system so that we can compile-test the new driver.
It doesn't seem like there is anything required in this respect. The
code isn't linking to any linstor specific libraries from what I see
in the meson.build. So compile testing should be easy unless Im
missing something.
Regards,
Daniel
--
|:
https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
|:
https://libvirt.org -o-
https://fstop138.berrange.com :|
|:
https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|