Loading src/common/tools/grpc/Constraints.py +56 −3 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ import json from typing import Any, Dict, Optional, Tuple from typing import Any, Dict, List, Optional, Tuple from common.proto.context_pb2 import Constraint, EndPointId from common.tools.grpc.Tools import grpc_message_to_json_string Loading Loading @@ -137,7 +137,31 @@ def update_constraint_endpoint_priority(constraints, endpoint_id : EndPointId, p constraint.endpoint_priority.priority = priority return constraint def update_constraint_sla_availability(constraints, num_disjoint_paths : int, all_active : bool) -> Constraint: def update_constraint_sla_capacity(constraints, capacity_gbps : float) -> Constraint: for constraint in constraints: if constraint.WhichOneof('constraint') != 'sla_capacity': continue break # found, end loop else: # not found, add it constraint = constraints.add() # pylint: disable=no-member constraint.sla_capacity.capacity_gbps = capacity_gbps return constraint def update_constraint_sla_latency(constraints, e2e_latency_ms : float) -> Constraint: for constraint in constraints: if constraint.WhichOneof('constraint') != 'sla_latency': continue break # found, end loop else: # not found, add it constraint = constraints.add() # pylint: disable=no-member constraint.sla_latency.e2e_latency_ms = e2e_latency_ms return constraint def update_constraint_sla_availability( constraints, num_disjoint_paths : int, all_active : bool, availability : float ) -> Constraint: for constraint in constraints: if constraint.WhichOneof('constraint') != 'sla_availability': continue break # found, end loop Loading @@ -147,8 +171,21 @@ def update_constraint_sla_availability(constraints, num_disjoint_paths : int, al constraint.sla_availability.num_disjoint_paths = num_disjoint_paths constraint.sla_availability.all_active = all_active constraint.sla_availability.availability = availability return constraint def update_constraint_sla_isolation(constraints, isolation_levels : List[int]) -> Constraint: for constraint in constraints: if constraint.WhichOneof('constraint') != 'sla_isolation': continue break # found, end loop else: # not found, add it constraint = constraints.add() # pylint: disable=no-member for isolation_level in isolation_levels: if isolation_level in constraint.sla_isolation.isolation_level: continue constraint.sla_isolation.isolation_level.append(isolation_level) return constraint def copy_constraints(source_constraints, target_constraints): for source_constraint in source_constraints: Loading Loading @@ -189,11 +226,27 @@ def copy_constraints(source_constraints, target_constraints): priority = source_constraint.endpoint_priority.priority update_constraint_endpoint_priority(target_constraints, endpoint_id, priority) elif constraint_kind == 'sla_capacity': sla_capacity = source_constraint.sla_capacity capacity_gbps = sla_capacity.capacity_gbps update_constraint_sla_capacity(target_constraints, capacity_gbps) elif constraint_kind == 'sla_latency': sla_latency = source_constraint.sla_latency e2e_latency_ms = sla_latency.e2e_latency_ms update_constraint_sla_latency(target_constraints, e2e_latency_ms) elif constraint_kind == 'sla_availability': sla_availability = source_constraint.sla_availability num_disjoint_paths = sla_availability.num_disjoint_paths all_active = sla_availability.all_active update_constraint_sla_availability(target_constraints, num_disjoint_paths, all_active) availability = sla_availability.availability update_constraint_sla_availability(target_constraints, num_disjoint_paths, all_active, availability) elif constraint_kind == 'sla_isolation': sla_isolation = source_constraint.sla_isolation isolation_levels = sla_isolation.isolation_level update_constraint_sla_isolation(target_constraints, isolation_levels) else: raise NotImplementedError('Constraint({:s})'.format(grpc_message_to_json_string(source_constraint))) Loading
src/common/tools/grpc/Constraints.py +56 −3 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ import json from typing import Any, Dict, Optional, Tuple from typing import Any, Dict, List, Optional, Tuple from common.proto.context_pb2 import Constraint, EndPointId from common.tools.grpc.Tools import grpc_message_to_json_string Loading Loading @@ -137,7 +137,31 @@ def update_constraint_endpoint_priority(constraints, endpoint_id : EndPointId, p constraint.endpoint_priority.priority = priority return constraint def update_constraint_sla_availability(constraints, num_disjoint_paths : int, all_active : bool) -> Constraint: def update_constraint_sla_capacity(constraints, capacity_gbps : float) -> Constraint: for constraint in constraints: if constraint.WhichOneof('constraint') != 'sla_capacity': continue break # found, end loop else: # not found, add it constraint = constraints.add() # pylint: disable=no-member constraint.sla_capacity.capacity_gbps = capacity_gbps return constraint def update_constraint_sla_latency(constraints, e2e_latency_ms : float) -> Constraint: for constraint in constraints: if constraint.WhichOneof('constraint') != 'sla_latency': continue break # found, end loop else: # not found, add it constraint = constraints.add() # pylint: disable=no-member constraint.sla_latency.e2e_latency_ms = e2e_latency_ms return constraint def update_constraint_sla_availability( constraints, num_disjoint_paths : int, all_active : bool, availability : float ) -> Constraint: for constraint in constraints: if constraint.WhichOneof('constraint') != 'sla_availability': continue break # found, end loop Loading @@ -147,8 +171,21 @@ def update_constraint_sla_availability(constraints, num_disjoint_paths : int, al constraint.sla_availability.num_disjoint_paths = num_disjoint_paths constraint.sla_availability.all_active = all_active constraint.sla_availability.availability = availability return constraint def update_constraint_sla_isolation(constraints, isolation_levels : List[int]) -> Constraint: for constraint in constraints: if constraint.WhichOneof('constraint') != 'sla_isolation': continue break # found, end loop else: # not found, add it constraint = constraints.add() # pylint: disable=no-member for isolation_level in isolation_levels: if isolation_level in constraint.sla_isolation.isolation_level: continue constraint.sla_isolation.isolation_level.append(isolation_level) return constraint def copy_constraints(source_constraints, target_constraints): for source_constraint in source_constraints: Loading Loading @@ -189,11 +226,27 @@ def copy_constraints(source_constraints, target_constraints): priority = source_constraint.endpoint_priority.priority update_constraint_endpoint_priority(target_constraints, endpoint_id, priority) elif constraint_kind == 'sla_capacity': sla_capacity = source_constraint.sla_capacity capacity_gbps = sla_capacity.capacity_gbps update_constraint_sla_capacity(target_constraints, capacity_gbps) elif constraint_kind == 'sla_latency': sla_latency = source_constraint.sla_latency e2e_latency_ms = sla_latency.e2e_latency_ms update_constraint_sla_latency(target_constraints, e2e_latency_ms) elif constraint_kind == 'sla_availability': sla_availability = source_constraint.sla_availability num_disjoint_paths = sla_availability.num_disjoint_paths all_active = sla_availability.all_active update_constraint_sla_availability(target_constraints, num_disjoint_paths, all_active) availability = sla_availability.availability update_constraint_sla_availability(target_constraints, num_disjoint_paths, all_active, availability) elif constraint_kind == 'sla_isolation': sla_isolation = source_constraint.sla_isolation isolation_levels = sla_isolation.isolation_level update_constraint_sla_isolation(target_constraints, isolation_levels) else: raise NotImplementedError('Constraint({:s})'.format(grpc_message_to_json_string(source_constraint)))