diff --git a/src/service/service/ServiceServiceServicerImpl.py b/src/service/service/ServiceServiceServicerImpl.py index 2a6f881523069680a30edc467834c1c3d7817080..f7b2c74b0604ffdc358edb4728ae31f13e6dd06a 100644 --- a/src/service/service/ServiceServiceServicerImpl.py +++ b/src/service/service/ServiceServiceServicerImpl.py @@ -117,6 +117,28 @@ class ServiceServiceServicerImpl(ServiceServiceServicer): service.service_type = request.service_type # pylint: disable=no-member service.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_PLANNED # pylint: disable=no-member + if service.service_type == ServiceTypeEnum.SERVICETYPE_TE: + # TE service: + context_client.SetService(request) + + te_service_client = TEServiceClient() + service_status = te_service_client.RequestLSP(service) + + if service_status.service_status == ServiceStatusEnum.SERVICESTATUS_ACTIVE: + _service : Optional[Service] = get_service_by_id( + context_client, request.service_id, rw_copy=True, + include_config_rules=False, include_constraints=False, include_endpoint_ids=False) + _service.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_ACTIVE + service_id = context_client.SetService(_service) + return service_id + else: + MSG = 'RequestLSP for Service({:s}) returned ServiceStatus({:s})' + context_uuid = request.service_id.context_id.context_uuid.uuid + service_uuid = request.service_id.service_uuid.uuid + service_key = '{:s}/{:s}'.format(context_uuid, service_uuid) + str_service_status = ServiceStatusEnum.Name(service_status.service_status) + raise Exception(MSG.format(service_key, str_service_status)) + del service.service_endpoint_ids[:] # pylint: disable=no-member for endpoint_id in request.service_endpoint_ids: service.service_endpoint_ids.add().CopyFrom(endpoint_id) # pylint: disable=no-member @@ -169,42 +191,14 @@ class ServiceServiceServicerImpl(ServiceServiceServicer): context_client, service_id_with_uuids, rw_copy=False, include_config_rules=True, include_constraints=True, include_endpoint_ids=True) - if service.service_type == ServiceTypeEnum.SERVICETYPE_TE: - # TE service: - te_service_client = TEServiceClient() - - # Note: TE should update the service in Context. - # By now we update it manually for debugging purposes - service = Service() - service.CopyFrom(request) - service.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_PLANNED - context_client.SetService(request) - - service_status = te_service_client.RequestLSP(service) - - if service_status.service_status == ServiceStatusEnum.SERVICESTATUS_ACTIVE: - _service : Optional[Service] = get_service(context_client, request.service_id) - service = Service() - service.CopyFrom(_service) - service.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_ACTIVE - context_client.SetService(service) - else: - MSG = 'RequestLSP for Service({:s}) returned ServiceStatus({:s})' - context_uuid = request.service_id.context_id.context_uuid.uuid - service_uuid = request.service_id.service_uuid.uuid - service_key = '{:s}/{:s}'.format(context_uuid, service_uuid) - str_service_status = ServiceStatusEnum.Name(service_status.service_status) - raise Exception(MSG.format(service_key, str_service_status)) - else: - # Normal service: - num_disjoint_paths = None - for constraint in request.service_constraints: - if constraint.WhichOneof('constraint') == 'sla_availability': - num_disjoint_paths = constraint.sla_availability.num_disjoint_paths - break + num_disjoint_paths = None + for constraint in request.service_constraints: + if constraint.WhichOneof('constraint') == 'sla_availability': + num_disjoint_paths = constraint.sla_availability.num_disjoint_paths + break - num_disjoint_paths = 1 if num_disjoint_paths is None or num_disjoint_paths == 0 else num_disjoint_paths - num_expected_endpoints = num_disjoint_paths * 2 + num_disjoint_paths = 1 if num_disjoint_paths is None or num_disjoint_paths == 0 else num_disjoint_paths + num_expected_endpoints = num_disjoint_paths * 2 tasks_scheduler = TasksScheduler(self.service_handler_factory) if len(service_with_uuids.service_endpoint_ids) >= num_expected_endpoints: @@ -253,15 +247,15 @@ class ServiceServiceServicerImpl(ServiceServiceServicer): te_service_client = TEServiceClient() te_service_client.DeleteLSP(request) context_client.RemoveService(request) - else: - # Normal service - # Feed TaskScheduler with this service and the sub-services and sub-connections related to this service. - # TaskScheduler identifies inter-dependencies among them and produces a schedule of tasks (an ordered list of - # tasks to be executed) to implement the requested delete operation. - tasks_scheduler = TasksScheduler(self.service_handler_factory) - tasks_scheduler.compose_from_service(service, is_delete=True) - tasks_scheduler.execute_all() + return Empty() + # Normal service + # Feed TaskScheduler with this service and the sub-services and sub-connections related to this service. + # TaskScheduler identifies inter-dependencies among them and produces a schedule of tasks (an ordered list of + # tasks to be executed) to implement the requested delete operation. + tasks_scheduler = TasksScheduler(self.service_handler_factory) + tasks_scheduler.compose_from_service(service, is_delete=True) + tasks_scheduler.execute_all() return Empty() @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)