Commit 681e6276 authored by Shayan Hajipour's avatar Shayan Hajipour
Browse files

debug & refactor: ConnectionEntry added as a dependency of the ConnectionEntry

parent 9f1b13b1
Loading
Loading
Loading
Loading
+11 −13
Original line number Diff line number Diff line
@@ -61,9 +61,11 @@ class ConnectionEntry:
    uuid: str = ''
    service_type : ServiceTypeEnum = ServiceTypeEnum.SERVICETYPE_UNKNOWN
    path_hops    : List[Dict] = field(default_factory=list)
    dependencies : List[str] = field(default_factory=list)
    dependencies : List['ConnectionEntry'] = field(default_factory=list)

    def calculate_subservice_uuid(self, main_service_uuid: str) -> None:
        if self.uuid:
            return
        composed_string = main_service_uuid + '-'.join(
            f'{path_hop["device"]}/{path_hop["ingress_ep"]}/{path_hop["egress_ep"]}' for path_hop in self.path_hops
        )
@@ -103,28 +105,25 @@ def convert_explicit_path_hops_to_connections(
            prv_service_type = connection_stack.queue[-1].service_type
            service_type = get_service_type(res_class[1], prv_service_type)
            connection_entry = ConnectionEntry(service_type=service_type, path_hops=[path_hop])
            connection_entry.calculate_subservice_uuid(main_service_uuid)
            connection_stack.put(connection_entry)

            # underlying connection ended
            connection: ConnectionEntry = connection_stack.get()
            connections.append(connection)
            connection_stack.queue[-1].dependencies.append(connection.uuid)
            #connection_stack.queue[-1][2].append(path_hop)
            connection_stack.queue[-1].dependencies.append(connection)
        elif prv_res_class[2] is None and res_class[2] is not None:
            # entering domain of a device controller, create underlying connection
            LOGGER.debug('  entering domain of a device controller, create underlying connection')
            prv_service_type = connection_stack.queue[-1].service_type
            service_type = get_service_type(res_class[1], prv_service_type)
            connection_entry = ConnectionEntry(service_type=service_type, path_hops=[path_hop])
            connection_entry.calculate_subservice_uuid(main_service_uuid)
            connection_stack.put(connection_entry)
        elif prv_res_class[2] is not None and res_class[2] is None:
            # leaving domain of a device controller, terminate underlying connection
            LOGGER.debug('  leaving domain of a device controller, terminate underlying connection')
            connection = connection_stack.get()
            connections.append(connection)
            connection_stack.queue[-1].dependencies.append(connection.uuid)
            connection_stack.queue[-1].dependencies.append(connection)
            connection_stack.queue[-1].path_hops.append(path_hop)
        elif prv_res_class[2] is not None and res_class[2] is not None:
            if prv_res_class[2] == res_class[2]:
@@ -136,12 +135,11 @@ def convert_explicit_path_hops_to_connections(
                LOGGER.debug('  switching to different device controller, chain connections')
                connection = connection_stack.get()
                connections.append(connection)
                connection_stack.queue[-1].dependencies.append(connection.uuid)
                connection_stack.queue[-1].dependencies.append(connection)

                prv_service_type = connection_stack.queue[-1].service_type
                service_type = get_service_type(res_class[1], prv_service_type)
                connection_entry = ConnectionEntry(service_type=service_type, path_hops=[path_hop])
                connection_entry.calculate_subservice_uuid (main_service_uuid)
                connection_stack.put(connection_entry)
        elif prv_res_class[0] is None:
            # path ingress
@@ -154,7 +152,6 @@ def convert_explicit_path_hops_to_connections(
            prv_service_type = connection_stack.queue[-1].service_type
            service_type = get_service_type(res_class[1], prv_service_type)
            connection_entry = ConnectionEntry(service_type=service_type, path_hops=[path_hop])
            connection_entry.calculate_subservice_uuid(main_service_uuid)
            connection_stack.put(connection_entry)
        elif prv_res_class[0] == res_class[0]:
            # same resource group kind
@@ -168,19 +165,18 @@ def convert_explicit_path_hops_to_connections(
                LOGGER.debug('  chain connections')
                connection = connection_stack.get()
                connections.append(connection)
                connection_stack.queue[-1].dependencies.append(connection.uuid)
                connection_stack.queue[-1].dependencies.append(connection)

                prv_service_type = connection_stack.queue[-1].service_type
                service_type = get_service_type(res_class[1], prv_service_type)
                connection_entry = ConnectionEntry(service_type=service_type, path_hops=[path_hop])
                connection_entry.calculate_subservice_uuid(main_service_uuid)
                connection_stack.put(connection_entry)
        elif prv_res_class[0] < res_class[0]:
            # underlying connection ended
            LOGGER.debug('  underlying connection ended')
            connection = connection_stack.get()
            connections.append(connection)
            connection_stack.queue[-1].dependencies.append(connection.uuid)
            connection_stack.queue[-1].dependencies.append(connection)
            connection_stack.queue[-1].path_hops.append(path_hop)
        else:
            raise Exception('Uncontrolled condition')
@@ -193,7 +189,9 @@ def convert_explicit_path_hops_to_connections(
    connections.append(connection_stack.get())
    LOGGER.debug('connections={:s}'.format(str(connections)))
    assert connection_stack.empty()
    return [(c.uuid, c.service_type, c.path_hops, c.dependencies) for c in connections]
    for c in connections:
        c.calculate_subservice_uuid(main_service_uuid)
    return [(c.uuid, c.service_type, c.path_hops, [cd.uuid for cd in c.dependencies]) for c in connections]

def convert_explicit_path_hops_to_plain_connection(
    path_hops : List[Dict], main_service_uuid : str, main_service_type : ServiceTypeEnum