X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/3950ffc9481c25262f2db2b08a0f74664c433734..2c68e941a15384cecb0e3b3df6def6c3e84d0a71:/services/nodemanager/arvnodeman/jobqueue.py diff --git a/services/nodemanager/arvnodeman/jobqueue.py b/services/nodemanager/arvnodeman/jobqueue.py index 6ca28e6239..6c7a93466c 100644 --- a/services/nodemanager/arvnodeman/jobqueue.py +++ b/services/nodemanager/arvnodeman/jobqueue.py @@ -24,6 +24,26 @@ class ServerCalculator(object): that would best satisfy the jobs, choosing the cheapest size that satisfies each job, and ignoring jobs that can't be satisfied. """ + class InvalidCloudSize(object): + """ + Dummy CloudSizeWrapper-like class, to be used when a cloud node doesn't + have a recognizable arvados_node_size tag. + """ + def __init__(self): + self.id = 'invalid' + self.name = 'invalid' + self.ram = 0 + self.disk = 0 + self.scratch = 0 + self.cores = 0 + self.bandwidth = 0 + self.price = 9999999 + self.preemptable = False + self.extra = {} + + def meets_constraints(self, **kwargs): + return False + class CloudSizeWrapper(object): def __init__(self, real_size, node_mem_scaling, **kwargs): @@ -39,8 +59,8 @@ class ServerCalculator(object): self.scratch = self.disk * 1000 self.ram = int(self.ram * node_mem_scaling) self.preemptable = False - self.instance_type = None for name, override in kwargs.iteritems(): + if name == 'instance_type': continue if not hasattr(self, name): raise ValueError("unrecognized size field '%s'" % (name,)) setattr(self, name, override) @@ -119,7 +139,7 @@ class ServerCalculator(object): for s in self.cloud_sizes: if s.id == sizeid: return s - return None + return self.InvalidCloudSize() class JobQueueMonitorActor(clientactor.RemotePollLoopActor): @@ -228,5 +248,5 @@ class JobQueueMonitorActor(clientactor.RemotePollLoopActor): job_uuid, error) self._logger.debug("Calculated wishlist: %s", - ', '.join(s.name for s in server_list) or "(empty)") + ', '.join("%s (preemptable: %s)" % (s.name, s.preemptable) for s in server_list) or "(empty)") return super(JobQueueMonitorActor, self)._got_response(server_list)