in src/hpc/autoscale/node/nodemanager.py [0:0]
def apply_default(self, node: Node) -> None:
# obviously we don't want to override anything
if node.resources.get(self.resource_name) is not None:
return
for criteria in self.selection:
if not criteria.satisfied_by_node(node):
return
# it met all of our criteria, so set the default
default_value = self.default_value_function(node)
if default_value is None and not self.allow_none:
logging.fine(
"Ignoring default value None for resource %s", self.resource_name
)
return
if self.modifier and default_value is not None:
if not isinstance(default_value, (float, int, ht.Memory)):
raise RuntimeError(
"Can't modify a default resource if the value is not an int, float or memory expression."
+ "select={} name={} value={} {}={}".format(
self.selection,
self.resource_name,
default_value,
self.modifier,
self.modifier_magnitude,
)
)
assert self.modifier_magnitude
try:
if self.modifier == "add":
default_value = default_value + self.modifier_magnitude # type: ignore
elif self.modifier == "subtract":
default_value = default_value - self.modifier_magnitude # type: ignore
elif self.modifier == "multiply":
default_value = default_value * self.modifier_magnitude # type: ignore
elif self.modifier == "divide":
default_value = default_value / self.modifier_magnitude # type: ignore
elif self.modifier == "divide_floor":
default_value = default_value // self.modifier_magnitude # type: ignore
else:
raise RuntimeError("Unsupported modifier {}".format(self))
except Exception as e:
logging.error(
"Could not modify default value: 'Error={}' select={} name={} value={} {}={}".format(
e,
self.selection,
self.resource_name,
default_value,
self.modifier,
self.modifier_magnitude,
)
)
return
node._resources[self.resource_name] = default_value
node.available[self.resource_name] = default_value