[libvirt] [PATCH 0/2] test: Update inactive guest config on shutdown

This small series teaches the test driver to abide changes to the inactive domain definition (caused by 'defining' over an already running domain). Cole Robinson (2): test: Add testDomainShutdownState helper test: Update inactive guest config on shutdown src/test/test_driver.c | 48 +++++++++++++++++++++++++++++------------------- 1 files changed, 29 insertions(+), 19 deletions(-)

Performs changes needed when stopping a VM (which are currently duplicated in several places, and forgotten in others). Signed-off-by: Cole Robinson <crobinso@redhat.com> --- src/test/test_driver.c | 42 +++++++++++++++++++++++------------------- 1 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/test/test_driver.c b/src/test/test_driver.c index df9090e..35299d5 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -469,6 +469,15 @@ cleanup: return ret; } +static void +testDomainShutdownState(virDomainPtr domain, + virDomainObjPtr privdom) +{ + privdom->state = VIR_DOMAIN_SHUTOFF; + privdom->def->id = -1; + domain->id = -1; +} + static int testOpenDefault(virConnectPtr conn) { int u; struct timeval tv; @@ -1365,19 +1374,17 @@ static int testDestroyDomain (virDomainPtr domain) goto cleanup; } - privdom->state = VIR_DOMAIN_SHUTOFF; - privdom->def->id = -1; - domain->id = -1; + testDomainShutdownState(domain, privdom); event = virDomainEventNewFromObj(privdom, VIR_DOMAIN_EVENT_STOPPED, VIR_DOMAIN_EVENT_STOPPED_DESTROYED); + if (!privdom->persistent) { virDomainRemoveInactive(&privconn->domains, privdom); privdom = NULL; } - ret = 0; cleanup: if (privdom) @@ -1494,19 +1501,18 @@ static int testShutdownDomain (virDomainPtr domain) goto cleanup; } - privdom->state = VIR_DOMAIN_SHUTOFF; - domain->id = -1; - privdom->def->id = -1; + testDomainShutdownState(domain, privdom); event = virDomainEventNewFromObj(privdom, VIR_DOMAIN_EVENT_STOPPED, VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN); + if (!privdom->persistent) { virDomainRemoveInactive(&privconn->domains, privdom); privdom = NULL; } - ret = 0; + ret = 0; cleanup: if (privdom) virDomainObjUnlock(privdom); @@ -1538,8 +1544,6 @@ static int testRebootDomain (virDomainPtr domain, switch (privdom->def->onReboot) { case VIR_DOMAIN_LIFECYCLE_DESTROY: privdom->state = VIR_DOMAIN_SHUTOFF; - domain->id = -1; - privdom->def->id = -1; break; case VIR_DOMAIN_LIFECYCLE_RESTART: @@ -1548,8 +1552,6 @@ static int testRebootDomain (virDomainPtr domain, case VIR_DOMAIN_LIFECYCLE_PRESERVE: privdom->state = VIR_DOMAIN_SHUTOFF; - domain->id = -1; - privdom->def->id = -1; break; case VIR_DOMAIN_LIFECYCLE_RESTART_RENAME: @@ -1558,15 +1560,15 @@ static int testRebootDomain (virDomainPtr domain, default: privdom->state = VIR_DOMAIN_SHUTOFF; - domain->id = -1; - privdom->def->id = -1; break; } if (privdom->state == VIR_DOMAIN_SHUTOFF) { + testDomainShutdownState(domain, privdom); event = virDomainEventNewFromObj(privdom, VIR_DOMAIN_EVENT_STOPPED, VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN); + if (!privdom->persistent) { virDomainRemoveInactive(&privconn->domains, privdom); @@ -1575,7 +1577,6 @@ static int testRebootDomain (virDomainPtr domain, } ret = 0; - cleanup: if (privdom) virDomainObjUnlock(privdom); @@ -1689,17 +1690,18 @@ static int testDomainSave(virDomainPtr domain, } fd = -1; - privdom->state = VIR_DOMAIN_SHUTOFF; + testDomainShutdownState(domain, privdom); event = virDomainEventNewFromObj(privdom, VIR_DOMAIN_EVENT_STOPPED, VIR_DOMAIN_EVENT_STOPPED_SAVED); + if (!privdom->persistent) { virDomainRemoveInactive(&privconn->domains, privdom); privdom = NULL; } - ret = 0; + ret = 0; cleanup: VIR_FREE(xml); @@ -1842,17 +1844,19 @@ static int testDomainCoreDump(virDomainPtr domain, domain->name, to); goto cleanup; } - privdom->state = VIR_DOMAIN_SHUTOFF; + + testDomainShutdownState(domain, privdom); event = virDomainEventNewFromObj(privdom, VIR_DOMAIN_EVENT_STOPPED, VIR_DOMAIN_EVENT_STOPPED_CRASHED); + if (!privdom->persistent) { virDomainRemoveInactive(&privconn->domains, privdom); privdom = NULL; } - ret = 0; + ret = 0; cleanup: if (fd != -1) close(fd); -- 1.6.5.1

On Wed, Nov 04, 2009 at 02:39:42PM -0500, Cole Robinson wrote:
Performs changes needed when stopping a VM (which are currently duplicated in several places, and forgotten in others).
Signed-off-by: Cole Robinson <crobinso@redhat.com>
Looks fine, ACK, thanks ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/

This matches the expected behavior of state drivers such as QEMU. Signed-off-by: Cole Robinson <crobinso@redhat.com> --- src/test/test_driver.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 35299d5..343834c 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -473,6 +473,12 @@ static void testDomainShutdownState(virDomainPtr domain, virDomainObjPtr privdom) { + if (privdom->newDef) { + virDomainDefFree(privdom->def); + privdom->def = privdom->newDef; + privdom->newDef = NULL; + } + privdom->state = VIR_DOMAIN_SHUTOFF; privdom->def->id = -1; domain->id = -1; -- 1.6.5.1

On Wed, Nov 04, 2009 at 02:39:43PM -0500, Cole Robinson wrote:
This matches the expected behavior of state drivers such as QEMU.
Signed-off-by: Cole Robinson <crobinso@redhat.com> --- src/test/test_driver.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 35299d5..343834c 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -473,6 +473,12 @@ static void testDomainShutdownState(virDomainPtr domain, virDomainObjPtr privdom) { + if (privdom->newDef) { + virDomainDefFree(privdom->def); + privdom->def = privdom->newDef; + privdom->newDef = NULL; + } + privdom->state = VIR_DOMAIN_SHUTOFF; privdom->def->id = -1; domain->id = -1;
ACK, Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/

On 11/05/2009 04:45 AM, Daniel Veillard wrote:
On Wed, Nov 04, 2009 at 02:39:43PM -0500, Cole Robinson wrote:
This matches the expected behavior of state drivers such as QEMU.
Signed-off-by: Cole Robinson <crobinso@redhat.com> --- src/test/test_driver.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 35299d5..343834c 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -473,6 +473,12 @@ static void testDomainShutdownState(virDomainPtr domain, virDomainObjPtr privdom) { + if (privdom->newDef) { + virDomainDefFree(privdom->def); + privdom->def = privdom->newDef; + privdom->newDef = NULL; + } + privdom->state = VIR_DOMAIN_SHUTOFF; privdom->def->id = -1; domain->id = -1;
ACK,
Daniel
Thanks, pushed these 2 patches now. - Cole
participants (2)
-
Cole Robinson
-
Daniel Veillard