[ARVADOS] updated: d48dda497ae0c4ef85f68f6d48434bca59b84c65

git at public.curoverse.com git at public.curoverse.com
Wed Nov 18 16:52:59 EST 2015


Summary of changes:
 apps/workbench/app/views/application/404.html.erb  |   7 +-
 .../app/views/application/_report_error.html.erb   |  46 ++--
 .../test/controllers/projects_controller_test.rb   |   2 +-
 sdk/cli/bin/crunch-job                             |   3 +
 sdk/python/arvados/keep.py                         |  50 +++--
 sdk/python/tests/keepstub.py                       |  69 +++++-
 sdk/python/tests/test_keep_client.py               | 139 +++++++++---
 services/nodemanager/arvnodeman/config.py          |   1 +
 services/nodemanager/arvnodeman/daemon.py          | 124 +++++++----
 services/nodemanager/arvnodeman/jobqueue.py        |   5 +-
 services/nodemanager/arvnodeman/launcher.py        |   8 +-
 services/nodemanager/doc/azure.example.cfg         |  35 ++-
 services/nodemanager/doc/ec2.example.cfg           |  28 ++-
 services/nodemanager/doc/gce.example.cfg           |  30 ++-
 services/nodemanager/tests/test_daemon.py          | 239 +++++++++++++++++----
 services/nodemanager/tests/test_jobqueue.py        |  50 ++++-
 services/nodemanager/tests/testutil.py             |  24 ++-
 17 files changed, 666 insertions(+), 194 deletions(-)

  discards  3c02421cb38ec920f8a11b84f4f0b7679f0b0bdb (commit)
       via  d48dda497ae0c4ef85f68f6d48434bca59b84c65 (commit)
       via  58692c916bb6dfe2997838ca4147109d9410c86a (commit)
       via  99ce6a94ab4b6df30f727c6d07039aa55c2bad32 (commit)
       via  b2ca3a093f36370719d4a6e89ba46a45111f4f63 (commit)
       via  55e78d1096d8a76b77911bcb1561412cda7ffb8a (commit)
       via  d01d6bdf901b49e8856e199a131fb263f98b370e (commit)
       via  4c5e5f9070e4e0fd9b07757c546b3bae48f2b664 (commit)
       via  84260dab5182907cae91849acd652c138c2d5095 (commit)
       via  e9c78ef7855e7ae263fe461e069c89ff7fc0b798 (commit)
       via  714c555bda26a6a27fad7caef382d1d6705ad215 (commit)
       via  ba9ea75ee6d6322f5d2a9da0b1c01c2738c0927d (commit)
       via  05c4cc66de22d6c4071af69d902f8864b9f2907d (commit)
       via  f16505d89d60d3bd5abc04762712f4ddf78e39fe (commit)
       via  f684cda0d2a332f1d2054e7ac8e9de3cb67e23a9 (commit)
       via  1ad098e2521d57ba6d66d0a0d9dfffab76061924 (commit)
       via  80d30b6a1662e03d56d33f7b29a211d0b3413e2c (commit)
       via  6c8cf507184707e1529ef98ffd98269835a39243 (commit)

This update added new revisions after undoing existing revisions.  That is
to say, the old revision is not a strict subset of the new revision.  This
situation occurs when you --force push a change and generate a repository
containing something like this:

 * -- * -- B -- O -- O -- O (3c02421cb38ec920f8a11b84f4f0b7679f0b0bdb)
            \
             N -- N -- N (d48dda497ae0c4ef85f68f6d48434bca59b84c65)

When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.

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 d48dda497ae0c4ef85f68f6d48434bca59b84c65
Author: Tom Clegg <tom at curoverse.com>
Date:   Fri Nov 13 16:47:36 2015 -0500

    7711: Store cloud node size id and price in properties of Arvados node record.

diff --git a/services/nodemanager/arvnodeman/computenode/dispatch/__init__.py b/services/nodemanager/arvnodeman/computenode/dispatch/__init__.py
index 3c70877..3a548e2 100644
--- a/services/nodemanager/arvnodeman/computenode/dispatch/__init__.py
+++ b/services/nodemanager/arvnodeman/computenode/dispatch/__init__.py
@@ -88,6 +88,7 @@ class ComputeNodeStateChangeBase(config.actor_class):
                   'slot_number': None,
                   'first_ping_at': None,
                   'last_ping_at': None,
+                  'properties': {},
                   'info': {'ec2_instance_id': None,
                            'last_action': explanation}},
             ).execute()
@@ -134,6 +135,19 @@ class ComputeNodeSetupActor(ComputeNodeStateChangeBase):
         self.cloud_node = self._cloud.create_node(self.cloud_size,
                                                   self.arvados_node)
         self._logger.info("Cloud node %s created.", self.cloud_node.id)
