commit a45e415640a380d290b3228d00e2e595f6a7469e
Merge: c57cdce 59acce3
Author: Petr Pudlak <[email protected]>
Date: Tue Oct 7 15:05:46 2014 +0200
Merge branch 'stable-2.11' into stable-2.12
* stable-2.10
ganeti.daemon: fix daemon mode with GnuTLS >= 3.3
Fix DRBD version check for non VM capable nodes
Fix invalid message from gnt-os
Renaming NV_VMNODES to NV_NONVMNODES
Node names in NV_VMNODES
* stable-2.9
Ganeti.Daemon: always install SIGHUP handler
Conflicts:
lib/config.py: Replace 2.11 annotations with 2.12 annotations
Signed-off-by: Petr Pudlak <[email protected]>
diff --cc lib/config.py
index 6f171da,b6f1373..1e335f3
--- a/lib/config.py
+++ b/lib/config.py
@@@ -2403,16 -2056,25 +2403,25 @@@ class ConfigWriter(object)
for node in self._UnlockedGetNodeList()]
return [node.uuid for node in all_nodes if node.vm_capable]
- @locking.ssynchronized(_config_lock, shared=1)
+ @_ConfigSync(shared=1)
def GetNonVmCapableNodeList(self):
- """Return the list of nodes which are not vm capable.
+ """Return the list of nodes' uuids which are not vm capable.
"""
all_nodes = [self._UnlockedGetNodeInfo(node)
for node in self._UnlockedGetNodeList()]
return [node.uuid for node in all_nodes if not node.vm_capable]
- @locking.ssynchronized(_config_lock, shared=1)
+ @_ConfigSync(shared=1)
+ def GetNonVmCapableNodeNameList(self):
+ """Return the list of nodes' names which are not vm capable.
+
+ """
+ all_nodes = [self._UnlockedGetNodeInfo(node)
+ for node in self._UnlockedGetNodeList()]
+ return [node.name for node in all_nodes if not node.vm_capable]
+
- @locking.ssynchronized(_config_lock, shared=1)
++ @_ConfigSync(shared=1)
def GetMultiNodeInfo(self, node_uuids):
"""Get the configuration of multiple nodes.
diff --cc lib/daemon.py
index 385807d,a276c52..cff0d84
--- a/lib/daemon.py
+++ b/lib/daemon.py
@@@ -814,12 -809,24 +814,28 @@@ def GenericMain(daemon_name, optionpars
log_filename = constants.DAEMONS_LOGFILES[daemon_name]
+ # node-daemon logging in lib/http/server.py, _HandleServerRequestInner
+ if options.debug and warn_breach:
+ sys.stderr.write(constants.DEBUG_MODE_CONFIDENTIALITY_WARNING %
daemon_name)
+
if options.fork:
- utils.CloseFDs()
+ # Newer GnuTLS versions (>= 3.3.0) use a library constructor for
+ # initialization and open /dev/urandom on library load time, way before we
+ # fork(). Closing /dev/urandom causes subsequent ganeti.http.client
+ # requests to fail and the process to receive a SIGABRT. As we cannot
+ # reliably detect GnuTLS's socket, we work our way around this by keeping
+ # all fds referring to /dev/urandom open.
+ noclose_fds = []
+ for fd in os.listdir("/proc/self/fd"):
+ try:
+ if os.readlink(os.path.join("/proc/self/fd", fd)) == "/dev/urandom":
+ noclose_fds.append(int(fd))
+ except EnvironmentError:
+ # The fd might have disappeared (although it shouldn't as we're
running
+ # single-threaded).
+ continue
+
+ utils.CloseFDs(noclose_fds=noclose_fds)
(wpipe, stdio_reopen_fn) = utils.Daemonize(logfile=log_filename)
else:
(wpipe, stdio_reopen_fn) = (None, None)