in src/hpc/autoscale/job/demandcalculator.py [0:0]
def update_scheduler_nodes(self, scheduler_nodes: List[SchedulerNode]) -> None:
by_hostname: Dict[str, Node] = partition_single(
self.__scheduler_nodes_queue, lambda n: n.hostname_or_uuid # type: ignore
)
by_node_id: Dict[str, Node] = partition_single(
self.__scheduler_nodes_queue, lambda n: n.delayed_node_id.node_id or n.hostname_or_uuid # type: ignore
)
for new_snode in scheduler_nodes:
if new_snode.hostname not in by_hostname:
by_hostname[new_snode.hostname] = new_snode
self.__scheduler_nodes_queue.push(new_snode)
self.node_mgr.add_unmanaged_nodes([new_snode])
if new_snode.resources.get("ccnodeid"):
ccnodeid = new_snode.resources.get("ccnodeid")
if ccnodeid in by_node_id:
logging.warning(
"%s has a hostname that does not match what is in CycleCloud",
new_snode,
)
else:
logging.warning(
"%s has ccnodeid defined, but no longer exists in CycleCloud",
new_snode,
)
else:
logging.debug(
"Found new node[hostname=%s] that does not exist in CycleCloud",
new_snode.hostname,
)
# TODO inform bucket catalog?
elif new_snode.metadata.get("override_resources", True):
old_snode = by_hostname[new_snode.hostname_or_uuid]
logging.fine(
"Found existing CycleCloud node[hostname=%s]",
new_snode.hostname,
)
old_snode.update(new_snode)
else:
logging.fine(
"Found existing CycleCloud node[hostname=%s], but node.metadata.override_resources=false"
+ " so ignoring the reported resources and only copying metadata",
new_snode.hostname,
)
old_snode = by_hostname[new_snode.hostname_or_uuid]
old_snode.metadata.update(new_snode.metadata)