Commit 86fc7c5c authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

PathComp component - Frontend:

- Updated to use specific SLA Constraints together with Custom constraints
- Updated related unitary tests
parent 36491867
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -54,13 +54,15 @@ class KDisjointPathAlgorithm(_Algorithm):
            self.services_details.setdefault(service_key, service_details)

            for constraint in service.service_constraints:
                if constraint.WhichOneof('constraint') == 'custom':
                kind = constraint.WhichOneof('constraint')

                if kind == 'custom':
                    constraint_type = constraint.custom.constraint_type
                    if constraint_type not in CUSTOM_CONSTRAINTS: continue
                    constraint_value = constraint.custom.constraint_value
                    constraints[constraint_type] = constraint_value

                if constraint.WhichOneof('constraint') == 'endpoint_location':
                elif kind == 'endpoint_location':
                    endpoint_id = constraint.endpoint_location.endpoint_id
                    device_uuid = endpoint_id.device_id.device_uuid.uuid
                    device_uuid = self.device_name_mapping.get(device_uuid, device_uuid)
@@ -73,7 +75,7 @@ class KDisjointPathAlgorithm(_Algorithm):
                    site_id = constraint.endpoint_location.location.region
                    endpoints.setdefault((device_uuid, endpoint_uuid), dict())['site_id'] = site_id

                if constraint.WhichOneof('constraint') == 'endpoint_priority':
                elif kind == 'endpoint_priority':
                    endpoint_id = constraint.endpoint_priority.endpoint_id
                    device_uuid = endpoint_id.device_id.device_uuid.uuid
                    device_uuid = self.device_name_mapping.get(device_uuid, device_uuid)
@@ -82,9 +84,18 @@ class KDisjointPathAlgorithm(_Algorithm):
                    priority = constraint.endpoint_priority.priority
                    endpoints.setdefault((device_uuid, endpoint_uuid), dict())['priority'] = priority

                elif kind == 'sla_capacity':
                    capacity_gbps = constraint.sla_capacity.capacity_gbps
                    constraints['bandwidth[gbps]'] = str(capacity_gbps)

                elif kind == 'sla_latency':
                    e2e_latency_ms = constraint.sla_latency.e2e_latency_ms
                    constraints['latency[ms]'] = str(e2e_latency_ms)

            # TODO: ensure these constraints are provided in the request
            if 'bandwidth[gbps]' not in constraints: constraints['bandwidth[gbps]'] = '20.0'
            if 'latency[ms]' not in constraints: constraints['latency[ms]'] = '20.0'
            #if 'jitter[us]' not in constraints: constraints['jitter[us]'] = '50.0'

    def get_link_from_endpoint(self, endpoint : Dict) -> Tuple[Dict, Link]:
        device_uuid = endpoint['device_id']
+18 −11
Original line number Diff line number Diff line
@@ -73,17 +73,22 @@ def compose_latency_characteristics(fixed_latency_characteristic : str) -> Dict:
    return {'fixed-latency-characteristic': fixed_latency_characteristic}

def compose_constraint(constraint : Constraint) -> Dict:
    if constraint.WhichOneof('constraint') != 'custom':
        str_constraint = grpc_message_to_json_string(constraint)
        LOGGER.warning('Ignoring unsupported Constraint({:s})'.format(str_constraint))
        return None
    kind = constraint.WhichOneof('constraint')
    if kind == 'custom':
        constraint_type = constraint.custom.constraint_type
    if constraint_type in {'diversity'}:
        if constraint_type in {'bandwidth[gbps]', 'latency[ms]', 'jitter[us]'}:
            constraint_value = constraint.custom.constraint_value
            return {'constraint_type': constraint_type, 'constraint_value': constraint_value}
    elif kind == 'sla_capacity':
        capacity_gbps = constraint.sla_capacity.capacity_gbps
        return {'constraint_type': 'bandwidth[gbps]', 'constraint_value': str(capacity_gbps)}
    elif kind == 'sla_latency':
        e2e_latency_ms = constraint.sla_latency.e2e_latency_ms
        return {'constraint_type': 'latency[ms]', 'constraint_value': str(e2e_latency_ms)}

    str_constraint = grpc_message_to_json_string(constraint)
    LOGGER.warning('Ignoring unsupported Constraint({:s})'.format(str_constraint))
    return None
    constraint_value = constraint.custom.constraint_value
    return {'constraint_type': constraint_type, 'constraint_value': constraint_value}