+        self._later.update_arvados_node_properties()
+
+    @ComputeNodeStateChangeBase._retry(config.ARVADOS_ERRORS)
+    def update_arvados_node_properties(self):
+        self.arvados_node['properties']['cloud_node'] = {
+            'size': self.cloud_size.id,
+            'price': self.cloud_size.price,
+        }
+        self.arvados_node = self._arvados.nodes().update(
+            uuid=self.arvados_node['uuid'],
+            body={'properties': self.arvados_node['properties']},
+        ).execute()
+        self._logger.info("%s updated properties.", self.arvados_node['uuid'])
         self._later.post_create()
 
     @ComputeNodeStateChangeBase._retry()
diff --git a/services/nodemanager/tests/test_computenode_dispatch.py b/services/nodemanager/tests/test_computenode_dispatch.py
index 0bdb2cb..62af898 100644
--- a/services/nodemanager/tests/test_computenode_dispatch.py
+++ b/services/nodemanager/tests/test_computenode_dispatch.py
@@ -32,19 +32,34 @@ class ComputeNodeSetupActorTestCase(testutil.ActorTestMixin, unittest.TestCase):
             self.timer, self.api_client, self.cloud_client,
             testutil.MockSize(1), arv_node).proxy()
 
+    def assert_node_properties_updated(self, uuid=None,
+                                       size=testutil.MockSize(1)):
+        self.api_client.nodes().update.assert_any_call(
+            uuid=(uuid or self.arvados_effect[-1]['uuid']),
+            body={
+                'properties': {
+                    'cloud_node': {
+                        'size': size.id,
+                        'price': size.price}}})
+
     def test_creation_without_arvados_node(self):
+        self.make_mocks()
         self.make_actor()
         self.assertEqual(self.arvados_effect[-1],
                          self.setup_actor.arvados_node.get(self.TIMEOUT))
-        self.assertTrue(self.api_client.nodes().create().execute.called)
+        self.assertEqual(1, self.api_client.nodes().create().execute.call_count)
+        self.assertEqual(1, self.api_client.nodes().update().execute.call_count)
+        self.assert_node_properties_updated()
         self.assertEqual(self.cloud_client.create_node(),
                          self.setup_actor.cloud_node.get(self.TIMEOUT))
 
     def test_creation_with_arvados_node(self):
+        self.make_mocks(arvados_effect=[testutil.arvados_node_mock()]*2)
         self.make_actor(testutil.arvados_node_mock())
         self.assertEqual(self.arvados_effect[-1],
                          self.setup_actor.arvados_node.get(self.TIMEOUT))
-        self.assertTrue(self.api_client.nodes().update().execute.called)
+        self.assert_node_properties_updated()
+        self.assertEqual(2, self.api_client.nodes().update().execute.call_count)
         self.assertEqual(self.cloud_client.create_node(),
                          self.setup_actor.cloud_node.get(self.TIMEOUT))
 
@@ -85,6 +100,7 @@ class ComputeNodeSetupActorTestCase(testutil.ActorTestMixin, unittest.TestCase):
             self.setup_actor.actor_ref.actor_stopped.wait(self.TIMEOUT))
 
     def test_no_stop_when_cloud_node(self):
+        self.make_mocks()
         self.make_actor()
         self.wait_for_assignment(self.setup_actor, 'cloud_node')
         self.assertFalse(
@@ -98,13 +114,15 @@ class ComputeNodeSetupActorTestCase(testutil.ActorTestMixin, unittest.TestCase):
         self.make_actor()
         subscriber = mock.Mock(name='subscriber_mock')
         self.setup_actor.subscribe(subscriber)
-        self.api_client.nodes().create().execute.side_effect = [
-            testutil.arvados_node_mock()]
+        retry_resp = [testutil.arvados_node_mock()]
+        self.api_client.nodes().create().execute.side_effect = retry_resp
+        self.api_client.nodes().update().execute.side_effect = retry_resp
         self.wait_for_assignment(self.setup_actor, 'cloud_node')
         self.assertEqual(self.setup_actor.actor_ref.actor_urn,
                          subscriber.call_args[0][0].actor_ref.actor_urn)
 
     def test_late_subscribe(self):
+        self.make_mocks()
         self.make_actor()
         subscriber = mock.Mock(name='subscriber_mock')
         self.wait_for_assignment(self.setup_actor, 'cloud_node')
diff --git a/services/nodemanager/tests/testutil.py b/services/nodemanager/tests/testutil.py
index aeb9768..e543c28 100644
--- a/services/nodemanager/tests/testutil.py
+++ b/services/nodemanager/tests/testutil.py
@@ -30,6 +30,7 @@ def arvados_node_mock(node_num=99, job_uuid=None, age=-1, **kwargs):
             'ip_address': ip_address_mock(node_num),
             'job_uuid': job_uuid,
             'crunch_worker_state': crunch_worker_state,
+            'properties': {},
             'info': {'ping_secret': 'defaulttestsecret'}}
     node.update(kwargs)
     return node

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


hooks/post-receive
-- 




More information about the arvados-commits mailing list