summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app-admin/clustershell/Manifest1
-rw-r--r--app-admin/clustershell/clustershell-1.8.4.ebuild67
-rw-r--r--app-admin/clustershell/files/clustershell-1.8.4-current-thread.patch95
-rw-r--r--app-admin/clustershell/files/clustershell-1.8.4-setrlimit-division.patch21
-rw-r--r--app-admin/clustershell/files/clustershell-1.8.4-skip-tests.patch63
5 files changed, 247 insertions, 0 deletions
diff --git a/app-admin/clustershell/Manifest b/app-admin/clustershell/Manifest
index 6f30a4d35adf..782faba883bc 100644
--- a/app-admin/clustershell/Manifest
+++ b/app-admin/clustershell/Manifest
@@ -1 +1,2 @@
DIST clustershell-1.8.3.tar.gz 363975 BLAKE2B 3a7bb9103398e96f57f53d0d5d5edc6895ce02b6983e8fed34d65cad83a6d4e86f40b9576f41631e499a99adc8be5f4f422005b8ddc7ac8325fe11abd2c99477 SHA512 5108773e2958d1dae0aa6966d764e9af9d41024f65271005b202468f2bd1a3b63acc977729324fe1305d400dc8b06b0c4672e8d8ded207fa77cef69fb0005108
+DIST clustershell-1.8.4.gh.tar.gz 367622 BLAKE2B 1487697a49d37902f9763094da1a156f5e7cc2ab0487814207bb9da03b1109f1ce55034fc92e72262d4b9920d5c52b9f6de84ce1ff04b06d042b0a6d005f1049 SHA512 582393e56d94e62e126d91f8af074a7b57d0e781a5c929cfc374e61324c412c32fcf9a8e063a78cb805c2ff34641887a1adfc7ef9f377b881077f719dbc2adc3
diff --git a/app-admin/clustershell/clustershell-1.8.4.ebuild b/app-admin/clustershell/clustershell-1.8.4.ebuild
new file mode 100644
index 000000000000..9ad14aaab935
--- /dev/null
+++ b/app-admin/clustershell/clustershell-1.8.4.ebuild
@@ -0,0 +1,67 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{9..11} )
+PYTHON_REQ_USE="xml(+)"
+
+inherit distutils-r1
+
+DESCRIPTION="Python framework for efficient cluster administration"
+HOMEPAGE="https://github.com/cea-hpc/clustershell/"
+SRC_URI="
+ https://github.com/cea-hpc/clustershell/archive/v${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="LGPL-2.1+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+BDEPEND="
+ test? (
+ app-shells/pdsh
+ net-misc/openssh
+ sys-devel/bc
+ )
+"
+
+RDEPEND="dev-python/pyyaml[${PYTHON_USEDEP}]"
+
+PATCHES=(
+ # python3.10 related fixes taken from upstream
+ "${FILESDIR}/${P}-setrlimit-division.patch"
+ "${FILESDIR}/${P}-current-thread.patch"
+
+ "${FILESDIR}/${P}-skip-tests.patch"
+)
+
+distutils_enable_tests unittest
+
+src_prepare() {
+ default
+
+ # remove test sets that require working ssh connection
+ rm tests/{CLIClush,TaskDistant*,TreeWorker}Test.py || die
+}
+
+python_test() {
+ cd tests || die
+ # Automatic discovery does not work
+ "${EPYTHON}" -m unittest_or_fail -v *.py || die "Tests failed with ${EPYTHON}"
+}
+
+src_install() {
+ distutils-r1_src_install
+
+ doman doc/man/man*/*
+
+ mv "${ED}/usr/etc" "${ED}/etc" || die
+}
+
+pkg_postinst() {
+ einfo "Some default system-wide config files have been installed into"
+ einfo "/etc/${PN}"
+}
diff --git a/app-admin/clustershell/files/clustershell-1.8.4-current-thread.patch b/app-admin/clustershell/files/clustershell-1.8.4-current-thread.patch
new file mode 100644
index 000000000000..bf9c7edb6a90
--- /dev/null
+++ b/app-admin/clustershell/files/clustershell-1.8.4-current-thread.patch
@@ -0,0 +1,95 @@
+Backported from upstream commit 314767d65c39 ("Fix for python-3.10") [1].
+
+[1] https://github.com/cea-hpc/clustershell/commit/314767d65c397fadc5ce0ae205a35d7bb47a68a8
+
+diff --git a/lib/ClusterShell/Task.py b/lib/ClusterShell/Task.py
+index b9142e6..8c9e1b9 100644
+--- a/lib/ClusterShell/Task.py
++++ b/lib/ClusterShell/Task.py
+@@ -254,7 +254,7 @@ class Task(object):
+ self._cond.acquire()
+ try:
+ self.suspend_count = min(self.suspend_count, 0)
+- self._cond.notifyAll()
++ self._cond.notify_all()
+ finally:
+ self._cond.release()
+
+@@ -347,7 +347,7 @@ class Task(object):
+ def _is_task_self(self):
+ """Private method used by the library to check if the task is
+ task_self(), but do not create any task_self() instance."""
+- return self.thread == threading.currentThread()
++ return self.thread == threading.current_thread()
+
+ def default_excepthook(self, exc_type, exc_value, tb):
+ """Default excepthook for a newly Task. When an exception is
+@@ -765,7 +765,7 @@ class Task(object):
+
+ def _resume(self):
+ """Resume task - called from self thread."""
+- assert self.thread == threading.currentThread()
++ assert self.thread == threading.current_thread()
+ try:
+ try:
+ self._reset()
+@@ -780,7 +780,7 @@ class Task(object):
+ # task becomes joinable
+ self._join_cond.acquire()
+ self._suspend_cond.atomic_inc()
+- self._join_cond.notifyAll()
++ self._join_cond.notify_all()
+ self._join_cond.release()
+
+ def resume(self, timeout=None):
+@@ -954,14 +954,14 @@ class Task(object):
+ # termination (late join()s)
+ # must be called after _terminated is set to True
+ self._join_cond.acquire()
+- self._join_cond.notifyAll()
++ self._join_cond.notify_all()
+ self._join_cond.release()
+
+ # destroy task if needed
+ if kill:
+ Task._task_lock.acquire()
+ try:
+- del Task._tasks[threading.currentThread()]
++ del Task._tasks[threading.current_thread()]
+ finally:
+ Task._task_lock.release()
+
+@@ -1376,7 +1376,7 @@ def task_self(defaults=None):
+ provided as a convenience is available in the top-level ClusterShell.Task
+ package namespace.
+ """
+- return Task(thread=threading.currentThread(), defaults=defaults)
++ return Task(thread=threading.current_thread(), defaults=defaults)
+
+ def task_wait():
+ """
+@@ -1385,7 +1385,7 @@ def task_wait():
+ convenience and is available in the top-level ClusterShell.Task package
+ namespace.
+ """
+- Task.wait(threading.currentThread())
++ Task.wait(threading.current_thread())
+
+ def task_terminate():
+ """
+diff --git a/tests/TaskPortTest.py b/tests/TaskPortTest.py
+index 697f144..4014a89 100644
+--- a/tests/TaskPortTest.py
++++ b/tests/TaskPortTest.py
+@@ -28,7 +28,7 @@ class TaskPortTest(unittest.TestCase):
+ def ev_msg(self, port, msg):
+ # receive msg
+ assert msg == "toto"
+- assert port.task.thread == threading.currentThread()
++ assert port.task.thread == threading.current_thread()
+ TaskPortTest.got_msg = True
+ port.task.abort()
+
+--
+2.35.1
+
diff --git a/app-admin/clustershell/files/clustershell-1.8.4-setrlimit-division.patch b/app-admin/clustershell/files/clustershell-1.8.4-setrlimit-division.patch
new file mode 100644
index 000000000000..9ecd807591a8
--- /dev/null
+++ b/app-admin/clustershell/files/clustershell-1.8.4-setrlimit-division.patch
@@ -0,0 +1,21 @@
+Python3.10 related fix taken from upstream [1,2].
+
+[1] https://github.com/cea-hpc/clustershell/pull/487
+[2] https://github.com/cea-hpc/clustershell/commit/5ac85daf74056ec7e60778efec94c746a150142c
+
+diff --git a/tests/CLIConfigTest.py b/tests/CLIConfigTest.py
+index 2853398..db6cec5 100644
+--- a/tests/CLIConfigTest.py
++++ b/tests/CLIConfigTest.py
+@@ -229,7 +229,7 @@ class CLIClushConfigTest(unittest.TestCase):
+ display = Display(options, config)
+
+ # force a lower soft limit
+- resource.setrlimit(resource.RLIMIT_NOFILE, (hard2/2, hard))
++ resource.setrlimit(resource.RLIMIT_NOFILE, (hard2//2, hard))
+ # max_fdlimit should increase soft limit again
+ set_fdlimit(config.fd_max, display)
+ # verify
+--
+2.35.1
+
diff --git a/app-admin/clustershell/files/clustershell-1.8.4-skip-tests.patch b/app-admin/clustershell/files/clustershell-1.8.4-skip-tests.patch
new file mode 100644
index 000000000000..4374ae4b525c
--- /dev/null
+++ b/app-admin/clustershell/files/clustershell-1.8.4-skip-tests.patch
@@ -0,0 +1,63 @@
+This is a Gentoo specific patch for skipping tests that do not work due
+to various reasons:
+1. hostname may be set to localhost
+2. test fails which are most probably caused by weird test interaction.
+ The issue is reported to upstream in [1].
+
+[1] https://github.com/cea-hpc/clustershell/issues/488
+
+diff --git a/tests/TaskEventTest.py b/tests/TaskEventTest.py
+index f8a4048..900008b 100644
+--- a/tests/TaskEventTest.py
++++ b/tests/TaskEventTest.py
+@@ -475,6 +475,7 @@ class TaskEventTest(unittest.TestCase):
+ self.assertEqual(eh.cnt_pickup, 3)
+ self.assertEqual(eh.cnt_hup, 3)
+
++ @unittest.skip("because of an issue https://github.com/cea-hpc/clustershell/issues/488")
+ def test_ev_pickup_fanout_legacy(self):
+ """test ev_pickup event with fanout (legacy)"""
+ task = task_self()
+@@ -498,6 +499,7 @@ class TaskEventTest(unittest.TestCase):
+ finally:
+ task.set_info("fanout", fanout)
+
++ @unittest.skip("because of an issue https://github.com/cea-hpc/clustershell/issues/488")
+ def test_ev_pickup_fanout(self):
+ """test ev_pickup event with fanout"""
+ task = task_self()
+diff --git a/tests/TreeWorkerTest.py b/tests/TreeWorkerTest.py
+index d5c221a..969d3c9 100644
+--- a/tests/TreeWorkerTest.py
++++ b/tests/TreeWorkerTest.py
+@@ -99,6 +99,7 @@ class TEventHandler(TEventHandlerBase):
+ self.ev_timedout_cnt += 1
+
+
++@unittest.skipIf(HOSTNAME == 'localhost', "does not work with hostname set to 'localhost'")
+ class TreeWorkerTest(unittest.TestCase):
+ """
+ TreeWorkerTest: test TreeWorker
+diff --git a/tests/WorkerExecTest.py b/tests/WorkerExecTest.py
+index 6f99f10..0894f99 100644
+--- a/tests/WorkerExecTest.py
++++ b/tests/WorkerExecTest.py
+@@ -45,6 +45,7 @@ class ExecTest(unittest.TestCase):
+ self.assertEqual(task_self().max_retcode(), 1)
+ self.assertEqual(task_self().node_buffer('localhost'), b'')
+
++ @unittest.skipIf(HOSTNAME == 'localhost', "does not work with hostname set to 'localhost'")
+ def test_timeout(self):
+ """test ExecWorker with a timeout"""
+ nodes = "localhost,%s" % HOSTNAME
+@@ -67,6 +68,7 @@ class ExecTest(unittest.TestCase):
+ self.assertRaises(WorkerError, self.execw,
+ nodes="localhost", handler=None, command="echo %")
+
++ @unittest.skipIf(HOSTNAME == 'localhost', "does not work with hostname set to 'localhost'")
+ def test_rank_placeholder(self):
+ """test ExecWorker with several nodes and %n (rank)"""
+ nodes = "localhost,%s" % HOSTNAME
+--
+2.35.1
+