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()