diff --git a/cinder-driver/libvirt-5.0-vitastor.diff b/cinder-driver/libvirt-5.0-vitastor.diff index 5f9475f6..cf77268d 100644 --- a/cinder-driver/libvirt-5.0-vitastor.diff +++ b/cinder-driver/libvirt-5.0-vitastor.diff @@ -1,4 +1,4 @@ -commit 74b70c3e9482850c0f141f52ef2510466d68050b +commit bd283191b3e7a4c6d1c100d3d96e348a1ebffe55 Author: Vitaliy Filippov Date: Sun Jun 27 12:52:40 2021 +0300 @@ -65,10 +65,32 @@ index 4bf2b5f..dbc011b 100644 int virConnectListAllStoragePools(virConnectPtr conn, diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index 222bb8c..7687a5d 100644 +index 222bb8c..685d255 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c -@@ -30930,6 +30930,7 @@ virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def) +@@ -8653,6 +8653,10 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node, + goto cleanup; + } + ++ if (src->protocol == VIR_STORAGE_NET_PROTOCOL_VITASTOR) { ++ src->relPath = virXMLPropString(node, "query"); ++ } ++ + if ((haveTLS = virXMLPropString(node, "tls")) && + (src->haveTLS = virTristateBoolTypeFromString(haveTLS)) <= 0) { + virReportError(VIR_ERR_XML_ERROR, +@@ -23849,6 +23853,10 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf, + + virBufferEscapeString(attrBuf, " name='%s'", path ? path : src->path); + ++ if (src->protocol == VIR_STORAGE_NET_PROTOCOL_VITASTOR && src->relPath != NULL) { ++ virBufferEscapeString(attrBuf, " query='%s'", src->relPath); ++ } ++ + VIR_FREE(path); + + if (src->haveTLS != VIR_TRISTATE_BOOL_ABSENT && +@@ -30930,6 +30938,7 @@ virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def) case VIR_STORAGE_POOL_MPATH: case VIR_STORAGE_POOL_RBD: @@ -194,32 +216,45 @@ index 73e988a..ab7bb81 100644 case VIR_STORAGE_NET_PROTOCOL_NONE: virReportError(VIR_ERR_NO_SUPPORT, diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c -index cbf0aa4..a485979 100644 +index cbf0aa4..096700d 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c -@@ -959,6 +959,29 @@ qemuBlockStorageSourceGetRBDProps(virStorageSourcePtr src) +@@ -959,6 +959,42 @@ qemuBlockStorageSourceGetRBDProps(virStorageSourcePtr src) } +static virJSONValuePtr +qemuBlockStorageSourceGetVitastorProps(virStorageSource *src) +{ -+ virJSONValuePtr servers = NULL; + virJSONValuePtr ret = NULL; ++ virStorageNetHostDefPtr host; ++ size_t i; ++ virBuffer buf = VIR_BUFFER_INITIALIZER; ++ char *etcd = NULL; + -+ if (src->nhosts > 0 && -+ !(servers = qemuBlockStorageSourceBuildHostsJSONInetSocketAddress(src))) -+ return NULL; ++ for (i = 0; i < src->nhosts; i++) { ++ host = src->hosts + i; ++ if ((virStorageNetHostTransport)host->transport != VIR_STORAGE_NET_HOST_TRANS_TCP) { ++ goto cleanup; ++ } ++ virBufferAsprintf(&buf, i > 0 ? ",%s:%u" : "%s:%u", host->name, host->port); ++ } ++ if (src->nhosts > 0) { ++ etcd = virBufferContentAndReset(&buf); ++ } + + if (virJSONValueObjectCreate(&ret, + "s:driver", "vitastor", -+ "A:server", &servers, -+ "s:etcd_prefix", src->relPath, ++ "S:etcd_host", etcd, ++ "S:etcd_prefix", src->relPath, + "S:config_path", src->configFile, + "s:image", src->path, + NULL) < 0) -+ return NULL; ++ goto cleanup; + ++cleanup: ++ VIR_FREE(etcd); ++ virBufferFreeAndReset(&buf); + return ret; +} + @@ -227,7 +262,7 @@ index cbf0aa4..a485979 100644 static virJSONValuePtr qemuBlockStorageSourceGetSheepdogProps(virStorageSourcePtr src) { -@@ -1174,6 +1197,11 @@ qemuBlockStorageSourceGetBackendProps(virStorageSourcePtr src, +@@ -1174,6 +1210,11 @@ qemuBlockStorageSourceGetBackendProps(virStorageSourcePtr src, return NULL; break; diff --git a/cinder-driver/libvirt-7.0-vitastor.diff b/cinder-driver/libvirt-7.0-vitastor.diff index e94b8f50..1d5777de 100644 --- a/cinder-driver/libvirt-7.0-vitastor.diff +++ b/cinder-driver/libvirt-7.0-vitastor.diff @@ -1,6 +1,6 @@ -commit 41854e5059a1ba0b8e2918ce872e1ba78d3ecd6a +commit 41cdfe8317d98f70aadedfdbb381effed2641bdd Author: Vitaliy Filippov -Date: Mon Jun 28 01:18:41 2021 +0300 +Date: Fri Jul 9 01:31:57 2021 +0300 Add Vitastor support @@ -65,10 +65,20 @@ index 089e1e0..d7e7ef4 100644 int virConnectListAllStoragePools(virConnectPtr conn, diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index 01b7187..5b81e37 100644 +index 01b7187..c6e9702 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c -@@ -31392,6 +31392,7 @@ virDomainStorageSourceTranslateSourcePool(virStorageSourcePtr src, +@@ -8261,7 +8261,8 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node, + src->configFile = virXPathString("string(./config/@file)", ctxt); + + if (src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTP || +- src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS) ++ src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS || ++ src->protocol == VIR_STORAGE_NET_PROTOCOL_VITASTOR) + src->query = virXMLPropString(node, "query"); + + if (virDomainStorageNetworkParseHosts(node, ctxt, &src->hosts, &src->nhosts) < 0) +@@ -31392,6 +31393,7 @@ virDomainStorageSourceTranslateSourcePool(virStorageSourcePtr src, case VIR_STORAGE_POOL_MPATH: case VIR_STORAGE_POOL_RBD: @@ -206,26 +216,36 @@ index 17b93d0..c5a0084 100644 case VIR_STORAGE_NET_PROTOCOL_NONE: virReportError(VIR_ERR_NO_SUPPORT, diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c -index f9c6da2..92093e4 100644 +index f9c6da2..922dde5 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c -@@ -938,6 +938,28 @@ qemuBlockStorageSourceGetRBDProps(virStorageSourcePtr src, +@@ -938,6 +938,38 @@ qemuBlockStorageSourceGetRBDProps(virStorageSourcePtr src, } +static virJSONValuePtr +qemuBlockStorageSourceGetVitastorProps(virStorageSource *src) +{ -+ g_autoptr(virJSONValue) servers = NULL; + virJSONValuePtr ret = NULL; ++ virStorageNetHostDefPtr host; ++ size_t i; ++ g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; ++ g_autofree char *etcd = NULL; + -+ if (src->nhosts > 0 && -+ !(servers = qemuBlockStorageSourceBuildHostsJSONInetSocketAddress(src))) -+ return NULL; ++ for (i = 0; i < src->nhosts; i++) { ++ host = src->hosts + i; ++ if ((virStorageNetHostTransport)host->transport != VIR_STORAGE_NET_HOST_TRANS_TCP) { ++ return NULL; ++ } ++ virBufferAsprintf(&buf, i > 0 ? ",%s:%u" : "%s:%u", host->name, host->port); ++ } ++ if (src->nhosts > 0) { ++ etcd = virBufferContentAndReset(&buf); ++ } + + if (virJSONValueObjectCreate(&ret, -+ "A:server", &servers, -+ "s:etcd_prefix", src->query, ++ "S:etcd_host", etcd, ++ "S:etcd_prefix", src->query, + "S:config_path", src->configFile, + "s:image", src->path, + NULL) < 0) @@ -238,7 +258,7 @@ index f9c6da2..92093e4 100644 static virJSONValuePtr qemuBlockStorageSourceGetSheepdogProps(virStorageSourcePtr src) { -@@ -1224,6 +1246,12 @@ qemuBlockStorageSourceGetBackendProps(virStorageSourcePtr src, +@@ -1224,6 +1256,12 @@ qemuBlockStorageSourceGetBackendProps(virStorageSourcePtr src, return NULL; break; @@ -251,7 +271,7 @@ index f9c6da2..92093e4 100644 case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG: driver = "sheepdog"; if (!(fileprops = qemuBlockStorageSourceGetSheepdogProps(src))) -@@ -2183,6 +2211,7 @@ qemuBlockGetBackingStoreString(virStorageSourcePtr src, +@@ -2183,6 +2221,7 @@ qemuBlockGetBackingStoreString(virStorageSourcePtr src, case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG: case VIR_STORAGE_NET_PROTOCOL_RBD: @@ -259,7 +279,7 @@ index f9c6da2..92093e4 100644 case VIR_STORAGE_NET_PROTOCOL_VXHS: case VIR_STORAGE_NET_PROTOCOL_NFS: case VIR_STORAGE_NET_PROTOCOL_SSH: -@@ -2560,6 +2589,12 @@ qemuBlockStorageSourceCreateGetStorageProps(virStorageSourcePtr src, +@@ -2560,6 +2599,12 @@ qemuBlockStorageSourceCreateGetStorageProps(virStorageSourcePtr src, return -1; break; @@ -321,10 +341,20 @@ index 6f970a3..10b39ca 100644 virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("VxHS protocol does not support URI syntax")); diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index 0765dc7..c69b1f1 100644 +index 0765dc7..4cff344 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c -@@ -9704,6 +9704,7 @@ qemuDomainPrepareStorageSourceTLS(virStorageSourcePtr src, +@@ -4610,7 +4610,8 @@ qemuDomainValidateStorageSource(virStorageSourcePtr src, + if (src->query && + (actualType != VIR_STORAGE_TYPE_NETWORK || + (src->protocol != VIR_STORAGE_NET_PROTOCOL_HTTPS && +- src->protocol != VIR_STORAGE_NET_PROTOCOL_HTTP))) { ++ src->protocol != VIR_STORAGE_NET_PROTOCOL_HTTP && ++ src->protocol != VIR_STORAGE_NET_PROTOCOL_VITASTOR))) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("query is supported only with HTTP(S) protocols")); + return -1; +@@ -9704,6 +9705,7 @@ qemuDomainPrepareStorageSourceTLS(virStorageSourcePtr src, break; case VIR_STORAGE_NET_PROTOCOL_RBD: diff --git a/cinder-driver/libvirt-7.5-vitastor.diff b/cinder-driver/libvirt-7.5-vitastor.diff index fb50dca6..620fbed0 100644 --- a/cinder-driver/libvirt-7.5-vitastor.diff +++ b/cinder-driver/libvirt-7.5-vitastor.diff @@ -1,4 +1,4 @@ -commit 804f2fb24aedd32e238f84a7865e8a454e012e9c +commit c6e1958a1b4974828e8e5852beb252ce6594e670 Author: Vitaliy Filippov Date: Mon Jun 28 01:20:19 2021 +0300 @@ -65,10 +65,20 @@ index 089e1e0..d7e7ef4 100644 int virConnectListAllStoragePools(virConnectPtr conn, diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index d78f846..97f4d6d 100644 +index d78f846..f7222e3 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c -@@ -30775,6 +30775,7 @@ virDomainStorageSourceTranslateSourcePool(virStorageSource *src, +@@ -8251,7 +8251,8 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node, + src->configFile = virXPathString("string(./config/@file)", ctxt); + + if (src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTP || +- src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS) ++ src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS || ++ src->protocol == VIR_STORAGE_NET_PROTOCOL_VITASTOR) + src->query = virXMLPropString(node, "query"); + + if (virDomainStorageNetworkParseHosts(node, ctxt, &src->hosts, &src->nhosts) < 0) +@@ -30775,6 +30776,7 @@ virDomainStorageSourceTranslateSourcePool(virStorageSource *src, case VIR_STORAGE_POOL_MPATH: case VIR_STORAGE_POOL_RBD: @@ -238,26 +248,36 @@ index c0905b0..c172378 100644 case VIR_STORAGE_NET_PROTOCOL_NONE: virReportError(VIR_ERR_NO_SUPPORT, diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c -index 6627d04..277b04e 100644 +index 6627d04..c33f428 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c -@@ -928,6 +928,28 @@ qemuBlockStorageSourceGetRBDProps(virStorageSource *src, +@@ -928,6 +928,38 @@ qemuBlockStorageSourceGetRBDProps(virStorageSource *src, } +static virJSONValue * +qemuBlockStorageSourceGetVitastorProps(virStorageSource *src) +{ -+ g_autoptr(virJSONValue) servers = NULL; -+ virJSONValue *ret = NULL; ++ virJSONValuePtr ret = NULL; ++ virStorageNetHostDefPtr host; ++ size_t i; ++ g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; ++ g_autofree char *etcd = NULL; + -+ if (src->nhosts > 0 && -+ !(servers = qemuBlockStorageSourceBuildHostsJSONInetSocketAddress(src))) -+ return NULL; ++ for (i = 0; i < src->nhosts; i++) { ++ host = src->hosts + i; ++ if ((virStorageNetHostTransport)host->transport != VIR_STORAGE_NET_HOST_TRANS_TCP) { ++ return NULL; ++ } ++ virBufferAsprintf(&buf, i > 0 ? ",%s:%u" : "%s:%u", host->name, host->port); ++ } ++ if (src->nhosts > 0) { ++ etcd = virBufferContentAndReset(&buf); ++ } + + if (virJSONValueObjectCreate(&ret, -+ "A:etcd_address", &servers, -+ "s:etcd_prefix", src->query, ++ "S:etcd_host", etcd, ++ "S:etcd_prefix", src->query, + "S:config_path", src->configFile, + "s:image", src->path, + NULL) < 0) @@ -270,7 +290,7 @@ index 6627d04..277b04e 100644 static virJSONValue * qemuBlockStorageSourceGetSheepdogProps(virStorageSource *src) { -@@ -1218,6 +1240,12 @@ qemuBlockStorageSourceGetBackendProps(virStorageSource *src, +@@ -1218,6 +1250,12 @@ qemuBlockStorageSourceGetBackendProps(virStorageSource *src, return NULL; break; @@ -283,7 +303,7 @@ index 6627d04..277b04e 100644 case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG: driver = "sheepdog"; if (!(fileprops = qemuBlockStorageSourceGetSheepdogProps(src))) -@@ -2231,6 +2259,7 @@ qemuBlockGetBackingStoreString(virStorageSource *src, +@@ -2231,6 +2269,7 @@ qemuBlockGetBackingStoreString(virStorageSource *src, case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG: case VIR_STORAGE_NET_PROTOCOL_RBD: @@ -291,7 +311,7 @@ index 6627d04..277b04e 100644 case VIR_STORAGE_NET_PROTOCOL_VXHS: case VIR_STORAGE_NET_PROTOCOL_NFS: case VIR_STORAGE_NET_PROTOCOL_SSH: -@@ -2608,6 +2637,12 @@ qemuBlockStorageSourceCreateGetStorageProps(virStorageSource *src, +@@ -2608,6 +2647,12 @@ qemuBlockStorageSourceCreateGetStorageProps(virStorageSource *src, return -1; break; @@ -353,10 +373,20 @@ index ea51369..8258632 100644 virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("VxHS protocol does not support URI syntax")); diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c -index fc60e15..88bcb26 100644 +index fc60e15..5ab410d 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c -@@ -10027,6 +10027,7 @@ qemuDomainPrepareStorageSourceTLS(virStorageSource *src, +@@ -4829,7 +4829,8 @@ qemuDomainValidateStorageSource(virStorageSource *src, + if (src->query && + (actualType != VIR_STORAGE_TYPE_NETWORK || + (src->protocol != VIR_STORAGE_NET_PROTOCOL_HTTPS && +- src->protocol != VIR_STORAGE_NET_PROTOCOL_HTTP))) { ++ src->protocol != VIR_STORAGE_NET_PROTOCOL_HTTP && ++ src->protocol != VIR_STORAGE_NET_PROTOCOL_VITASTOR))) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("query is supported only with HTTP(S) protocols")); + return -1; +@@ -10027,6 +10028,7 @@ qemuDomainPrepareStorageSourceTLS(virStorageSource *src, break; case VIR_STORAGE_NET_PROTOCOL_RBD: