diff --git a/src/service/service/ServiceServiceServicerImpl.py b/src/service/service/ServiceServiceServicerImpl.py index 0b2e0760161c109a2ba6a5feecc931e8bcf5c14f..6531376b84732b1ec80e335cfc6cd816be944b0a 100644 --- a/src/service/service/ServiceServiceServicerImpl.py +++ b/src/service/service/ServiceServiceServicerImpl.py @@ -19,12 +19,12 @@ from common.method_wrappers.ServiceExceptions import AlreadyExistsException, Inv from common.proto.context_pb2 import Empty, Service, ServiceId, ServiceStatusEnum, ServiceTypeEnum from common.proto.pathcomp_pb2 import PathCompRequest from common.proto.service_pb2_grpc import ServiceServiceServicer +from common.tools.context_queries.Service import get_service_by_id from common.tools.grpc.Tools import grpc_message_to_json, grpc_message_to_json_string from context.client.ContextClient import ContextClient from pathcomp.frontend.client.PathCompClient import PathCompClient from .service_handler_api.ServiceHandlerFactory import ServiceHandlerFactory from .task_scheduler.TaskScheduler import TasksScheduler -from .tools.ContextGetters import get_service LOGGER = logging.getLogger(__name__) @@ -69,7 +69,9 @@ class ServiceServiceServicerImpl(ServiceServiceServicer): # check that service does not exist context_client = ContextClient() - current_service = get_service(context_client, request.service_id) + current_service = get_service_by_id( + context_client, request.service_id, rw_copy=False, + include_config_rules=False, include_constraints=False, include_endpoint_ids=False) if current_service is not None: context_uuid = request.service_id.context_id.context_uuid.uuid service_uuid = request.service_id.service_uuid.uuid @@ -86,7 +88,9 @@ class ServiceServiceServicerImpl(ServiceServiceServicer): # Set service status to "SERVICESTATUS_PLANNED" to ensure rest of components are aware the service is # being modified. context_client = ContextClient() - _service : Optional[Service] = get_service(context_client, request.service_id) + _service : Optional[Service] = get_service_by_id( + context_client, request.service_id, rw_copy=False, + include_config_rules=False, include_constraints=False, include_endpoint_ids=False) service = Service() service.CopyFrom(request if _service is None else _service) if service.service_type == ServiceTypeEnum.SERVICETYPE_UNKNOWN: # pylint: disable=no-member @@ -106,7 +110,11 @@ class ServiceServiceServicerImpl(ServiceServiceServicer): service.service_config.config_rules.add().CopyFrom(config_rule) # pylint: disable=no-member service_id_with_uuids = context_client.SetService(service) - service_with_uuids = context_client.GetService(service_id_with_uuids) + + # PathComp requires endpoints, constraints and config rules + service_with_uuids = get_service_by_id( + context_client, service_id_with_uuids, rw_copy=False, + include_config_rules=True, include_constraints=True, include_endpoint_ids=True) num_disjoint_paths = 0 for constraint in request.service_constraints: @@ -147,10 +155,8 @@ class ServiceServiceServicerImpl(ServiceServiceServicer): # Set service status to "SERVICESTATUS_PENDING_REMOVAL" to ensure rest of components are aware the service is # being modified. - _service : Optional[Service] = get_service(context_client, request) - if _service is None: raise Exception('Service({:s}) not found'.format(grpc_message_to_json_string(request))) - service = Service() - service.CopyFrom(_service) + service : Optional[Service] = get_service_by_id(context_client, request, rw_copy=True) + if service is None: raise Exception('Service({:s}) not found'.format(grpc_message_to_json_string(request))) # pylint: disable=no-member service.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_PENDING_REMOVAL context_client.SetService(service) diff --git a/src/service/service/task_scheduler/TaskExecutor.py b/src/service/service/task_scheduler/TaskExecutor.py index 3d157e3145d4b195c0251a4ab79f710a38726569..96751e83770e1b98df4770cf74bb453f6a0519ef 100644 --- a/src/service/service/task_scheduler/TaskExecutor.py +++ b/src/service/service/task_scheduler/TaskExecutor.py @@ -17,11 +17,13 @@ from enum import Enum from typing import TYPE_CHECKING, Any, Dict, Optional, Union from common.method_wrappers.ServiceExceptions import NotFoundException from common.proto.context_pb2 import Connection, ConnectionId, Device, DeviceId, Service, ServiceId +from common.tools.context_queries.Connection import get_connection_by_id +from common.tools.context_queries.Device import get_device +from common.tools.context_queries.Service import get_service_by_id from common.tools.object_factory.Device import json_device_id from context.client.ContextClient import ContextClient from device.client.DeviceClient import DeviceClient from service.service.service_handler_api.ServiceHandlerFactory import ServiceHandlerFactory, get_service_handler_class -from service.service.tools.ContextGetters import get_connection, get_device, get_service from service.service.tools.ObjectKeys import get_connection_key, get_device_key, get_service_key if TYPE_CHECKING: @@ -72,7 +74,7 @@ class TaskExecutor: connection_key = get_connection_key(connection_id) connection = self._load_grpc_object(CacheableObjectType.CONNECTION, connection_key) if connection is None: - connection = get_connection(self._context_client, connection_id) + connection = get_connection_by_id(self._context_client, connection_id) if connection is None: raise NotFoundException('Connection', connection_key) connection : Connection = self._store_editable_grpc_object( CacheableObjectType.CONNECTION, connection_key, Connection, connection) @@ -94,7 +96,7 @@ class TaskExecutor: device_key = get_device_key(device_id) device = self._load_grpc_object(CacheableObjectType.DEVICE, device_key) if device is None: - device = get_device(self._context_client, device_id) + device = get_device(self._context_client, device_id.device_uuid.uuid) if device is None: raise NotFoundException('Device', device_key) device : Device = self._store_editable_grpc_object( CacheableObjectType.DEVICE, device_key, Device, device) @@ -145,7 +147,7 @@ class TaskExecutor: service_key = get_service_key(service_id) service = self._load_grpc_object(CacheableObjectType.SERVICE, service_key) if service is None: - service = get_service(self._context_client, service_id) + service = get_service_by_id(self._context_client, service_id) if service is None: raise NotFoundException('Service', service_key) service : service = self._store_editable_grpc_object( CacheableObjectType.SERVICE, service_key, Service, service) diff --git a/src/service/service/tools/ContextGetters.py b/src/service/service/tools/ContextGetters.py deleted file mode 100644 index 9b1d6224d1e4201cbc0720e7ce818a86e5ae2042..0000000000000000000000000000000000000000 --- a/src/service/service/tools/ContextGetters.py +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import grpc -from typing import Optional -from common.proto.context_pb2 import Connection, ConnectionId, Device, DeviceId, Service, ServiceId -from context.client.ContextClient import ContextClient - -def get_connection(context_client : ContextClient, connection_id : ConnectionId) -> Optional[Connection]: - try: - connection : Connection = context_client.GetConnection(connection_id) - return connection - except grpc.RpcError as e: - if e.code() != grpc.StatusCode.NOT_FOUND: raise # pylint: disable=no-member - return None - -def get_device(context_client : ContextClient, device_id : DeviceId) -> Optional[Device]: - try: - device : Device = context_client.GetDevice(device_id) - return device - except grpc.RpcError as e: - if e.code() != grpc.StatusCode.NOT_FOUND: raise # pylint: disable=no-member - return None - -def get_service(context_client : ContextClient, service_id : ServiceId) -> Optional[Service]: - try: - service : Service = context_client.GetService(service_id) - return service - except grpc.RpcError as e: - if e.code() != grpc.StatusCode.NOT_FOUND: raise # pylint: disable=no-member - return None