diff --git a/NEWS b/NEWS index 794516533770559d2255e1d326063fa419eac7fe..b3e60a89310271e52eebadec0c35721666c5f662 100644 --- a/NEWS +++ b/NEWS @@ -2,10 +2,10 @@ News ==== -Version 2.5.0 rc5 +Version 2.5.0 rc6 ----------------- -*(Released Mon, 9 Jan 2012)* +*(Released Fri, 23 Mar 2012)* Incompatible/important changes and bugfixes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -41,6 +41,7 @@ Incompatible/important changes and bugfixes - Offline nodes are ignored when failing over an instance. - Support for KVM version 1.0, which changed the version reporting format from 3 to 2 digits. +- ``Makefile`` is now compatible with Automake 1.11.2 - Includes all bugfixes made in the 2.4 series New features @@ -133,6 +134,15 @@ Misc - A short delay when waiting for job changes reduces the number of LUXI requests significantly. - DRBD metadata volumes are overwritten with zeros during disk creation. +- ``devel/upload`` now uses correct permissions for directories. + + +Version 2.5.0 rc5 +----------------- + +*(Released Mon, 9 Jan 2012)* + +This was the fifth release candidate of the 2.5 series. Version 2.5.0 rc4 diff --git a/configure.ac b/configure.ac index c5a3b8413ad51e1340159821bc97126dfa49a84d..3b49bbfa30a54f2f2fe32235e0a640c58c44ad2d 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ m4_define([gnt_version_major], [2]) m4_define([gnt_version_minor], [5]) m4_define([gnt_version_revision], [0]) -m4_define([gnt_version_suffix], [~rc5]) +m4_define([gnt_version_suffix], [~rc6]) m4_define([gnt_version_full], m4_format([%d.%d.%d%s], gnt_version_major, gnt_version_minor, diff --git a/lib/bdev.py b/lib/bdev.py index d8603df8d13f31e57922423b538e945b12f5be5d..6e37479e30ca08cd275c550c948b59d793c609bc 100644 --- a/lib/bdev.py +++ b/lib/bdev.py @@ -1,7 +1,7 @@ # # -# Copyright (C) 2006, 2007, 2010, 2011 Google Inc. +# Copyright (C) 2006, 2007, 2010, 2011, 2012 Google Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -606,8 +606,8 @@ class LogicalVolume(BlockDev): return False status, major, minor, pe_size, stripes = out - if len(status) != 6: - logging.error("lvs lv_attr is not 6 characters (%s)", status) + if len(status) < 6: + logging.error("lvs lv_attr is not at least 6 characters (%s)", status) return False try: diff --git a/lib/cmdlib.py b/lib/cmdlib.py index eb2e49a6f75b8c12b213782783844c1f4e91a7d7..95e4abb923bee298cfd260c13a4ebe0cab2686e2 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -1581,7 +1581,7 @@ class LUClusterVerifyConfig(NoHooksLU, _VerifyErrors): """Verifies the cluster config. """ - REQ_BGL = True + REQ_BGL = False def _VerifyHVP(self, hvp_data): """Verifies locally the syntax of the hypervisor parameters. @@ -1598,13 +1598,17 @@ class LUClusterVerifyConfig(NoHooksLU, _VerifyErrors): self._ErrorIf(True, self.ECLUSTERCFG, None, msg % str(err)) def ExpandNames(self): - # Information can be safely retrieved as the BGL is acquired in exclusive - # mode - assert locking.BGL in self.owned_locks(locking.LEVEL_CLUSTER) + self.needed_locks = dict.fromkeys(locking.LEVELS, locking.ALL_SET) + self.share_locks = _ShareAll() + + def CheckPrereq(self): + """Check prerequisites. + + """ + # Retrieve all information self.all_group_info = self.cfg.GetAllNodeGroupsInfo() self.all_node_info = self.cfg.GetAllNodesInfo() self.all_inst_info = self.cfg.GetAllInstancesInfo() - self.needed_locks = {} def Exec(self, feedback_fn): """Verify integrity of cluster, performing various test on nodes. @@ -11498,7 +11502,7 @@ class LUInstanceChangeGroup(LogicalUnit): if self.req_target_uuids: # User requested specific target groups - self.target_uuids = self.req_target_uuids + self.target_uuids = frozenset(self.req_target_uuids) else: # All groups except those used by the instance are potential targets self.target_uuids = owned_groups - inst_groups diff --git a/lib/hypervisor/hv_kvm.py b/lib/hypervisor/hv_kvm.py index 9b341b7e4b4014ed86e17213a1cde84d8f18285a..c2ae771ead629f1887237908d73897922da510cf 100644 --- a/lib/hypervisor/hv_kvm.py +++ b/lib/hypervisor/hv_kvm.py @@ -927,8 +927,20 @@ class KVMHypervisor(hv_base.BaseHypervisor): if mem_path: kvm_cmd.extend(["-mem-path", mem_path, "-mem-prealloc"]) + monitor_dev = ("unix:%s,server,nowait" % + self._InstanceMonitor(instance.name)) + kvm_cmd.extend(["-monitor", monitor_dev]) + if hvp[constants.HV_SERIAL_CONSOLE]: + serial_dev = ("unix:%s,server,nowait" % + self._InstanceSerial(instance.name)) + kvm_cmd.extend(["-serial", serial_dev]) + else: + kvm_cmd.extend(["-serial", "none"]) + mouse_type = hvp[constants.HV_USB_MOUSE] vnc_bind_address = hvp[constants.HV_VNC_BIND_ADDRESS] + spice_bind = hvp[constants.HV_KVM_SPICE_BIND] + spice_ip_version = None if mouse_type: kvm_cmd.extend(["-usb"]) @@ -980,22 +992,7 @@ class KVMHypervisor(hv_base.BaseHypervisor): vnc_arg = "unix:%s/%s.vnc" % (vnc_bind_address, instance.name) kvm_cmd.extend(["-vnc", vnc_arg]) - else: - kvm_cmd.extend(["-nographic"]) - - monitor_dev = ("unix:%s,server,nowait" % - self._InstanceMonitor(instance.name)) - kvm_cmd.extend(["-monitor", monitor_dev]) - if hvp[constants.HV_SERIAL_CONSOLE]: - serial_dev = ("unix:%s,server,nowait" % - self._InstanceSerial(instance.name)) - kvm_cmd.extend(["-serial", serial_dev]) - else: - kvm_cmd.extend(["-serial", "none"]) - - spice_bind = hvp[constants.HV_KVM_SPICE_BIND] - spice_ip_version = None - if spice_bind: + elif spice_bind: if netutils.IsValidInterface(spice_bind): # The user specified a network interface, we have to figure out the IP # address. @@ -1066,6 +1063,9 @@ class KVMHypervisor(hv_base.BaseHypervisor): # Tell kvm to use the paravirtualized graphic card, optimized for SPICE kvm_cmd.extend(["-vga", "qxl"]) + else: + kvm_cmd.extend(["-nographic"]) + if hvp[constants.HV_USE_LOCALTIME]: kvm_cmd.extend(["-localtime"])