From b02c0455d18d80881367b29e0ce2dce97a502bd7 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 1 Apr 2009 10:36:52 +0000 Subject: [PATCH] Fix localtime handling for newer XenD --- ChangeLog | 16 +++++++++++ src/xend_internal.c | 10 +++++++ src/xm_internal.c | 6 ++--- .../sexpr2xml-pv-localtime.sexpr | 2 ++ .../sexpr2xmldata/sexpr2xml-pv-localtime.xml | 27 +++++++++++++++++++ tests/sexpr2xmltest.c | 1 + .../xml2sexpr-fv-localtime.sexpr | 2 +- .../xml2sexpr-pv-localtime.sexpr | 1 + .../xml2sexprdata/xml2sexpr-pv-localtime.xml | 25 +++++++++++++++++ tests/xml2sexprtest.c | 1 + 10 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 tests/sexpr2xmldata/sexpr2xml-pv-localtime.sexpr create mode 100644 tests/sexpr2xmldata/sexpr2xml-pv-localtime.xml create mode 100644 tests/xml2sexprdata/xml2sexpr-pv-localtime.sexpr create mode 100644 tests/xml2sexprdata/xml2sexpr-pv-localtime.xml diff --git a/ChangeLog b/ChangeLog index 2f674b383e..5fdb481de4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +Wed Apr 1 11:36:22 BST 2009 Daniel P. Berrange + + Fix localtime handling for new XenD + * src/xend_internal.c: Update SEXPR for new location of + (localtime 1) field. + * src/xm_internal.c: Read localtime=1 param for PV guests + too + * tests/xml2sexprtest.c, tests/sexpr2xmltest.c: Add testing + of new (localtime 1) handling + * tests/sexpr2xmldata/sexpr2xml-pv-localtime.sexpr, + tests/sexpr2xmldata/sexpr2xml-pv-localtime.xml, + tests/xml2sexprdata/xml2sexpr-fv-localtime.sexpr, + tests/xml2sexprdata/xml2sexpr-pv-localtime.sexpr, + tests/xml2sexprdata/xml2sexpr-pv-localtime.xml: Data files + for extended tests + Wed Apr 1 11:27:22 BST 2009 Daniel P. Berrange Misc fixes uncovered from OOM testing diff --git a/src/xend_internal.c b/src/xend_internal.c index c00559bffc..58a63ecd36 100644 --- a/src/xend_internal.c +++ b/src/xend_internal.c @@ -2293,10 +2293,15 @@ xenDaemonParseSxpr(virConnectPtr conn, if (sexpr_int(root, "domain/image/hvm/pae")) def->features |= (1 << VIR_DOMAIN_FEATURE_PAE); + /* Old XenD only allows localtime here for HVM */ if (sexpr_int(root, "domain/image/hvm/localtime")) def->localtime = 1; } + /* Current XenD allows localtime here, for PV and HVM */ + if (sexpr_int(root, "domain/localtime")) + def->localtime = 1; + if (sexpr_node_copy(root, hvm ? "domain/image/hvm/device_model" : "domain/image/linux/device_model", @@ -5375,6 +5380,10 @@ xenDaemonFormatSxpr(virConnectPtr conn, } virBufferVSprintf(&buf, "(on_crash '%s')", tmp); + /* Set localtime here for current XenD (both PV & HVM) */ + if (def->localtime) + virBufferAddLit(&buf, "(localtime 1)"); + if (!def->os.bootloader) { if (STREQ(def->os.type, "hvm")) hvm = 1; @@ -5490,6 +5499,7 @@ xenDaemonFormatSxpr(virConnectPtr conn, virBufferAddLit(&buf, "(serial none)"); } + /* Set localtime here to keep old XenD happy for HVM */ if (def->localtime) virBufferAddLit(&buf, "(localtime 1)"); diff --git a/src/xm_internal.c b/src/xm_internal.c index cf9f57d5bf..d9678c0364 100644 --- a/src/xm_internal.c +++ b/src/xm_internal.c @@ -817,10 +817,10 @@ xenXMDomainConfigParse(virConnectPtr conn, virConfPtr conf) { goto cleanup; else if (val) def->features |= (1 << VIR_DOMAIN_FEATURE_APIC); - - if (xenXMConfigGetBool(conn, conf, "localtime", &def->localtime, 0) < 0) - goto cleanup; } + if (xenXMConfigGetBool(conn, conf, "localtime", &def->localtime, 0) < 0) + goto cleanup; + if (xenXMConfigCopyStringOpt(conn, conf, "device_model", &def->emulator) < 0) goto cleanup; diff --git a/tests/sexpr2xmldata/sexpr2xml-pv-localtime.sexpr b/tests/sexpr2xmldata/sexpr2xml-pv-localtime.sexpr new file mode 100644 index 0000000000..2686d557bf --- /dev/null +++ b/tests/sexpr2xmldata/sexpr2xml-pv-localtime.sexpr @@ -0,0 +1,2 @@ +(domain (domid 6)(name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(localtime 1)(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os ')))(device (vbd (dev 'xvda')(uname 'file:/root/some.img')(mode 'w')))) + diff --git a/tests/sexpr2xmldata/sexpr2xml-pv-localtime.xml b/tests/sexpr2xmldata/sexpr2xml-pv-localtime.xml new file mode 100644 index 0000000000..480327deb2 --- /dev/null +++ b/tests/sexpr2xmldata/sexpr2xml-pv-localtime.xml @@ -0,0 +1,27 @@ + + pvtest + 596a5d21-71f4-8fb2-e068-e2386a5c413e + 430080 + 430080 + 2 + + linux + /var/lib/xen/vmlinuz.2Dn2YT + /var/lib/xen/initrd.img.0u-Vhq + method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os + + + destroy + destroy + destroy + + + + + + + + + + + diff --git a/tests/sexpr2xmltest.c b/tests/sexpr2xmltest.c index 42de88094c..42e11a4c5f 100644 --- a/tests/sexpr2xmltest.c +++ b/tests/sexpr2xmltest.c @@ -144,6 +144,7 @@ mymain(int argc, char **argv) DO_TEST("net-e1000", "net-e1000", 2); DO_TEST("bridge-ipaddr", "bridge-ipaddr", 3); DO_TEST("no-source-cdrom", "no-source-cdrom", 2); + DO_TEST("pv-localtime", "pv-localtime", 2); DO_TEST("fv-utc", "fv-utc", 1); DO_TEST("fv-localtime", "fv-localtime", 1); diff --git a/tests/xml2sexprdata/xml2sexpr-fv-localtime.sexpr b/tests/xml2sexprdata/xml2sexpr-fv-localtime.sexpr index 1cf7c77a74..6cff0451fa 100644 --- a/tests/xml2sexprdata/xml2sexpr-fv-localtime.sexpr +++ b/tests/xml2sexprdata/xml2sexpr-fv-localtime.sexpr @@ -1 +1 @@ -(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd2-75cd-aca5-1776-9660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial none)(localtime 1)(device_model '/usr/lib64/xen/bin/qemu-dm')(vnc 1)))(device (vbd (dev 'ioemu:hda')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu)))) \ No newline at end of file +(vm (name 'fvtest')(memory 400)(maxmem 400)(vcpus 1)(uuid 'b5d70dd2-75cd-aca5-1776-9660b059d8bc')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(localtime 1)(image (hvm (kernel '/usr/lib/xen/boot/hvmloader')(vcpus 1)(boot c)(cdrom '/root/boot.iso')(acpi 1)(usb 1)(parallel none)(serial none)(localtime 1)(device_model '/usr/lib64/xen/bin/qemu-dm')(vnc 1)))(device (vbd (dev 'ioemu:hda')(uname 'file:/root/foo.img')(mode 'w')))(device (vif (mac '00:16:3e:1b:b1:47')(bridge 'xenbr0')(script 'vif-bridge')(type ioemu)))) \ No newline at end of file diff --git a/tests/xml2sexprdata/xml2sexpr-pv-localtime.sexpr b/tests/xml2sexprdata/xml2sexpr-pv-localtime.sexpr new file mode 100644 index 0000000000..af4582f4cc --- /dev/null +++ b/tests/xml2sexprdata/xml2sexpr-pv-localtime.sexpr @@ -0,0 +1 @@ +(vm (name 'rhel5')(memory 175)(maxmem 385)(vcpus 1)(uuid '4f77abd2-3019-58e8-3bab-6fbf2118f880')(bootloader '/usr/bin/pygrub')(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')(localtime 1)(device (tap (dev 'xvda:disk')(uname 'tap:aio:/xen/rhel5.img')(mode 'w')))(device (vif (mac '00:16:3e:1d:06:15')(bridge 'xenbr0')(script 'vif-bridge')))) \ No newline at end of file diff --git a/tests/xml2sexprdata/xml2sexpr-pv-localtime.xml b/tests/xml2sexprdata/xml2sexpr-pv-localtime.xml new file mode 100644 index 0000000000..e78c09c049 --- /dev/null +++ b/tests/xml2sexprdata/xml2sexpr-pv-localtime.xml @@ -0,0 +1,25 @@ + + rhel5 + 4f77abd2301958e83bab6fbf2118f880 + /usr/bin/pygrub + 394240 + 179200 + 1 + destroy + restart + restart + + + + + +