def compose_device(grpc_device : Device) -> Dict:
    device_uuid = grpc_device.device_id.device_uuid.uuid
@@ -144,6 +149,8 @@ def compose_service(grpc_service : Service) -> Dict:
        constraints.append({'constraint_type': 'bandwidth[gbps]', 'constraint_value': '20.0'})
    if 'latency[ms]' not in constraint_types:
        constraints.append({'constraint_type': 'latency[ms]', 'constraint_value': '20.0'})
    #if 'jitter[us]' not in constraint_types:
    #    constraints.append({'constraint_type': 'jitter[us]', 'constraint_value': '50.0'})

    return {
        'serviceId': service_id,
+3 −3
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@
# limitations under the License.

from common.Constants import DEFAULT_CONTEXT_NAME, DEFAULT_TOPOLOGY_NAME
from common.tools.object_factory.Constraint import json_constraint_custom
from common.tools.object_factory.Constraint import json_constraint_sla_capacity, json_constraint_sla_latency
from common.tools.object_factory.Context import json_context, json_context_id
from common.tools.object_factory.Device import json_device_emulated_packet_router_disabled, json_device_id
from common.tools.object_factory.EndPoint import json_endpoints
@@ -97,8 +97,8 @@ LINK_C2_C3_ID, LINK_C2_C3 = compose_link(DEVICE_C2_ENDPOINTS[1], DEVICE_C3_ENDPO

# ----- Service --------------------------------------------------------------------------------------------------------
SERVICE_A1_B1 = compose_service(DEVICE_A1_ENDPOINTS[2], DEVICE_B1_ENDPOINTS[2], constraints=[
    json_constraint_custom('bandwidth[gbps]', 10.0),
    json_constraint_custom('latency[ms]',     12.0),
    json_constraint_sla_capacity(10.0),
    json_constraint_sla_latency(12.0),
])

# ----- Containers -----------------------------------------------------------------------------------------------------
+3 −3
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@
# limitations under the License.

from common.Constants import DEFAULT_CONTEXT_NAME, DEFAULT_TOPOLOGY_NAME
from common.tools.object_factory.Constraint import json_constraint_custom
from common.tools.object_factory.Constraint import json_constraint_sla_capacity, json_constraint_sla_latency
from common.tools.object_factory.Context import json_context, json_context_id
from common.tools.object_factory.Device import (
    json_device_emulated_connect_rules, json_device_emulated_datacenter_disabled,
@@ -139,8 +139,8 @@ LINK_TNR2_TNR4_ID, LINK_TNR2_TNR4 = compose_link(DEV_TNR2_EPS[4], DEV_TNR4_EPS[4

# ----- Service --------------------------------------------------------------------------------------------------------
SERVICE_DC1GW_DC2GW = compose_service(DEV_DC1GW_EPS[2], DEV_DC2GW_EPS[2], constraints=[
    json_constraint_custom('bandwidth[gbps]', 10.0),
    json_constraint_custom('latency[ms]',     20.0),
    json_constraint_sla_capacity(10.0),
    json_constraint_sla_latency(20.0),
])

# ----- Containers -----------------------------------------------------------------------------------------------------
+3 −3
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@

import uuid
from common.Constants import DEFAULT_CONTEXT_NAME, DEFAULT_TOPOLOGY_NAME
from common.tools.object_factory.Constraint import json_constraint_custom
from common.tools.object_factory.Constraint import json_constraint_sla_capacity, json_constraint_sla_latency
from common.tools.object_factory.Context import json_context, json_context_id
from common.tools.object_factory.Device import (
    json_device_emulated_connect_rules, json_device_emulated_datacenter_disabled,
@@ -149,8 +149,8 @@ LINK_TNR4_TOLS_ID, LINK_TNR4_TOLS = compose_link(DEV_TNR4_EPS[2], DEV_TOLS_EPS[3

# ----- Service --------------------------------------------------------------------------------------------------------
SERVICE_DC1GW_DC2GW = compose_service(DEV_DC1GW_EPS[2], DEV_DC2GW_EPS[2], constraints=[
    json_constraint_custom('bandwidth[gbps]', 10.0),
    json_constraint_custom('latency[ms]',     20.0),
    json_constraint_sla_capacity(10.0),
    json_constraint_sla_latency(20.0),
])

# ----- Containers -----------------------------------------------------------------------------------------------------
Loading