- bnc#623833 - Error in Xend-API method VM_set_actions_after_crash
21866-xenapi.patch - bnc#625003 - Fix vm config options coredump-{restart,destroy} Added hunk to xm-create-xflag.patch - bnc#605186 - Squelch harmless error messages in block-iscsi - bnc#623438 - Add ability to control SCSI device path scanning in xend 21847-pscsi.patch 21723-get-domu-state.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=68
This commit is contained in:
parent
87d62a38d6
commit
393ad2e586
188
21723-get-domu-state.patch
Normal file
188
21723-get-domu-state.patch
Normal file
@ -0,0 +1,188 @@
|
||||
# HG changeset patch
|
||||
# User Ian Jackson <Ian.Jackson@eu.citrix.com>
|
||||
# Date 1277819571 -3600
|
||||
# Node ID a60c604b5829db6285ff89d8163478330ac12ee2
|
||||
# Parent 7b00193bd0334606b6f6779c3f14a1667a952fe4
|
||||
tools/xend, xm: add a command to get the state of VMs
|
||||
|
||||
add a command "domstate" to get the state of Vms, which may have one state of
|
||||
{'shutoff', 'idle','shutdown','running','crashed','paused' or 'paused by
|
||||
admin"}.
|
||||
|
||||
For case of pause, I distinguish it into two conditions. One is "paused" the
|
||||
other is "paused by admin".
|
||||
"pasued by admin" means that users pause a domain voluntary by "xm paused
|
||||
VM" or " API"
|
||||
|
||||
Signed-off-by James (Song Wei) <jsong@novell.com>
|
||||
|
||||
Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomain.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendDomain.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendDomain.py
|
||||
@@ -250,6 +250,18 @@ class XendDomain:
|
||||
@return: path to config file.
|
||||
"""
|
||||
return os.path.join(self._managed_path(domuuid), CACHED_CONFIG_FILE)
|
||||
+ def domain_setpauseflag(self, dom, flag=False):
|
||||
+ try:
|
||||
+ dominfo = self.domain_lookup_nr(dom)
|
||||
+ dominfo.paused_by_admin = flag
|
||||
+ except Exception, err:
|
||||
+ log.debug("error in in setpauseflag")
|
||||
+ def domain_getpauseflag(self, dom):
|
||||
+ try:
|
||||
+ dominfo = self.domain_lookup_nr(dom)
|
||||
+ return dominfo.paused_by_admin
|
||||
+ except Exception, err:
|
||||
+ log.debug("error in in getpauseflag")
|
||||
|
||||
def _managed_check_point_path(self, domuuid):
|
||||
"""Returns absolute path to check point file for managed domain.
|
||||
Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
@@ -327,6 +327,8 @@ class XendDomainInfo:
|
||||
@type info: dictionary
|
||||
@ivar domid: Domain ID (if VM has started)
|
||||
@type domid: int or None
|
||||
+ @ivar paused_by_admin: Is this Domain paused by command or API
|
||||
+ @type paused_by_admin: bool
|
||||
@ivar guest_bitsize: the bitsize of guest
|
||||
@type guest_bitsize: int or None
|
||||
@ivar alloc_mem: the memory domain allocated when booting
|
||||
@@ -390,6 +392,7 @@ class XendDomainInfo:
|
||||
self.domid = domid
|
||||
self.guest_bitsize = None
|
||||
self.alloc_mem = None
|
||||
+ self.paused_by_admin = False
|
||||
|
||||
maxmem = self.info.get('memory_static_max', 0)
|
||||
memory = self.info.get('memory_dynamic_max', 0)
|
||||
Index: xen-4.0.0-testing/tools/python/xen/xend/server/SrvDomain.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/server/SrvDomain.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xend/server/SrvDomain.py
|
||||
@@ -225,6 +225,20 @@ class SrvDomain(SrvDir):
|
||||
self.acceptCommand(req)
|
||||
return self.xd.domain_reset(self.dom.getName())
|
||||
|
||||
+ def op_do_get_pauseflag(self, op, req):
|
||||
+ self.acceptCommand(req)
|
||||
+ return req.threadRequest(self.do_get_pauseflag, op, req)
|
||||
+
|
||||
+ def do_get_pauseflag(self, _, req):
|
||||
+ return self.xd.domain_getpauseflag(self.dom.getName(), req)
|
||||
+
|
||||
+ def op_do_set_pauseflag(self, op, req):
|
||||
+ self.acceptCommand(req)
|
||||
+ return req.threadRequest(self.do_set_pauseflag, op, req)
|
||||
+
|
||||
+ def do_set_pauseflag(self, _, req):
|
||||
+ return self.xd.domain_setpauseflag(self.dom.getName(), req)
|
||||
+
|
||||
def op_usb_add(self, op, req):
|
||||
self.acceptCommand(req)
|
||||
return req.threadRequest(self.do_usb_add, op, req)
|
||||
Index: xen-4.0.0-testing/tools/python/xen/xm/main.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xm/main.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xm/main.py
|
||||
@@ -165,6 +165,8 @@ SUBCOMMAND_HELP = {
|
||||
#usb
|
||||
'usb-add' : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Add the usb device to FV VM.'),
|
||||
'usb-del' : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Delete the usb device to FV VM.'),
|
||||
+ #domstate
|
||||
+ 'domstate' : ('<domain> ', 'get the state of a domain'),
|
||||
|
||||
# device commands
|
||||
|
||||
@@ -370,6 +372,7 @@ common_commands = [
|
||||
"uptime",
|
||||
"usb-add",
|
||||
"usb-del",
|
||||
+ "domstate",
|
||||
"vcpu-set",
|
||||
]
|
||||
|
||||
@@ -404,6 +407,7 @@ domain_commands = [
|
||||
"uptime",
|
||||
"usb-add",
|
||||
"usb-del",
|
||||
+ "domstate",
|
||||
"vcpu-list",
|
||||
"vcpu-pin",
|
||||
"vcpu-set",
|
||||
@@ -901,7 +905,6 @@ def getDomains(domain_names, state, full
|
||||
return "-"
|
||||
state_str = "".join([state_on_off(state)
|
||||
for state in states])
|
||||
-
|
||||
dom_rec.update({'name': dom_rec['name_label'],
|
||||
'memory_actual': int(dom_metrics_rec['memory_actual'])/1024,
|
||||
'vcpus': dom_metrics_rec['VCPUs_number'],
|
||||
@@ -1395,8 +1398,10 @@ def xm_pause(args):
|
||||
|
||||
if serverType == SERVER_XEN_API:
|
||||
server.xenapi.VM.pause(get_single_vm(dom))
|
||||
+ server.xenapi.VM.set_pauseflag(get_single_vm(dom), True)
|
||||
else:
|
||||
server.xend.domain.pause(dom)
|
||||
+ server.xend.domain.setpauseflag(dom, True)
|
||||
|
||||
def xm_unpause(args):
|
||||
arg_check(args, "unpause", 1)
|
||||
@@ -1404,8 +1409,10 @@ def xm_unpause(args):
|
||||
|
||||
if serverType == SERVER_XEN_API:
|
||||
server.xenapi.VM.unpause(get_single_vm(dom))
|
||||
+ server.xenapi.VM.set_pauseflag(get_single_vm(dom), False)
|
||||
else:
|
||||
server.xend.domain.unpause(dom)
|
||||
+ server.xend.domain.setpauseflag(dom, False)
|
||||
|
||||
def xm_dump_core(args):
|
||||
live = False
|
||||
@@ -1515,6 +1522,32 @@ def xm_usb_add(args):
|
||||
arg_check(args, "usb-add", 2)
|
||||
server.xend.domain.usb_add(args[0],args[1])
|
||||
|
||||
+def xm_domstate(args):
|
||||
+ arg_check(args, "domstate", 1)
|
||||
+ (opitons, params) = getopt.gnu_getopt(args, 's', ['domname='])
|
||||
+ doms = getDomains(params, 'all')
|
||||
+ d = parse_doms_info(doms[0])
|
||||
+ state = d['state']
|
||||
+ if state:
|
||||
+ if state.find('s') > 0:
|
||||
+ print 'shutoff'
|
||||
+ elif state.find('b') > 0:
|
||||
+ print 'idle'
|
||||
+ elif state.find('d') > 0:
|
||||
+ print 'shutdown'
|
||||
+ elif state.find('r') > 0:
|
||||
+ print 'running'
|
||||
+ elif state.find('c') > 0:
|
||||
+ print 'crashed'
|
||||
+ elif state.find('p') > 0:
|
||||
+ if server.xend.domain.getpauseflag(args[0]):
|
||||
+ print 'paused by admin'
|
||||
+ else:
|
||||
+ print 'paused'
|
||||
+ else:
|
||||
+ print 'shutoff'
|
||||
+ return
|
||||
+
|
||||
def xm_usb_del(args):
|
||||
arg_check(args, "usb-del", 2)
|
||||
server.xend.domain.usb_del(args[0],args[1])
|
||||
@@ -3538,6 +3571,8 @@ commands = {
|
||||
#usb
|
||||
"usb-add": xm_usb_add,
|
||||
"usb-del": xm_usb_del,
|
||||
+ #domstate
|
||||
+ "domstate": xm_domstate,
|
||||
}
|
||||
|
||||
## The commands supported by a separate argument parser in xend.xm.
|
130
21847-pscsi.patch
Normal file
130
21847-pscsi.patch
Normal file
@ -0,0 +1,130 @@
|
||||
# HG changeset patch
|
||||
# User "Dube, Lutz" <lutz.dube@ts.fujitsu.com>
|
||||
# Date 1279902875 -3600
|
||||
# Node ID 4814e16ea4105502332407e3379c49da92018899
|
||||
# Parent e23302fcb83c72f93ec01285bd7f4f1641eb67e4
|
||||
tools/xend: Fix performance of xend with more than 10000 FC device paths
|
||||
|
||||
On server startup xend start or a later xend restart needs approx. 30 min to
|
||||
start/restart. Without attached FC devices xend start/restart needs only some
|
||||
seconds.
|
||||
|
||||
server type: Fujitsu Primergy RX600-S5
|
||||
|
||||
The time gets lost in xen/xend/XendNode.py line 329 while calling
|
||||
vscsi_util.get_all_scsi_device().
|
||||
|
||||
329 for pscsi_record in vscsi_util.get_all_scsi_devices():
|
||||
330 scsi_id = pscsi_record['scsi_id']
|
||||
331 if scsi_id:
|
||||
332 saved_HBA_uuid = None
|
||||
|
||||
I think, in most cases we don't need all the PSCSI devices registered in
|
||||
xend, but only a few of it.
|
||||
So a good solution for this perforamce issue is to scan only the SCSI device
|
||||
paths we need, controlled by a new option in xend-config.sxp.
|
||||
|
||||
I have made a patch to allow specification of scsi devices we need in xend
|
||||
in the config file xend-config.sxp.
|
||||
The new options pscsi-device-mask expects a list of device ids oder partial
|
||||
device ids like the option of lsscsi, e.g.
|
||||
(pscsi-device-mask ('<partial-dev-id1' 'partial-dev-id2' ...))
|
||||
|
||||
Without this option set in xend-config.sxp or if lsscsi is not support, all
|
||||
device paths are process like today.
|
||||
|
||||
Signed-off-by: Lutz Dube Lutz.Dube@ts.fujitsu.com
|
||||
Comment from Masaki Kanno <kanno.masaki@jp.fujitsu.com>: "Well done"
|
||||
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
|
||||
Index: xen-4.0.0-testing/tools/examples/xend-config.sxp
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/examples/xend-config.sxp
|
||||
+++ xen-4.0.0-testing/tools/examples/xend-config.sxp
|
||||
@@ -277,3 +277,11 @@
|
||||
# we have to realize this may incur security issue and we can't make sure the
|
||||
# device assignment could really work properly even after we do this.
|
||||
#(pci-passthrough-strict-check yes)
|
||||
+
|
||||
+# If we have a very big scsi device configuration, start of xend is slow,
|
||||
+# because xend scans all the device paths to build its internal PSCSI device
|
||||
+# list. If we need only a few devices for assigning to a guest, we can reduce
|
||||
+# the scan to this device. Set list list of device paths in same syntax like in
|
||||
+# command lsscsi, e.g. ('16:0:0:0' '15:0')
|
||||
+# (pscsi-device-mask ('*'))
|
||||
+
|
||||
Index: xen-4.0.0-testing/tools/python/xen/util/vscsi_util.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/util/vscsi_util.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/util/vscsi_util.py
|
||||
@@ -148,11 +148,12 @@ def _vscsi_get_scsidevices_by_sysfs():
|
||||
return devices
|
||||
|
||||
|
||||
-def vscsi_get_scsidevices():
|
||||
+def vscsi_get_scsidevices(mask=""):
|
||||
""" get all scsi devices information """
|
||||
|
||||
- devices = _vscsi_get_scsidevices_by_lsscsi("")
|
||||
- if devices:
|
||||
+ devices = _vscsi_get_scsidevices_by_lsscsi("[%s]" % mask)
|
||||
+ if devices or (len(mask) and mask[0] != "*"):
|
||||
+ # devices found or partial device scan
|
||||
return devices
|
||||
return _vscsi_get_scsidevices_by_sysfs()
|
||||
|
||||
@@ -274,9 +275,9 @@ def get_scsi_device(pHCTL):
|
||||
return _make_scsi_record(scsi_info)
|
||||
return None
|
||||
|
||||
-def get_all_scsi_devices():
|
||||
+def get_all_scsi_devices(mask=""):
|
||||
scsi_records = []
|
||||
- for scsi_info in vscsi_get_scsidevices():
|
||||
+ for scsi_info in vscsi_get_scsidevices(mask):
|
||||
scsi_record = _make_scsi_record(scsi_info)
|
||||
scsi_records.append(scsi_record)
|
||||
return scsi_records
|
||||
Index: xen-4.0.0-testing/tools/python/xen/xend/XendNode.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendNode.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendNode.py
|
||||
@@ -323,7 +323,12 @@ class XendNode:
|
||||
pscsi_table = {}
|
||||
pscsi_HBA_table = {}
|
||||
|
||||
- for pscsi_record in vscsi_util.get_all_scsi_devices():
|
||||
+ pscsi_records = []
|
||||
+ for pscsi_mask in xendoptions().get_pscsi_device_mask():
|
||||
+ pscsi_records += vscsi_util.get_all_scsi_devices(pscsi_mask)
|
||||
+ log.debug("pscsi record count: %s" % len(pscsi_records))
|
||||
+
|
||||
+ for pscsi_record in pscsi_records:
|
||||
scsi_id = pscsi_record['scsi_id']
|
||||
if scsi_id:
|
||||
saved_HBA_uuid = None
|
||||
Index: xen-4.0.0-testing/tools/python/xen/xend/XendOptions.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendOptions.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendOptions.py
|
||||
@@ -164,6 +164,9 @@ class XendOptions:
|
||||
"""
|
||||
print >>sys.stderr, "xend [ERROR]", fmt % args
|
||||
|
||||
+ """Default mask for pscsi device scan."""
|
||||
+ xend_pscsi_device_mask = ['*']
|
||||
+
|
||||
|
||||
def configure(self):
|
||||
self.set_config()
|
||||
@@ -430,6 +433,10 @@ class XendOptions:
|
||||
return self.get_config_bool("pci-passthrough-strict-check",
|
||||
self.pci_dev_assign_strict_check_default)
|
||||
|
||||
+ def get_pscsi_device_mask(self):
|
||||
+ return self.get_config_value("pscsi-device-mask",
|
||||
+ self.xend_pscsi_device_mask)
|
||||
+
|
||||
class XendOptionsFile(XendOptions):
|
||||
|
||||
"""Default path to the config file."""
|
90
21866-xenapi.patch
Normal file
90
21866-xenapi.patch
Normal file
@ -0,0 +1,90 @@
|
||||
# HG changeset patch
|
||||
# User Lutz Dube <lutz.dube@ts.fujitsu.com>
|
||||
# Date 1280245980 -3600
|
||||
# Node ID e017930af272c888f2a562f842af4e142a973d5f
|
||||
# Parent 5078f2c1e3d6a3a06ecf352a068eb496f09a2a98
|
||||
xend (XenAPI): Error in Xend-API method VM_set_actions_after_crash
|
||||
|
||||
Xend-API defines the method VM_set_actions_after_crash with valid
|
||||
action names coredump_and_destroy, coredump_and_restart,... . These
|
||||
values have to be converted into internal representation
|
||||
"coredump-destroy", "coredump-restart", ... otherwise start of the
|
||||
domain is rejected. Same error occurs, if I try to create a VM using
|
||||
the Xend-API with actions_after_crash set to coredump_and_destroy.
|
||||
|
||||
Could you please apply my patch to xen-4-0-testing, too.
|
||||
|
||||
Signed-off-by: Lutz Dube Lutz.Dube@ts.fujitsu.com
|
||||
Acked-by: Jim Fehlig <jfehlig@novell.com>
|
||||
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
|
||||
Index: xen-4.0.0-testing/tools/python/xen/xend/XendAPI.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendAPI.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendAPI.py
|
||||
@@ -1667,7 +1667,8 @@ class XendAPI(object):
|
||||
def VM_set_actions_after_crash(self, session, vm_ref, action):
|
||||
if action not in XEN_API_ON_CRASH_BEHAVIOUR:
|
||||
return xen_api_error(['VM_ON_CRASH_BEHAVIOUR_INVALID', vm_ref])
|
||||
- return self.VM_set('actions_after_crash', session, vm_ref, action)
|
||||
+ return self.VM_set('actions_after_crash', session, vm_ref,
|
||||
+ XEN_API_ON_CRASH_BEHAVIOUR_LEGACY[action])
|
||||
|
||||
def VM_set_HVM_boot_policy(self, session, vm_ref, value):
|
||||
if value != "" and value != "BIOS order":
|
||||
Index: xen-4.0.0-testing/tools/python/xen/xend/XendAPIConstants.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendAPIConstants.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendAPIConstants.py
|
||||
@@ -63,6 +63,18 @@ XEN_API_ON_CRASH_BEHAVIOUR_FILTER = {
|
||||
'rename_restart' : 'rename_restart',
|
||||
}
|
||||
|
||||
+XEN_API_ON_CRASH_BEHAVIOUR_LEGACY = {
|
||||
+ 'destroy' : 'destroy',
|
||||
+ 'coredump-destroy' : 'coredump-destroy',
|
||||
+ 'coredump_and_destroy' : 'coredump-destroy',
|
||||
+ 'restart' : 'restart',
|
||||
+ 'coredump-restart' : 'coredump-restart',
|
||||
+ 'coredump_and_restart' : 'coredump-restart',
|
||||
+ 'preserve' : 'preserve',
|
||||
+ 'rename-restart' : 'rename-restart',
|
||||
+ 'rename_restart' : 'rename-restart',
|
||||
+}
|
||||
+
|
||||
XEN_API_VBD_MODE = ['RO', 'RW']
|
||||
XEN_API_VDI_TYPE = ['system', 'user', 'ephemeral']
|
||||
XEN_API_VBD_TYPE = ['CD', 'Disk']
|
||||
Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendConfig.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
||||
@@ -41,6 +41,7 @@ from xen.util.pci import pci_opts_list_f
|
||||
from xen.xend.XendSXPDev import dev_dict_to_sxp
|
||||
from xen.util import xsconstants
|
||||
from xen.util import auxbin
|
||||
+from xen.xend.XendAPIConstants import *
|
||||
import xen.util.fileuri
|
||||
|
||||
log = logging.getLogger("xend.XendConfig")
|
||||
@@ -62,6 +63,11 @@ def reverse_dict(adict):
|
||||
def bool0(v):
|
||||
return v != '0' and v != 'False' and bool(v)
|
||||
|
||||
+def convert_on_crash(v):
|
||||
+ v = str(v)
|
||||
+ return XEN_API_ON_CRASH_BEHAVIOUR_LEGACY[v] \
|
||||
+ if v in XEN_API_ON_CRASH_BEHAVIOUR else v
|
||||
+
|
||||
# Recursively copy a data struct, scrubbing out VNC passwords.
|
||||
# Will scrub any dict entry with a key of 'vncpasswd' or any
|
||||
# 2-element list whose first member is 'vncpasswd'. It will
|
||||
@@ -211,7 +217,7 @@ XENAPI_CFG_TYPES = {
|
||||
'VCPUs_live': int,
|
||||
'actions_after_shutdown': str,
|
||||
'actions_after_reboot': str,
|
||||
- 'actions_after_crash': str,
|
||||
+ 'actions_after_crash': convert_on_crash,
|
||||
'PV_bootloader': str,
|
||||
'PV_kernel': str,
|
||||
'PV_ramdisk': str,
|
@ -22,7 +22,7 @@ find_sdev()
|
||||
{
|
||||
unset dev
|
||||
for session in /sys/class/iscsi_session/session*; do
|
||||
if [ "$1" = "`cat $session/targetname`" ]; then
|
||||
if [ "$1" = "`cat $session/targetname 2>/dev/null`" ]; then
|
||||
dev=`basename $session/device/target*/*:0:*/block*/*`
|
||||
return
|
||||
fi
|
||||
@ -35,7 +35,7 @@ find_sdev_rev()
|
||||
for session in /sys/class/iscsi_session/session*; do
|
||||
dev=`basename $session/device/target*/*:0:*/block*/*`
|
||||
if [ "$dev" = "$1" ]; then
|
||||
tgt=`cat $session/targetname`
|
||||
tgt=`cat $session/targetname 2>/dev/null`
|
||||
return
|
||||
fi
|
||||
done
|
||||
|
@ -516,7 +516,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendAPI.py
|
||||
except Exception, ex:
|
||||
log.exception(ex)
|
||||
|
||||
@@ -1835,7 +1870,9 @@ class XendAPI(object):
|
||||
@@ -1836,7 +1871,9 @@ class XendAPI(object):
|
||||
'is_control_domain': xeninfo.info['is_control_domain'],
|
||||
'metrics': xeninfo.get_metrics(),
|
||||
'security_label': xeninfo.get_security_label(),
|
||||
@ -527,7 +527,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendAPI.py
|
||||
}
|
||||
return xen_api_success(record)
|
||||
|
||||
@@ -1933,6 +1970,25 @@ class XendAPI(object):
|
||||
@@ -1934,6 +1971,25 @@ class XendAPI(object):
|
||||
xendom.domain_restore(src, bool(paused))
|
||||
return xen_api_success_void()
|
||||
|
||||
@ -1465,7 +1465,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendConfig.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
||||
@@ -128,6 +128,7 @@ XENAPI_CFG_TO_LEGACY_CFG = {
|
||||
@@ -134,6 +134,7 @@ XENAPI_CFG_TO_LEGACY_CFG = {
|
||||
'PV_bootloader': 'bootloader',
|
||||
'PV_bootloader_args': 'bootloader_args',
|
||||
'Description': 'description',
|
||||
@ -1473,7 +1473,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
||||
}
|
||||
|
||||
LEGACY_CFG_TO_XENAPI_CFG = reverse_dict(XENAPI_CFG_TO_LEGACY_CFG)
|
||||
@@ -234,6 +235,7 @@ XENAPI_CFG_TYPES = {
|
||||
@@ -240,6 +241,7 @@ XENAPI_CFG_TYPES = {
|
||||
'superpages' : int,
|
||||
'memory_sharing': int,
|
||||
'Description': str,
|
||||
@ -1481,7 +1481,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
||||
}
|
||||
|
||||
# List of legacy configuration keys that have no equivalent in the
|
||||
@@ -279,6 +281,7 @@ LEGACY_CFG_TYPES = {
|
||||
@@ -285,6 +287,7 @@ LEGACY_CFG_TYPES = {
|
||||
'bootloader': str,
|
||||
'bootloader_args': str,
|
||||
'description': str,
|
||||
@ -1489,7 +1489,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
||||
}
|
||||
|
||||
# Values that should be stored in xenstore's /vm/<uuid> that is used
|
||||
@@ -300,6 +303,7 @@ LEGACY_XENSTORE_VM_PARAMS = [
|
||||
@@ -306,6 +309,7 @@ LEGACY_XENSTORE_VM_PARAMS = [
|
||||
'on_xend_stop',
|
||||
'bootloader',
|
||||
'bootloader_args',
|
||||
@ -1497,7 +1497,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
||||
]
|
||||
|
||||
##
|
||||
@@ -408,6 +412,7 @@ class XendConfig(dict):
|
||||
@@ -414,6 +418,7 @@ class XendConfig(dict):
|
||||
'other_config': {},
|
||||
'platform': {},
|
||||
'target': 0,
|
||||
@ -1634,7 +1634,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendNode.py
|
||||
|
||||
def _init_networks(self):
|
||||
# Initialise networks
|
||||
@@ -361,6 +364,18 @@ class XendNode:
|
||||
@@ -366,6 +369,18 @@ class XendNode:
|
||||
for physical_host, pscsi_HBA_uuid in pscsi_HBA_table.items():
|
||||
XendPSCSI_HBA(pscsi_HBA_uuid, {'physical_host': physical_host})
|
||||
|
||||
@ -1653,7 +1653,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendNode.py
|
||||
|
||||
def add_network(self, interface):
|
||||
# TODO
|
||||
@@ -581,6 +596,7 @@ class XendNode:
|
||||
@@ -586,6 +601,7 @@ class XendNode:
|
||||
self.save_PPCIs()
|
||||
self.save_PSCSIs()
|
||||
self.save_PSCSI_HBAs()
|
||||
@ -1661,7 +1661,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendNode.py
|
||||
|
||||
def save_PIFs(self):
|
||||
pif_records = dict([(pif_uuid, XendAPIStore.get(
|
||||
@@ -623,6 +639,12 @@ class XendNode:
|
||||
@@ -628,6 +644,12 @@ class XendNode:
|
||||
for pscsi_HBA_uuid in XendPSCSI_HBA.get_all()])
|
||||
self.state_store.save_state('pscsi_HBA', pscsi_HBA_records)
|
||||
|
||||
@ -1674,7 +1674,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendNode.py
|
||||
def shutdown(self):
|
||||
return 0
|
||||
|
||||
@@ -934,6 +956,7 @@ class XendNode:
|
||||
@@ -939,6 +961,7 @@ class XendNode:
|
||||
self.format_node_to_memory(info, 'node_to_memory')
|
||||
info['node_to_dma32_mem'] = \
|
||||
self.format_node_to_memory(info, 'node_to_dma32_mem')
|
||||
@ -1682,7 +1682,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendNode.py
|
||||
|
||||
# FIXME: These are hard-coded to be the inverse of the getXenMemory
|
||||
# functions in image.py. Find a cleaner way.
|
||||
@@ -953,6 +976,7 @@ class XendNode:
|
||||
@@ -958,6 +981,7 @@ class XendNode:
|
||||
'virt_caps',
|
||||
'total_memory',
|
||||
'free_memory',
|
||||
|
@ -2,7 +2,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendConfig.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
||||
@@ -1855,7 +1855,14 @@ class XendConfig(dict):
|
||||
@@ -1861,7 +1861,14 @@ class XendConfig(dict):
|
||||
ports = sxp.child(dev_sxp, 'port')
|
||||
for port in ports[1:]:
|
||||
try:
|
||||
|
@ -1,5 +1,7 @@
|
||||
--- a/tools/python/xen/lowlevel/xc/xc.c
|
||||
+++ b/tools/python/xen/lowlevel/xc/xc.c
|
||||
Index: xen-4.0.0-testing/tools/python/xen/lowlevel/xc/xc.c
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/lowlevel/xc/xc.c
|
||||
+++ xen-4.0.0-testing/tools/python/xen/lowlevel/xc/xc.c
|
||||
@@ -944,16 +944,16 @@ static PyObject *pyxc_hvm_build(XcObject
|
||||
#endif
|
||||
int i;
|
||||
@ -30,9 +32,11 @@
|
||||
|
||||
return Py_BuildValue("{}");
|
||||
}
|
||||
--- a/tools/python/xen/xend/XendConfig.py
|
||||
+++ b/tools/python/xen/xend/XendConfig.py
|
||||
@@ -151,6 +151,7 @@ XENAPI_PLATFORM_CFG_TYPES = {
|
||||
Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendConfig.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
||||
@@ -157,6 +157,7 @@ XENAPI_PLATFORM_CFG_TYPES = {
|
||||
'nographic': int,
|
||||
'nomigrate': int,
|
||||
'pae' : int,
|
||||
@ -40,8 +44,10 @@
|
||||
'rtc_timeoffset': int,
|
||||
'parallel': str,
|
||||
'serial': str,
|
||||
--- a/tools/python/xen/xend/image.py
|
||||
+++ b/tools/python/xen/xend/image.py
|
||||
Index: xen-4.0.0-testing/tools/python/xen/xend/image.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/image.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xend/image.py
|
||||
@@ -839,6 +839,7 @@ class HVMImageHandler(ImageHandler):
|
||||
|
||||
self.apic = int(vmConfig['platform'].get('apic', 0))
|
||||
@ -66,8 +72,10 @@
|
||||
acpi = self.acpi,
|
||||
apic = self.apic)
|
||||
rc['notes'] = { 'SUSPEND_CANCEL': 1 }
|
||||
--- a/tools/python/xen/xm/create.py
|
||||
+++ b/tools/python/xen/xm/create.py
|
||||
Index: xen-4.0.0-testing/tools/python/xen/xm/create.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xm/create.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xm/create.py
|
||||
@@ -242,6 +242,10 @@ gopts.var('viridian', val='VIRIDIAN',
|
||||
use="""Expose Viridian interface to x86 HVM guest?
|
||||
(Default is 0).""")
|
||||
|
@ -325,7 +325,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendConfig.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py
|
||||
@@ -236,6 +236,7 @@ XENAPI_CFG_TYPES = {
|
||||
@@ -242,6 +242,7 @@ XENAPI_CFG_TYPES = {
|
||||
'memory_sharing': int,
|
||||
'Description': str,
|
||||
'pool_name' : str,
|
||||
|
@ -2,7 +2,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendNode.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendNode.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendNode.py
|
||||
@@ -911,15 +911,39 @@ class XendNode:
|
||||
@@ -916,15 +916,39 @@ class XendNode:
|
||||
|
||||
info['cpu_mhz'] = info['cpu_khz'] / 1000
|
||||
|
||||
@ -47,7 +47,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendNode.py
|
||||
ITEM_ORDER = ['nr_cpus',
|
||||
'nr_nodes',
|
||||
'cores_per_socket',
|
||||
@@ -929,6 +953,9 @@ class XendNode:
|
||||
@@ -934,6 +958,9 @@ class XendNode:
|
||||
'virt_caps',
|
||||
'total_memory',
|
||||
'free_memory',
|
||||
|
26
xen.changes
26
xen.changes
@ -1,3 +1,27 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Jul 27 16:32:57 MDT 2010 - jfehlig@novell.com
|
||||
|
||||
- bnc#623833 - Error in Xend-API method VM_set_actions_after_crash
|
||||
21866-xenapi.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Jul 27 15:39:17 MDT 2010 - jfehlig@novell.com
|
||||
|
||||
- bnc#625003 - Fix vm config options coredump-{restart,destroy}
|
||||
Added hunk to xm-create-xflag.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Jul 26 16:49:39 MDT 2010 - jfehlig@novell.com
|
||||
|
||||
- bnc#605186 - Squelch harmless error messages in block-iscsi
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Jul 26 16:45:21 MDT 2010 - jfehlig@novell.com
|
||||
|
||||
- bnc#623438 - Add ability to control SCSI device path scanning
|
||||
in xend
|
||||
21847-pscsi.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Jul 21 11:46:41 MDT 2010 - carnold@novell.com
|
||||
|
||||
@ -48,7 +72,7 @@ Tue Jul 6 11:31:33 MDT 2010 - carnold@novell.com
|
||||
Fri Jun 25 15:43:35 CST 2010 - jsong@novell.com
|
||||
|
||||
- bnc#599550 - Xen cannot distinguish the status of 'pause'
|
||||
addcommand_domstate.patch
|
||||
21723-get-domu-state.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Jun 22 11:50:35 MDT 2010 - jfehlig@novell.com
|
||||
|
8
xen.spec
8
xen.spec
@ -133,7 +133,10 @@ Patch55: 21700-32on64-vm86-gpf.patch
|
||||
Patch56: 21705-trace-printk.patch
|
||||
Patch57: 21706-trace-security.patch
|
||||
Patch58: 21712-amd-osvw.patch
|
||||
Patch59: 21744-x86-cpufreq-range-check.patch
|
||||
Patch59: 21723-get-domu-state.patch
|
||||
Patch60: 21744-x86-cpufreq-range-check.patch
|
||||
Patch61: 21847-pscsi.patch
|
||||
Patch62: 21866-xenapi.patch
|
||||
# Our patches
|
||||
Patch300: xen-config.diff
|
||||
Patch301: xend-config.diff
|
||||
@ -639,6 +642,9 @@ Authors:
|
||||
%patch57 -p1
|
||||
%patch58 -p1
|
||||
%patch59 -p1
|
||||
%patch60 -p1
|
||||
%patch61 -p1
|
||||
%patch62 -p1
|
||||
%patch300 -p1
|
||||
%patch301 -p1
|
||||
%patch302 -p1
|
||||
|
@ -2,11 +2,10 @@ Index: xen-4.0.0-testing/tools/examples/xend-config.sxp
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/examples/xend-config.sxp
|
||||
+++ xen-4.0.0-testing/tools/examples/xend-config.sxp
|
||||
@@ -304,3 +304,62 @@
|
||||
# we have to realize this may incur security issue and we can't make sure the
|
||||
@@ -305,6 +305,65 @@
|
||||
# device assignment could really work properly even after we do this.
|
||||
#(pci-passthrough-strict-check yes)
|
||||
+
|
||||
|
||||
+# Domain Locking
|
||||
+# In a multihost environment, domain locking prevents simultaneously
|
||||
+# running a domain on more than one host.
|
||||
@ -65,6 +64,10 @@ Index: xen-4.0.0-testing/tools/examples/xend-config.sxp
|
||||
+# before starting vm1 on HostA.
|
||||
+#
|
||||
+#(xend-domain-lock-utility domain-lock)
|
||||
+
|
||||
# If we have a very big scsi device configuration, start of xend is slow,
|
||||
# because xend scans all the device paths to build its internal PSCSI device
|
||||
# list. If we need only a few devices for assigning to a guest, we can reduce
|
||||
Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
@ -200,7 +203,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendOptions.py
|
||||
def __init__(self):
|
||||
self.configure()
|
||||
|
||||
@@ -398,6 +409,24 @@ class XendOptions:
|
||||
@@ -401,6 +412,24 @@ class XendOptions:
|
||||
else:
|
||||
return None
|
||||
|
||||
|
@ -29,3 +29,18 @@ Index: xen-4.0.0-testing/tools/python/xen/xm/create.py
|
||||
from xml.dom.ext import PrettyPrint as XMLPrettyPrint
|
||||
XMLPrettyPrint(doc)
|
||||
|
||||
Index: xen-4.0.0-testing/tools/python/xen/xend/XendAPIConstants.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendAPIConstants.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendAPIConstants.py
|
||||
@@ -45,8 +45,10 @@ XEN_API_ON_NORMAL_EXIT = [
|
||||
XEN_API_ON_CRASH_BEHAVIOUR = [
|
||||
'destroy',
|
||||
'coredump_and_destroy',
|
||||
+ 'coredump_destroy',
|
||||
'restart',
|
||||
'coredump_and_restart',
|
||||
+ 'coredump_restart',
|
||||
'preserve',
|
||||
'rename_restart'
|
||||
]
|
||||
|
@ -2,7 +2,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendAPI.py
|
||||
===================================================================
|
||||
--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendAPI.py
|
||||
+++ xen-4.0.0-testing/tools/python/xen/xend/XendAPI.py
|
||||
@@ -1922,10 +1922,10 @@ class XendAPI(object):
|
||||
@@ -1923,10 +1923,10 @@ class XendAPI(object):
|
||||
bool(live), port, node, ssl, bool(chs))
|
||||
return xen_api_success_void()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user