提交 cd4a8b93 编写于 作者: P Pavel Hrdina

conf: store "autoGenerated" for graphics listen in status XML

When libvirtd is started we call qemuDomainRecheckInternalPaths
to detect whether a domain has VNC socket path generated by libvirt
based on option from qemu.conf.  However if we are parsing status XML
for running domain the existing socket path can be generated also if
the config XML uses the new <listen type='socket'/> element without
specifying any socket.

The current code doesn't make difference how the socket was generated
and always marks it as "fromConfig".  We need to store the
"autoGenerated" value in the status XML in order to preserve that
information.

The difference between "fromConfig" and "autoGenerated" is important
for migration, because if the socket is based on "fromConfig" we don't
print it into the migratable XML and we assume that user has properly
configured qemu.conf on both hosts.  However if the socket is based
on "autoGenerated" it means that a new feature was used and therefore
we need to leave the socket in migratable XML to make sure that if
this feature is not supported on destination the migration will fail.
Signed-off-by: NPavel Hrdina <phrdina@redhat.com>
上级 b2e5de96
......@@ -11543,6 +11543,7 @@ virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr def,
char *network = virXMLPropString(node, "network");
char *socketPath = virXMLPropString(node, "socket");
char *fromConfig = virXMLPropString(node, "fromConfig");
char *autoGenerated = virXMLPropString(node, "autoGenerated");
char *addressCompat = NULL;
char *socketCompat = NULL;
const char *graphicsType = virDomainGraphicsTypeToString(graphics->type);
......@@ -11662,6 +11663,18 @@ virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr def,
def->fromConfig = tmp != 0;
}
if (autoGenerated &&
flags & VIR_DOMAIN_DEF_PARSE_STATUS) {
if (STREQ(autoGenerated, "yes")) {
def->autoGenerated = true;
} else if (STRNEQ(autoGenerated, "no")) {
virReportError(VIR_ERR_XML_ERROR,
_("Invalid autoGenerated value: %s"),
autoGenerated);
goto error;
}
}
ret = 0;
error:
if (ret < 0)
......@@ -11671,6 +11684,7 @@ virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr def,
VIR_FREE(network);
VIR_FREE(socketPath);
VIR_FREE(fromConfig);
VIR_FREE(autoGenerated);
VIR_FREE(addressCompat);
VIR_FREE(socketCompat);
return ret;
......@@ -22894,8 +22908,11 @@ virDomainGraphicsListenDefFormat(virBufferPtr buf,
virBufferEscapeString(buf, " socket='%s'", def->socket);
}
if (flags & VIR_DOMAIN_DEF_FORMAT_STATUS)
if (flags & VIR_DOMAIN_DEF_FORMAT_STATUS) {
virBufferAsprintf(buf, " fromConfig='%d'", def->fromConfig);
virBufferAsprintf(buf, " autoGenerated='%s'",
def->autoGenerated ? "yes" : "no");
}
virBufferAddLit(buf, "/>\n");
}
......
......@@ -2567,11 +2567,12 @@ qemuDomainRecheckInternalPaths(virDomainDefPtr def,
/* This will happen only if we parse XML from old libvirts where
* unix socket was available only for VNC graphics. In this
* particular case we should follow the behavior and if we remove
* the auto-generated socket base on config option from qemu.conf
* the auto-generated socket based on config option from qemu.conf
* we need to change the listen type to address. */
if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
glisten->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET &&
glisten->socket &&
!glisten->autoGenerated &&
STRPREFIX(glisten->socket, cfg->libDir)) {
if (flags & VIR_DOMAIN_DEF_PARSE_INACTIVE) {
VIR_FREE(glisten->socket);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册