diff --git a/deploy/data_placement/src/model/data_placement.py b/deploy/data_placement/src/model/data_placement.py index 9ade6515..c5f9d6dc 100644 --- a/deploy/data_placement/src/model/data_placement.py +++ b/deploy/data_placement/src/model/data_placement.py @@ -252,9 +252,10 @@ def enough_disks_assigned_to_each_group(model, group): def calc_peer_recovery_traffic(model, disk, peer): if self.qlinearize: - return po.quicksum(model.disk_in_same_group[disk,peer,group] for group in model.groups) + traffic = po.quicksum(model.disk_in_same_group[disk,peer,group] for group in model.groups) else: - return po.quicksum(calc_disk_in_same_group(model, disk, peer, group) for group in model.groups) + traffic = po.quicksum(calc_disk_in_same_group(model, disk, peer, group) for group in model.groups) + return traffic * self.recovery_traffic_factor / (self.group_size - 1) def peer_recovery_traffic_upper_bound(model, disk, peer): if self.balanced_incomplete_block_design: diff --git a/deploy/data_placement/test/test_model.py b/deploy/data_placement/test/test_model.py index 4a484538..2422c698 100644 --- a/deploy/data_placement/test/test_model.py +++ b/deploy/data_placement/test/test_model.py @@ -71,6 +71,19 @@ def test_solve_placement_model_v25(chain_table_type, num_nodes, group_size): ) model.run(pyomo_solver="appsi_highs", max_timelimit=30, auto_relax=True) +@pytest.mark.skipif(importlib.util.find_spec("highspy") is None, reason="cannot find solver") +def test_solve_chain_replication_bibd_with_highs(tmp_path): + model = DataPlacementModel( + chain_table_type="CR", + num_nodes=4, + num_targets_per_disk=3, + group_size=3, + bibd_only=True, + qlinearize=True, + relax_lb=0, + ) + model.solve(pyomo_solver="appsi_highs", output_path=str(tmp_path)) + @pytest.mark.parametrize('placement_params', placement_params) @pytest.mark.skipif(importlib.util.find_spec("highspy") is None, reason="cannot find solver") def test_solve_rebalance_model(placement_params):