
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@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 :|