- @Override
- public ListenableFuture<RpcResult<ServiceCreateOutput>> serviceCreate(ServiceCreateInput input) {
- LOG.info("RPC service creation received");
- // Validation
- OperationResult validationResult = ServiceCreateValidation.validateServiceCreateRequest(
- new ServiceInput(input), RpcActions.ServiceCreate);
- if (! validationResult.isSuccess()) {
- LOG.warn("Aborting service create because validation of service create request failed: {}",
- validationResult.getResultMessage());
- return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES,
- validationResult.getResultMessage(), ResponseCodes.RESPONSE_FAILED);
- }
- this.pceListenerImpl.setInput(new ServiceInput(input));
- this.pceListenerImpl.setServiceReconfigure(false);
- this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
- this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
- this.rendererListenerImpl.setServiceInput(new ServiceInput(input));
- LOG.info("Commencing PCE");
- PathComputationRequestOutput output = this.pceServiceWrapper.performPCE(input, true);
- if (output != null) {
- LOG.info("Service compliant, serviceCreate in progress...");
- ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
- return ModelMappingUtils.createCreateServiceReply(input, common.getAckFinalIndicator(),
- common.getResponseMessage(), common.getResponseCode());
- } else {
- return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES,
- "PCE calculation failed", ResponseCodes.RESPONSE_FAILED);
- }
- }
-
- @Override
- public ListenableFuture<RpcResult<ServiceDeleteOutput>> serviceDelete(ServiceDeleteInput input) {
- LOG.info("RPC serviceDelete request received for {}", input.getServiceDeleteReqInfo().getServiceName());
- String message = "";
-
- /*
- * Upon receipt of service-deleteService RPC, service header and sdnc-request
- * header compliancy are verified.
- */
- LOG.info("checking Service Compliancy ...");
- ComplianceCheckResult serviceHandlerCheckResult = ServicehandlerCompliancyCheck.check(
- input.getServiceDeleteReqInfo().getServiceName(),
- input.getSdncRequestHeader(), null, RpcActions.ServiceDelete, false, true);
- if (serviceHandlerCheckResult.hasPassed()) {
- LOG.info("Service compliant !");
- } else {
- LOG.info("Service is not compliant !");
- return ModelMappingUtils
- .createDeleteServiceReply(input, ResponseCodes.FINAL_ACK_YES,
- "Service not compliant !", ResponseCodes.RESPONSE_FAILED);
- }
-
- //Check presence of service to be deleted
- String serviceName = input.getServiceDeleteReqInfo().getServiceName();
- LOG.info("serviceName : {}", serviceName);
- try {
- Optional<Services> service = this.serviceDataStoreOperations.getService(serviceName);
- if (!service.isPresent()) {
- message = "Service '" + serviceName + "' does not exist in datastore";
- LOG.error(message);
- return ModelMappingUtils.createDeleteServiceReply(input, ResponseCodes.FINAL_ACK_YES,
- message, ResponseCodes.RESPONSE_FAILED);
- }
- } catch (NullPointerException e) {
- LOG.error("failed to get service '{}' from datastore : ", serviceName, e);
- message = "Service '" + serviceName + "' does not exist in datastore";
- LOG.error(message);
- return ModelMappingUtils.createDeleteServiceReply(input, ResponseCodes.FINAL_ACK_YES, message,
- ResponseCodes.RESPONSE_FAILED);
- }
- LOG.info("Service '{}' present in datastore !", serviceName);
- this.pceListenerImpl.setInput(new ServiceInput(input));
- this.pceListenerImpl.setServiceReconfigure(false);
- this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
- this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
- this.rendererListenerImpl.setServiceInput(new ServiceInput(input));
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017
- .ServiceDeleteInput serviceDeleteInput = ModelMappingUtils.createServiceDeleteInput(
- new ServiceInput(input));
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017.ServiceDeleteOutput output =
- this.rendererServiceWrapper.performRenderer(serviceDeleteInput,
- ServiceNotificationTypes.ServiceDeleteResult);
- if (output != null) {
- LOG.info("Service present in datastore, service-delete in progress...");
- ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
- return ModelMappingUtils.createDeleteServiceReply(input, common.getAckFinalIndicator(),
- common.getResponseMessage(), common.getResponseCode());
- } else {
- return ModelMappingUtils.createDeleteServiceReply(input, ResponseCodes.FINAL_ACK_YES,
- "Renderer service delete failed !", ResponseCodes.RESPONSE_FAILED);
- }
- }
-
- @Override
- public ListenableFuture<RpcResult<ServiceFeasibilityCheckOutput>> serviceFeasibilityCheck(
- ServiceFeasibilityCheckInput input) {
- LOG.info("RPC service feasibility check received");
- // Validation
- ServiceInput serviceInput = new ServiceInput(input);
- OperationResult validationResult = ServiceCreateValidation.validateServiceCreateRequest(serviceInput,
- RpcActions.ServiceFeasibilityCheck);
- if (! validationResult.isSuccess()) {
- LOG.warn("Aborting service feasibility check because validation of service create request failed: {}",
- validationResult.getResultMessage());
- return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES,
- validationResult.getResultMessage(), ResponseCodes.RESPONSE_FAILED);
- }
- this.pceListenerImpl.setInput(new ServiceInput(input));
- this.pceListenerImpl.setServiceReconfigure(false);
- this.pceListenerImpl.setServiceFeasiblity(true);
- this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
- this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
- this.rendererListenerImpl.setServiceInput(new ServiceInput(input));
- LOG.info("Commencing PCE");
- PathComputationRequestOutput output = this.pceServiceWrapper.performPCE(input, true);
- if (output != null) {
- LOG.info("Service compliant, serviceFeasibilityCheck in progress...");
- ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
- return ModelMappingUtils.createCreateServiceReply(input, common.getAckFinalIndicator(),
- common.getResponseMessage(), common.getResponseCode());
- } else {
- return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES,
- "PCE calculation failed", ResponseCodes.RESPONSE_FAILED);
- }
- }
-
- @Override
- public ListenableFuture<RpcResult<ServiceReconfigureOutput>> serviceReconfigure(ServiceReconfigureInput input) {
- LOG.info("RPC service reconfigure received");
- String message = "";
- Optional<Services> servicesObject = this.serviceDataStoreOperations.getService(input.getServiceName());
- if (servicesObject.isPresent()) {
- LOG.info("Service '{}' is present", input.getServiceName());
- OperationResult validationResult = ServiceCreateValidation
- .validateServiceCreateRequest(new ServiceInput(input), RpcActions.ServiceReconfigure);
- if (!validationResult.isSuccess()) {
- LOG.warn("Aborting service reconfigure because validation of service create request failed: {}",
- validationResult.getResultMessage());
- return ModelMappingUtils.createCreateServiceReply(input, validationResult.getResultMessage(),
- RpcStatus.Failed);
- }
- this.pceListenerImpl.setInput(new ServiceInput(input));
- this.pceListenerImpl.setServiceReconfigure(true);
- this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
- this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
- this.rendererListenerImpl.setServiceInput(new ServiceInput(input));
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017
- .ServiceDeleteInput serviceDeleteInput =
- ModelMappingUtils.createServiceDeleteInput(new ServiceInput(input));
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017
- .ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer(serviceDeleteInput,
- ServiceNotificationTypes.ServiceDeleteResult);
- if (output != null) {
- LOG.info("Service compliant, service reconfigure in progress...");
- ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
- return ModelMappingUtils.createCreateServiceReply(input, common.getResponseMessage(),
- RpcStatus.Successful);
- } else {
- return ModelMappingUtils.createCreateServiceReply(input, "Renderer service delete failed !",
- RpcStatus.Successful);
- }
- } else {
- LOG.error("Service '{}' is not present", input.getServiceName());
- message = "Service '" + input.getServiceName() + "' is not present";
- return ModelMappingUtils.createCreateServiceReply(input, message, RpcStatus.Failed);
- }
- }
-
- @Override
- public ListenableFuture<RpcResult<ServiceRestorationOutput>> serviceRestoration(ServiceRestorationInput input) {
- LOG.info("RPC service restoration received");
- String message = "";
- String serviceName = input.getServiceName();
- Optional<Services> servicesObject = this.serviceDataStoreOperations.getService(serviceName);
- if (servicesObject.isPresent()) {
- Services service = servicesObject.get();
- State state = service.getOperationalState();
- if (state != State.InService) {
- ServiceDeleteInputBuilder deleteInputBldr = new ServiceDeleteInputBuilder();
- DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
- OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
- DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
- deleteInputBldr.setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder()
- .setServiceName(serviceName).setDueDate(datetime)
- .setTailRetention(TailRetention.No).build());
- SdncRequestHeaderBuilder sdncBuilder = new SdncRequestHeaderBuilder();
- sdncBuilder.setNotificationUrl(service.getSdncRequestHeader().getNotificationUrl());
- sdncBuilder.setRequestId(service.getSdncRequestHeader().getRequestId());
- sdncBuilder.setRequestSystemId(service.getSdncRequestHeader().getRequestSystemId());
- sdncBuilder.setRpcAction(RpcActions.ServiceDelete);
- deleteInputBldr.setSdncRequestHeader(sdncBuilder.build());
- ServiceInput serviceInput = new ServiceInput(deleteInputBldr.build());
- serviceInput.setServiceAEnd(service.getServiceAEnd());
- serviceInput.setServiceZEnd(service.getServiceZEnd());
- serviceInput.setConnectionType(service.getConnectionType());
- HardConstraints hardConstraints = service.getHardConstraints();
- if (hardConstraints != null) {
- SoftConstraints softConstraints = service.getSoftConstraints();
- if (softConstraints != null) {
- LOG.info("converting hard constraints to soft constraints ...");
- serviceInput.setSoftConstraints(
- DowngradeConstraints.updateSoftConstraints(hardConstraints, softConstraints));
- serviceInput.setHardConstraints(DowngradeConstraints.downgradeHardConstraints(hardConstraints));
- } else {
- LOG.warn("service '{}' SoftConstraints is not set !", serviceName);
- serviceInput.setSoftConstraints(DowngradeConstraints.convertToSoftConstraints(hardConstraints));
- serviceInput.setHardConstraints(DowngradeConstraints.downgradeHardConstraints(hardConstraints));
- }
- } else {
- LOG.warn("service '{}' HardConstraints is not set !", serviceName);
- }
- this.pceListenerImpl.setInput(serviceInput);
- this.pceListenerImpl.setServiceReconfigure(true);
- this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
- this.rendererListenerImpl.setServiceInput(serviceInput);
- this.rendererListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017
- .ServiceDeleteInput serviceDeleteInput = ModelMappingUtils.createServiceDeleteInput(
- new ServiceInput(deleteInputBldr.build()));
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017
- .ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer(serviceDeleteInput,
- ServiceNotificationTypes.ServiceDeleteResult);
- if (output != null) {
- LOG.info("Service present in datastore, service-restore in progress...");
- ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
- return ModelMappingUtils.createRestoreServiceReply(common.getResponseMessage(),
- RpcStatus.Successful);
- } else {
- return ModelMappingUtils.createRestoreServiceReply("Renderer service delete failed !",
- RpcStatus.Failed);
- }
- } else {
- LOG.error("Service '{}' is in 'inService' state", input.getServiceName());
- message = "Service '" + input.getServiceName() + "' is in 'inService' state";
- return ModelMappingUtils.createRestoreServiceReply(message, RpcStatus.Failed);
- }
- } else {
- LOG.error("Service '{}' is not present", input.getServiceName());
- message = "Service '" + input.getServiceName() + "' is not present";
- return ModelMappingUtils.createRestoreServiceReply(message, RpcStatus.Failed);
- }