def update_scheduler_nodes()

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)