[ARVADOS] updated: 908959eafe8a9925cb2c204d6511095f702c1667

Git user git at public.curoverse.com
Wed Feb 15 11:29:55 EST 2017


Summary of changes:
 .../arvnodeman/computenode/dispatch/slurm.py       | 11 ++++++-
 services/nodemanager/arvnodeman/nodelist.py        |  2 +-
 .../nodemanager/tests/test_computenode_dispatch.py |  8 +++--
 .../tests/test_computenode_dispatch_slurm.py       | 13 +++++++-
 services/nodemanager/tests/test_nodelist.py        | 36 ++++++++++++++++++++--
 5 files changed, 61 insertions(+), 9 deletions(-)

       via  908959eafe8a9925cb2c204d6511095f702c1667 (commit)
       via  f14ce11321e919cc39b878fe9f7847e1a9bb0de3 (commit)
      from  bf9af31f49954d949317475bdcdc0694d247f82d (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 908959eafe8a9925cb2c204d6511095f702c1667
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Wed Feb 15 11:29:25 2017 -0500

    6520: Assign weight to node based on price to preferentially schedule on
    cheaper nodes.

diff --git a/services/nodemanager/arvnodeman/computenode/dispatch/slurm.py b/services/nodemanager/arvnodeman/computenode/dispatch/slurm.py
index cbeabd1..6c5cfc8 100644
--- a/services/nodemanager/arvnodeman/computenode/dispatch/slurm.py
+++ b/services/nodemanager/arvnodeman/computenode/dispatch/slurm.py
@@ -6,8 +6,9 @@ import subprocess
 import time
 
 from . import \
-    ComputeNodeSetupActor, ComputeNodeUpdateActor, ComputeNodeMonitorActor
+    ComputeNodeSetupActor, ComputeNodeMonitorActor
 from . import ComputeNodeShutdownActor as ShutdownActorBase
+from . import ComputeNodeUpdateActor as UpdateActorBase
 from .. import RetryMixin
 
 class SlurmMixin(object):
@@ -75,3 +76,11 @@ class ComputeNodeShutdownActor(SlurmMixin, ShutdownActorBase):
         else:
             # any other state.
             self._later.shutdown_node()
+
+class ComputeNodeUpdateActor(UpdateActorBase):
+    def sync_node(self, cloud_node, arvados_node):
+        try:
+            subprocess.check_output(['scontrol', 'update', 'NodeName=' + arvados_node["hostname"], 'Weight=%i' % int(cloud_node.size.price * 1000)])
+        except OSError:
+            self._logger.warn("Unable to set slurm node weight.", exc_info=True)
+        return super(ComputeNodeUpdateActor, self).sync_node(cloud_node, arvados_node)
diff --git a/services/nodemanager/tests/test_computenode_dispatch.py b/services/nodemanager/tests/test_computenode_dispatch.py
index ec15734..c718dad 100644
--- a/services/nodemanager/tests/test_computenode_dispatch.py
+++ b/services/nodemanager/tests/test_computenode_dispatch.py
@@ -273,11 +273,13 @@ class ComputeNodeShutdownActorTestCase(ComputeNodeShutdownActorMixin,
 
 class ComputeNodeUpdateActorTestCase(testutil.ActorTestMixin,
                                      unittest.TestCase):
+    ACTOR_CLASS = dispatch.ComputeNodeUpdateActor
+
     def make_actor(self):
         self.driver = mock.MagicMock(name='driver_mock')
-        self.updater = dispatch.ComputeNodeUpdateActor.start(self.driver).proxy()
+        self.updater = self.ACTOR_CLASS.start(self.driver).proxy()
 
-    def test_node_sync(self):
+    def test_node_sync(self, *args):
         self.make_actor()
         cloud_node = testutil.cloud_node_mock()
         arv_node = testutil.arvados_node_mock()
@@ -285,7 +287,7 @@ class ComputeNodeUpdateActorTestCase(testutil.ActorTestMixin,
         self.driver().sync_node.assert_called_with(cloud_node, arv_node)
 
     @testutil.no_sleep
-    def test_node_sync_error(self):
+    def test_node_sync_error(self, *args):
         self.make_actor()
         cloud_node = testutil.cloud_node_mock()
         arv_node = testutil.arvados_node_mock()
diff --git a/services/nodemanager/tests/test_computenode_dispatch_slurm.py b/services/nodemanager/tests/test_computenode_dispatch_slurm.py
index 536b0ca..38fe1d7 100644
--- a/services/nodemanager/tests/test_computenode_dispatch_slurm.py
+++ b/services/nodemanager/tests/test_computenode_dispatch_slurm.py
@@ -10,7 +10,7 @@ import mock
 
 import arvnodeman.computenode.dispatch.slurm as slurm_dispatch
 from . import testutil
-from .test_computenode_dispatch import ComputeNodeShutdownActorMixin
+from .test_computenode_dispatch import ComputeNodeShutdownActorMixin, ComputeNodeUpdateActorTestCase
 
 @mock.patch('subprocess.check_output')
 class SLURMComputeNodeShutdownActorTestCase(ComputeNodeShutdownActorMixin,
@@ -101,3 +101,14 @@ class SLURMComputeNodeShutdownActorTestCase(ComputeNodeShutdownActorMixin,
         proc_mock.return_value = 'other\n'
         super(SLURMComputeNodeShutdownActorTestCase,
               self).test_uncancellable_shutdown()
+
+ at mock.patch('subprocess.check_output')
+class SLURMComputeNodeUpdateActorTestCase(ComputeNodeUpdateActorTestCase):
+    ACTOR_CLASS = slurm_dispatch.ComputeNodeUpdateActor
+
+    def test_update_node_weight(self, check_output):
+        self.make_actor()
+        cloud_node = testutil.cloud_node_mock()
+        arv_node = testutil.arvados_node_mock()
+        self.updater.sync_node(cloud_node, arv_node).get(self.TIMEOUT)
+        check_output.assert_called_with(['scontrol', 'update', 'NodeName=compute99', 'Weight=99000'])

commit f14ce11321e919cc39b878fe9f7847e1a9bb0de3
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Tue Feb 14 16:22:09 2017 -0500

    6520: Add testcase using sinfo to set crunch_worker_state

diff --git a/services/nodemanager/arvnodeman/nodelist.py b/services/nodemanager/arvnodeman/nodelist.py
index 6d436be..5b02fde 100644
--- a/services/nodemanager/arvnodeman/nodelist.py
+++ b/services/nodemanager/arvnodeman/nodelist.py
@@ -23,7 +23,7 @@ class ArvadosNodeListMonitorActor(clientactor.RemotePollLoopActor):
         return node['uuid']
 
     def _send_request(self):
-        nodelist = arvados.util.list_all(self._client.nodes)
+        nodelist = arvados.util.list_all(self._client.nodes().list)
 
         # node hostname, state
         sinfo_out = subprocess.check_output(["sinfo", "--noheader", "--format=%n %t"])
diff --git a/services/nodemanager/tests/test_nodelist.py b/services/nodemanager/tests/test_nodelist.py
index 5346e7a..8ceaca6 100644
--- a/services/nodemanager/tests/test_nodelist.py
+++ b/services/nodemanager/tests/test_nodelist.py
@@ -3,6 +3,7 @@
 from __future__ import absolute_import, print_function
 
 import unittest
+import mock
 
 import arvnodeman.nodelist as nodelist
 from . import testutil
@@ -16,13 +17,43 @@ class ArvadosNodeListMonitorActorTestCase(testutil.RemotePollLoopActorTestMixin,
             *args, **kwargs)
         self.client.nodes().list().execute.side_effect = side_effect
 
-    def test_uuid_is_subscription_key(self):
+    @mock.patch("subprocess.check_output")
+    def test_uuid_is_subscription_key(self, sinfo_mock):
+        sinfo_mock.return_value = ""
         node = testutil.arvados_node_mock()
-        self.build_monitor([{'items': [node]}])
+        self.build_monitor([{
+            'items': [node],
+            'items_available': 1,
+            'offset': 0
+        }, {
+            'items': [],
+            'items_available': 1,
+            'offset': 1
+        }])
         self.monitor.subscribe_to(node['uuid'],
                                   self.subscriber).get(self.TIMEOUT)
         self.stop_proxy(self.monitor)
         self.subscriber.assert_called_with(node)
+        self.assertEqual("down", node["crunch_worker_state"])
+
+    @mock.patch("subprocess.check_output")
+    def test_update_from_sinfo(self, sinfo_mock):
+        sinfo_mock.return_value = "compute99 alloc"
+        node = testutil.arvados_node_mock()
+        self.build_monitor([{
+            'items': [node],
+            'items_available': 1,
+            'offset': 0
+        }, {
+            'items': [],
+            'items_available': 1,
+            'offset': 1
+        }])
+        self.monitor.subscribe_to(node['uuid'],
+                                  self.subscriber).get(self.TIMEOUT)
+        self.stop_proxy(self.monitor)
+        self.subscriber.assert_called_with(node)
+        self.assertEqual("busy", node["crunch_worker_state"])
 
 
 class CloudNodeListMonitorActorTestCase(testutil.RemotePollLoopActorTestMixin,
@@ -54,4 +85,3 @@ class CloudNodeListMonitorActorTestCase(testutil.RemotePollLoopActorTestMixin,
 
 if __name__ == '__main__':
     unittest.main()
-

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list