def scaling_down_demand()

in src/hpc/autoscale/example/readme.py [0:0]


def scaling_down_demand() -> None:
    """
    Scale-up with 50 ncpus, then scale-down to 25 ncpu
    """
    columns = ["name", "job_ids", "required", "/ncpus"]

    @withcontext
    def scale_up() -> DemandCalculator:
        dcalc = new_demand_calculator(CONFIG)

        dcalc.add_job(
            Job("tc-100", {"node.nodearray": "htc", "ncpus": 1}, iterations=50)
        )

        demand_result = dcalc.finish()

        if not DRY_RUN:
            dcalc.bootup()

        print_demand(columns, demand_result)

        dcalc.node_history.conn.close()

        return dcalc

    @withcontext
    def scale_down(dcalc: typing.Optional[DemandCalculator] = None) -> None:
        dcalc = dcalc or new_demand_calculator(CONFIG)
        dcalc.add_job(
            Job("tc-50", {"node.nodearray": "htc", "ncpus": 1}, iterations=25)
        )

        demand_result = dcalc.finish()

        if not DRY_RUN:
            dcalc.bootup()

        print_demand(columns, demand_result)

        print(
            "The following nodes can be shutdown: {}".format(
                ",".join([n.name for n in demand_result.unmatched_nodes])
            )
        )

    scaleup_dcalc = scale_up()

    if DRY_RUN:
        scale_down(clone_dcalc(scaleup_dcalc))
    else:
        scale_down()