Commit 0fb44e89 authored by Guido Trotter's avatar Guido Trotter
Browse files

Merge branch 'devel-2.1'



* devel-2.1:
  TestAsyncUDPSocket: remove dead code and add test
  TestAsyncUDPSocket: test for oversized sends
  Document the check-man change
  Update NEWS for Ganeti 2.1.3
  Second attempt at fixing check-man
  Fix check-man for newer man-db
  Add RemoveDir utility function

Conflicts:
	NEWS
	  - trivial
	test/ganeti.daemon_unittest.py
	  - trivial
Signed-off-by: default avatarGuido Trotter <ultrotter@google.com>
Reviewed-by: default avatarMichael Hanselmann <hansmi@google.com>
parents 53dbf14c 95ab227e
......@@ -9,6 +9,69 @@ Version 2.2.0
RFC2616 (HTTP/1.1), section 7.2.1)
Version 2.1.3
-------------
*(Unreleased)*
A medium sized development cycle. Some new features, and some
fixes/small improvements/cleanups.
Significant features
~~~~~~~~~~~~~~~~~~~~
The node deamon now tries to mlock itself into memory, unless the
``--no-mlock`` flag is passed. It also doesn't fail if it can't write
its logs, and falls back to console logging. This allows emergency
features such as ``gnt-node powercycle`` to work even in the event of a
broken node disk (tested offlining the disk hosting the node's
filesystem and dropping its memory caches. don't try this at home)
KVM: add vhost-net acceleration support. It can be tested with a new
enough version of the kernel and of qemu-kvm.
KVM: Add instance chrooting feature. If you use privilege dropping for
your VMs you can also now force them to chroot to an empty directory,
before starting the emulated guest.
KVM: Add maximum migration bandwith and maximum downtime tweaking
support (requires a new-enough version of qemu-kvm).
Cluster verify will now warn if the master node doesn't have the master
ip configured on it.
Add a new (incompatible) instance creation request format to RAPI which
supports all parameters (previously only a subset was supported, and it
wasn't possible to extend the old format to accomodate all the new
features. The old format is still supported, and a client can check for
this feature, before using it, by checking for its presence in the
``features`` RAPI resource.
Now with ancient latin support. Try it passing the ``--roman`` option to
``gnt-instance info, gnt-cluster info or gnt-node list`` (requires the
python-roman module to be installed, in order to work).
Other changes
~~~~~~~~~~~~~
As usual many internal code refactorings, documentation updates, and
such. Among others:
- Lots of improvements and cleanups to the experimental Remote API
(RAPI) client library.
- A new unit test suite for the core daemon libraries.
- A fix to creating missing directories makes sure the umask is not
applied anymore. This enforces the same directory permissions
everywhere.
- Better handling terminating daemons with ctrl+c (used when running
them in debugging mode).
- Fix a race condition in live migrating a KVM instance, when stat()
on the old proc status file returned EINVAL, which is an unexpected
value.
- Fixed manpage checking with newer man and utf-8 charachters. But now
you need the en_US.UTF-8 locale enabled to build Ganeti from git.
Version 2.1.2.1
---------------
......
......@@ -20,7 +20,7 @@
set -e
! MANWIDTH=80 \
! LANG=en_US.UTF-8 MANWIDTH=80 \
man --warnings --encoding=utf8 --local-file "$1" 2>&1 >/dev/null | \
grep -v -e "cannot adjust line" -e "can't break line" | \
grep .
......@@ -14,6 +14,7 @@ Most dependencies from :doc:`install-quick`, plus:
- `python-sphinx <http://sphinx.pocoo.org/>`_
(tested with version 0.6.1)
- `graphviz <http://www.graphviz.org/>`_
- the `en_US.UTF-8` locale must be enabled on the system
To generate unittest coverage reports (``make coverage``), `coverage
<http://pypi.python.org/pypi/coverage>`_ needs to be installed.
......
......@@ -31,6 +31,7 @@ import shutil
from ganeti import daemon
from ganeti import errors
from ganeti import constants
from ganeti import utils
import testutils
......@@ -188,12 +189,6 @@ class TestAsyncUDPSocket(testutils.GanetiTestCase):
def testNoDoubleBind(self):
self.assertRaises(socket.error, self.client.bind, ("127.0.0.1", self.port))
def _ThreadedClient(self, payload):
self.client.enqueue_send("127.0.0.1", self.port, payload)
print "sending %s" % payload
while self.client.writable():
self.client.handle_write()
def testAsyncClientServer(self):
self.client.enqueue_send("127.0.0.1", self.port, "p1")
self.client.enqueue_send("127.0.0.1", self.port, "p2")
......@@ -202,6 +197,7 @@ class TestAsyncUDPSocket(testutils.GanetiTestCase):
self.assertEquals(self.server.received, ["p1", "p2", "terminate"])
def testSyncClientServer(self):
self.client.handle_write()
self.client.enqueue_send("127.0.0.1", self.port, "p1")
self.client.enqueue_send("127.0.0.1", self.port, "p2")
while self.client.writable():
......@@ -247,6 +243,11 @@ class TestAsyncUDPSocket(testutils.GanetiTestCase):
self.mainloop.Run()
self.assertEquals(self.server.received, ["p1", "p2", "terminate"])
def testOversizedDatagram(self):
oversized_data = (constants.MAX_UDP_DATA_SIZE + 1) * "a"
self.assertRaises(errors.UdpDataSizeError, self.client.enqueue_send,
"127.0.0.1", self.port, oversized_data)
class _MyAsyncStreamServer(daemon.AsyncStreamServer):
......
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