Commit e3e5edf2 authored by Klaus Aehlig's avatar Klaus Aehlig
Browse files

Merge branch 'stable-2.12' into master



* stable-2.11
  Generate domain-name unique names in genEmptyCluster

* stable-2.12
  Update the release date and add a fixed bug in NEWS
  Improve retries on RPC communication to daemons
  Suffix bump for 2.12.0
  Prepare NEWS file for 2.12.0

Conflicts:
	NEWS: take ALL the entries
	configure.ac: ignore suffix bump
Signed-off-by: default avatarKlaus Aehlig <aehlig@google.com>
Reviewed-by: default avatarPetr Pudlak <pudlak@google.com>
parents e164a343 9eb00aef
......@@ -41,10 +41,10 @@ New dependencies
if you use Mond.
Version 2.12.0 rc2
------------------
Version 2.12.0
--------------
*(Released Mon, 22 Sep 2014)*
*(Released Fri, 10 Oct 2014)*
Incompatible/important changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
......@@ -101,22 +101,6 @@ New dependencies
instead. The package is still optional and needed only if the feature is to
be used.
Since 2.12.0 rc1
~~~~~~~~~~~~~~~~~~
The following issues have been fixed:
- Watcher now checks if WConfd is running and functional.
- Watcher now properly adds reason trail entries.
- Fixed NIC options in Xen's config files.
Inherited from the 2.10 branch:
- Fixed handling of the --online option
- Add warning against hvparam changes with live migrations, which might
lead to dangerous situations for instances.
- Only the LVs in the configured VG are checked during cluster verify.
Incomplete features
~~~~~~~~~~~~~~~~~~~
......@@ -143,6 +127,52 @@ Known issues
from a host to instances (only on the special metadata communication
network interface) using the ethtool command. Therefore if using
the metadata daemon the host nodes should have this tool available.
- The metadata daemon is run as root in the split-user mode, to be able
to bind to port 80.
This should be improved in future versions, see issue #949.
Since 2.12.0 rc2
~~~~~~~~~~~~~~~~
The following issues have been fixed:
- Fixed passing additional parameters to RecreateInstanceDisks over
RAPI.
- Fixed the permissions of WConfd when running in the split-user mode.
As WConfd takes over the previous master daemon to manage the
configuration, it currently runs under the masterd user.
- Fixed the permissions of the metadata daemon wn running in the
split-user mode (see Known issues).
- Watcher now properly adds a reason trail entry when initiating disk
checks.
- Fixed removing KVM parameters introduced in 2.12 when downgrading a
cluster to 2.11: "migration_caps", "disk_aio" and "virtio_net_queues".
- Improved retrying of RPC calls that fail due to network errors.
Version 2.12.0 rc2
------------------
*(Released Mon, 22 Sep 2014)*
This was the second release candidate of the 2.12 series.
All important changes are listed in the latest 2.12 entry.
Since 2.12.0 rc1
~~~~~~~~~~~~~~~~
The following issues have been fixed:
- Watcher now checks if WConfd is running and functional.
- Watcher now properly adds reason trail entries.
- Fixed NIC options in Xen's config files.
Inherited from the 2.10 branch:
- Fixed handling of the --online option
- Add warning against hvparam changes with live migrations, which might
lead to dangerous situations for instances.
- Only the LVs in the configured VG are checked during cluster verify.
Version 2.12.0 rc1
......
......@@ -218,7 +218,8 @@ class AbstractClient(object):
logging.debug("RPC peer disconnected, retrying")
self._InitTransport()
return self.transport.Call(data)
return t.Transport.RetryOnBrokenPipe(send, lambda _: self._CloseTransport())
return t.Transport.RetryOnNetworkError(send,
lambda _: self._CloseTransport())
def Close(self):
"""Close the underlying connection.
......
......@@ -37,6 +37,7 @@ A transport can send to and receive messages from some endpoint.
import collections
import errno
import io
import logging
import socket
import time
......@@ -188,8 +189,8 @@ class Transport:
return self.Recv()
@staticmethod
def RetryOnBrokenPipe(fn, on_error):
"""Calls a given function, retrying if it fails on the 'Broken pipe' IO
def RetryOnNetworkError(fn, on_error, retries=5, wait_on_error=5):
"""Calls a given function, retrying if it fails on a network IO
exception.
This allows to re-establish a broken connection and retry an IO operation.
......@@ -198,21 +199,21 @@ class Transport:
number, 0 being the first call, 1 being the retry.
If any exception occurs, on_error is invoked first with the exception given
as an argument. Then, if the exception is 'Broken pipe', the function call
is retried once more.
as an argument. Then, if the exception is a network exception, the function
call is retried once more.
"""
retries = 2
for try_no in range(0, retries):
try:
return fn(try_no)
except socket.error, ex:
on_error(ex)
# we retry on "Broken pipe", unless it's the last try
# we retry on a network error, unless it's the last try
if try_no == retries - 1:
raise
elif not (isinstance(ex.args, tuple) and (ex[0] == errno.EPIPE)):
raise
logging.error("Network error: %s, retring (retry attempt number %d)",
ex, try_no + 1)
time.sleep(wait_on_error)
except Exception, ex:
on_error(ex)
raise
......
......@@ -350,7 +350,8 @@ genEmptyCluster ncount = do
grp <- arbitrary
let guuid = groupUuid grp
nodes' = zipWith (\n idx ->
let newname = nodeName n ++ "-" ++ show idx
let newname = takeWhile (/= '.') (nodeName n)
++ "-" ++ show idx
in (newname, n { nodeGroup = guuid,
nodeName = newname}))
nodes [(1::Int)..]
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment