62 lines
2.4 KiB
Diff
62 lines
2.4 KiB
Diff
# HG changeset patch
|
|
# User Keir Fraser <keir.fraser@citrix.com>
|
|
# Date 1202207975 0
|
|
# Node ID def2adbce510a31711f22cf15f5afe51f875e3ea
|
|
# Parent 32e9c52fc6d9a6104afb2dbd84a89395b16f0e34
|
|
xend: Restore values of /vm/uuid/xend/* to recreated domains.
|
|
|
|
When guest domains are restarted, previous values of /vm/uuid/xend/*
|
|
in xenstore are lost. (e.g. previous_restart_time,
|
|
last_shutdown_reason). This patch restores them to restarting domains.
|
|
And we should update /vm/uuid/xend/restart_count of restarting
|
|
domains, not previous domains.
|
|
|
|
Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
|
|
|
|
Index: xen-3.2.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
|
===================================================================
|
|
--- xen-3.2.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
|
+++ xen-3.2.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
|
@@ -882,6 +882,9 @@ class XendDomainInfo:
|
|
def _gatherVm(self, *args):
|
|
return xstransact.Gather(self.vmpath, *args)
|
|
|
|
+ def _listRecursiveVm(self, *args):
|
|
+ return xstransact.ListRecursive(self.vmpath, *args)
|
|
+
|
|
def storeVm(self, *args):
|
|
return xstransact.Store(self.vmpath, *args)
|
|
|
|
@@ -1392,6 +1395,7 @@ class XendDomainInfo:
|
|
|
|
self._writeVm('xend/previous_restart_time', str(now))
|
|
|
|
+ prev_vm_xend = self._listRecursiveVm('xend')
|
|
new_dom_info = self.info
|
|
try:
|
|
if rename:
|
|
@@ -1410,8 +1414,13 @@ class XendDomainInfo:
|
|
try:
|
|
new_dom = XendDomain.instance().domain_create_from_dict(
|
|
new_dom_info)
|
|
+ for x in prev_vm_xend[0][1]:
|
|
+ new_dom._writeVm('xend/%s' % x[0], x[1])
|
|
new_dom.waitForDevices()
|
|
new_dom.unpause()
|
|
+ rst_cnt = new_dom._readVm('xend/restart_count')
|
|
+ rst_cnt = int(rst_cnt) + 1
|
|
+ new_dom._writeVm('xend/restart_count', str(rst_cnt))
|
|
new_dom._removeVm(RESTART_IN_PROGRESS)
|
|
except:
|
|
if new_dom:
|
|
@@ -1447,9 +1456,6 @@ class XendDomainInfo:
|
|
self.vmpath = XS_VMROOT + new_uuid
|
|
# Write out new vm node to xenstore
|
|
self._storeVmDetails()
|
|
- rst_cnt = self._readVm('xend/restart_count')
|
|
- rst_cnt = int(rst_cnt) + 1
|
|
- self._writeVm('xend/restart_count', str(rst_cnt))
|
|
self._preserve()
|
|
return new_dom_info
|
|
|