7478: On EC2 driver ask for a spot instance when needed.
authorLucas Di Pentima <ldipentima@veritasgenetics.com>
Fri, 25 May 2018 14:10:00 +0000 (11:10 -0300)
committerLucas Di Pentima <ldipentima@veritasgenetics.com>
Fri, 25 May 2018 14:10:00 +0000 (11:10 -0300)
Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <ldipentima@veritasgenetics.com>

services/nodemanager/arvnodeman/computenode/driver/__init__.py
services/nodemanager/arvnodeman/computenode/driver/ec2.py
services/nodemanager/arvnodeman/jobqueue.py

index 7ed7435553647fdc55958337e6d2461345c4098d..9e38d13eb7f4788d8af485a7e5b4b6589c9f324c 100644 (file)
@@ -174,7 +174,7 @@ class BaseComputeNodeDriver(RetryMixin):
         try:
             kwargs = self.create_kwargs.copy()
             kwargs.update(self.arvados_create_kwargs(size, arvados_node))
-            kwargs['size'] = size
+            kwargs['size'] = size.real
             return self.real.create_node(**kwargs)
         except CLOUD_ERRORS as create_error:
             # Workaround for bug #6702: sometimes the create node request
index 9300645c38f47b74d780e605d32e37134df0c15a..1442a1245b2fa795fec159985fc3332c70116196 100644 (file)
@@ -91,6 +91,9 @@ class ComputeNodeDriver(BaseComputeNodeDriver):
                     "VolumeSize": volsize,
                     "VolumeType": "gp2"
                 }}]
+        if size.preemptable:
+            # Request a Spot instance for this node
+            kw['ex_spot_market'] = True
         return kw
 
     def sync_node(self, cloud_node, arvados_node):
index 8cba1210c8b43f9d58c1f6a1b71e166d5d246e01..6ca28e62397384bd853583ecab1f25de52dbbc2d 100644 (file)
@@ -105,7 +105,7 @@ class ServerCalculator(object):
                     "Job's min_nodes constraint is greater than the configured "
                     "max_nodes (%d)" % self.max_nodes)
             elif (want_count*cloud_size.price <= self.max_price):
-                servers.extend([cloud_size.real] * want_count)
+                servers.extend([cloud_size] * want_count)
             else:
                 unsatisfiable_jobs[job['uuid']] = (
                     "Job's price (%d) is above system's max_price "