X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=servicehandler%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fservicehandler%2FMappingAndSendingPCRequest.java;h=ff386744190f0f764022a16a80411769ed4ce80f;hb=f635c4d0e4252050154b89d53bd7e658eaf75be8;hp=df9192211f1ada7415bb25bcb7158654ae5b3f18;hpb=8e869851857c216b2513c2bf1adae927737de507;p=transportpce.git diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/MappingAndSendingPCRequest.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/MappingAndSendingPCRequest.java index df9192211..ff3867441 100644 --- a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/MappingAndSendingPCRequest.java +++ b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/MappingAndSendingPCRequest.java @@ -19,54 +19,65 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev161014.ServiceCreateInput; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev161014.ServiceFeasibilityCheckInput; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev161014.ServiceReconfigureInput; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev161014.service.list.Services; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.CancelResourceReserveInput; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.CancelResourceReserveInputBuilder; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.CancelResourceReserveOutput; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.CancelResourceReserveOutputBuilder; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.PathComputationRequestInput; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.PathComputationRequestInputBuilder; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.PathComputationRequestOutput; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.PathComputationRequestOutputBuilder; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.StubpceService; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.path.computation.request.input.ServiceAEnd; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.path.computation.request.input.ServiceAEndBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.path.computation.request.input.ServiceZEnd; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.path.computation.request.input.ServiceZEndBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.RpcActions; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.ServiceEndpoint; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.sdnc.request.header.SdncRequestHeader; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.sdnc.request.header.SdncRequestHeaderBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceCreateInput; +import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceFeasibilityCheckInput; +import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceReconfigureInput; +import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.list.Services; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev170426.RoutingConstraintsSp.PceMetric; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev170426.routing.constraints.sp.HardConstraints; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev170426.routing.constraints.sp.SoftConstraints; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.RxDirection; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.RxDirectionBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.TxDirection; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.TxDirectionBuilder; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.handler.header.ServiceHandlerHeaderBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -/* +/** * class for Mapping and Sending PCE requests : - path-computation-request - * cancel-resource-reserve. - * @author Martial Coulibaly ( martial.coulibaly@gfi.com ) on behalf of Orange + * + * @author Martial Coulibaly on behalf of Orange * */ public class MappingAndSendingPCRequest { - /* Logging. */ + /** Logging. */ private static final Logger LOG = LoggerFactory.getLogger(MappingAndSendingPCRequest.class); - /* Permit to call PCE RPCs. */ + /** Permit to call PCE RPCs. */ private StubpceService service; - /* define procedure success (or not ). */ + /** define procedure success (or not ). */ private Boolean success; - /* permit to call bundle service (PCE, Renderer, Servicehandler. */ + /** permit to call bundle service (PCE, Renderer, Servicehandler. */ private RpcProviderRegistry rpcRegistry; PathComputationRequestInput pathComputationRequestInput = null; CancelResourceReserveInput cancelResourceReserveInput = null; HardConstraints hard = null; SoftConstraints soft = null; - /* store all error messages. */ + private ServiceAEnd serviceAEndSp; + private ServiceZEnd serviceZEndSp; + /** store all error messages. */ private String error; private final ListeningExecutorService executor = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(5)); - /* + /** * MappingAndSendingPCRequest Class constructor for RPC serviceReconfigure. * * @param rpcRegistry @@ -78,26 +89,30 @@ public class MappingAndSendingPCRequest { */ public MappingAndSendingPCRequest(RpcProviderRegistry rpcRegistry, ServiceReconfigureInput serviceReconfigureInput, Boolean resvResource) { - this.rpcRegistry = rpcRegistry; + this.setRpcRegistry(rpcRegistry); if (rpcRegistry != null) { service = rpcRegistry.getRpcService(StubpceService.class); } - SdncRequestHeader head = new SdncRequestHeaderBuilder().build(); + endpointToEndpointStubpce(serviceReconfigureInput.getServiceAEnd(), serviceReconfigureInput.getServiceZEnd()); + SdncRequestHeader head = new SdncRequestHeaderBuilder() + .setRequestId("reconfigure_" + serviceReconfigureInput.getServiceName()) + .setRpcAction(RpcActions.ServiceReconfigure) + .build(); MappingConstraints map = new MappingConstraints(serviceReconfigureInput.getHardConstraints(), serviceReconfigureInput.getSoftConstraints()); map.serviceToServicePathConstarints(); - /* + /** * mappingPCRequest(serviceReconfigureInput.getNewServiceName(), * serviceReconfigureInput.getHardConstraints(), * serviceReconfigureInput.getSoftConstraints(),head ,resvResource); */ - mappingPCRequest(serviceReconfigureInput.getNewServiceName(), map.getServicePathHardConstraints(), - map.getServicePathSoftConstraints(), head, resvResource); + mappingPCRequest(serviceReconfigureInput.getNewServiceName(),serviceAEndSp, serviceZEndSp, + map.getServicePathHardConstraints(), map.getServicePathSoftConstraints(), head, resvResource); setSuccess(false); setError(""); } - /* + /** * MappingAndSendingPCRequest Class constructor for RPC * serviceFeasibilityCheck. * @@ -110,20 +125,23 @@ public class MappingAndSendingPCRequest { */ public MappingAndSendingPCRequest(RpcProviderRegistry rpcRegistry, ServiceFeasibilityCheckInput serviceFeasibilityCheckInput, Boolean resvResource) { - this.rpcRegistry = rpcRegistry; + this.setRpcRegistry(rpcRegistry); if (rpcRegistry != null) { service = rpcRegistry.getRpcService(StubpceService.class); } + endpointToEndpointStubpce(serviceFeasibilityCheckInput.getServiceAEnd(), + serviceFeasibilityCheckInput.getServiceZEnd()); MappingConstraints map = new MappingConstraints(serviceFeasibilityCheckInput.getHardConstraints(), serviceFeasibilityCheckInput.getSoftConstraints()); map.serviceToServicePathConstarints(); - mappingPCRequest("no name", map.getServicePathHardConstraints(), map.getServicePathSoftConstraints(), - serviceFeasibilityCheckInput.getSdncRequestHeader(), resvResource); + mappingPCRequest("no name",serviceAEndSp, serviceZEndSp, map.getServicePathHardConstraints(), + map.getServicePathSoftConstraints(), serviceFeasibilityCheckInput.getSdncRequestHeader(), + resvResource); setSuccess(false); setError(""); } - /* + /** * MappingAndSendingPCRequest Class constructor for RPC serviceCreate. * * @param rpcRegistry @@ -135,20 +153,22 @@ public class MappingAndSendingPCRequest { */ public MappingAndSendingPCRequest(RpcProviderRegistry rpcRegistry, ServiceCreateInput serviceCreateInput, Boolean resvResource) { - this.rpcRegistry = rpcRegistry; + this.setRpcRegistry(rpcRegistry); if (rpcRegistry != null) { service = rpcRegistry.getRpcService(StubpceService.class); } + endpointToEndpointStubpce(serviceCreateInput.getServiceAEnd(), serviceCreateInput.getServiceZEnd()); MappingConstraints map = new MappingConstraints(serviceCreateInput.getHardConstraints(), serviceCreateInput.getSoftConstraints()); map.serviceToServicePathConstarints(); - mappingPCRequest(serviceCreateInput.getServiceName(), map.getServicePathHardConstraints(), - map.getServicePathSoftConstraints(), serviceCreateInput.getSdncRequestHeader(), resvResource); + mappingPCRequest(serviceCreateInput.getServiceName(),serviceAEndSp, serviceZEndSp, + map.getServicePathHardConstraints(), map.getServicePathSoftConstraints(), + serviceCreateInput.getSdncRequestHeader(), resvResource); setSuccess(false); setError(""); } - /* + /** * MappingAndSendingPCRequest Class constructor for modify Service in ODL * Datastore. * @@ -160,24 +180,65 @@ public class MappingAndSendingPCRequest { * Boolean to reserve resource */ public MappingAndSendingPCRequest(RpcProviderRegistry rpcRegistry, Services input, Boolean resvResource) { - this.rpcRegistry = rpcRegistry; + this.setRpcRegistry(rpcRegistry); if (rpcRegistry != null) { service = rpcRegistry.getRpcService(StubpceService.class); } + endpointToEndpointStubpce(input.getServiceAEnd(), input.getServiceZEnd()); MappingConstraints map = new MappingConstraints(input.getHardConstraints(), input.getSoftConstraints()); map.serviceToServicePathConstarints(); - mappingPCRequest(input.getServiceName(), map.getServicePathHardConstraints(), + mappingPCRequest(input.getServiceName(),serviceAEndSp, serviceZEndSp, map.getServicePathHardConstraints(), map.getServicePathSoftConstraints(), input.getSdncRequestHeader(), resvResource); setSuccess(false); setError(""); } - /* + + public void endpointToEndpointStubpce(ServiceEndpoint serviceAEnd, ServiceEndpoint serviceZEnd) { + LOG.info("Mapping Service Endpoint to Service Endpoint Stubpce"); + TxDirection txDirection = null; + RxDirection rxDirection = null; + if (serviceAEnd != null && serviceZEnd != null) { + txDirection = new TxDirectionBuilder() + .setPort(serviceAEnd.getTxDirection().getPort()) + .build(); + rxDirection = new RxDirectionBuilder() + .setPort(serviceAEnd.getRxDirection().getPort()) + .build(); + serviceAEndSp = new ServiceAEndBuilder() + .setClli(serviceAEnd.getClli()) + .setNodeId(serviceAEnd.getNodeId()) + .setServiceFormat(serviceAEnd.getServiceFormat()) + .setServiceRate(serviceAEnd.getServiceRate()) + .setTxDirection(txDirection) + .setRxDirection(rxDirection) + .build(); + + txDirection = new TxDirectionBuilder() + .setPort(serviceZEnd.getTxDirection().getPort()) + .build(); + rxDirection = new RxDirectionBuilder() + .setPort(serviceZEnd.getRxDirection().getPort()) + .build(); + serviceZEndSp = new ServiceZEndBuilder() + .setClli(serviceZEnd.getClli()) + .setNodeId(serviceZEnd.getNodeId()) + .setServiceFormat(serviceZEnd.getServiceFormat()) + .setServiceRate(serviceZEnd.getServiceRate()) + .setTxDirection(txDirection) + .setRxDirection(rxDirection) + .build(); + } + } + + /** * Build pathComputationRequestInput or cancelResourceReserveInput with * input parameters (serviceReconfigureInput or serviceFeasibilityCheckInput. * * @param String * serviceName + * @param zend Service ZEnd + * @param aend Service AEnd * @param HardConstraints * hardConstraints * @param SoftConstraints @@ -187,9 +248,10 @@ public class MappingAndSendingPCRequest { * @param Boolean * resvResource */ - private void mappingPCRequest(String serviceName, HardConstraints hardConstraints, SoftConstraints softConstraints, - org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.sdnc.request.header - .SdncRequestHeader sdncRequestHeader, Boolean resvResource) { + private void mappingPCRequest(String serviceName, ServiceAEnd aend, ServiceZEnd zend, + HardConstraints hardConstraints, SoftConstraints softConstraints, org.opendaylight.yang.gen.v1.http.org + .openroadm.common.service.types.rev161014.sdnc.request.header.SdncRequestHeader sdncRequestHeader, + Boolean resvResource) { LOG.info("Mapping ServiceCreateInput or ServiceFeasibilityCheckInput or serviceReconfigureInput " + "to PCE requests"); @@ -212,34 +274,38 @@ public class MappingAndSendingPCRequest { serviceHandlerHeader.setRequestId(sdncRequestHeader.getRequestId()); } - /* PathComputationRequestInput build */ - pathComputationRequestInput = new PathComputationRequestInputBuilder().setServiceName(serviceName) - .setResourceReserve(resvResource).setServiceHandlerHeader(serviceHandlerHeader.build()) - .setHardConstraints(pceHardConstraints).setSoftConstraints(pceSoftConstraints) + /** PathComputationRequestInput build */ + pathComputationRequestInput = new PathComputationRequestInputBuilder() + .setServiceName(serviceName) + .setResourceReserve(resvResource) + .setServiceHandlerHeader(serviceHandlerHeader.build()) + .setServiceAEnd(aend) + .setServiceZEnd(zend) + .setHardConstraints(pceHardConstraints) + .setSoftConstraints(pceSoftConstraints) .setPceMetric(PceMetric.TEMetric).build(); - /* CancelResourceReserveInput build */ + /** CancelResourceReserveInput build */ cancelResourceReserveInput = new CancelResourceReserveInputBuilder().setServiceName(serviceName) .setServiceHandlerHeader(serviceHandlerHeader.build()).build(); } - /* Send cancelResourceReserve request to PCE. + + /** + * Send cancelResourceReserve request to PCE. * - * @return CancelResourceReserveOutput data response from PCE + * @return Boolean true if success, false else */ - public ListenableFuture cancelResourceReserve() { + public ListenableFuture cancelResourceReserve() { setSuccess(false); - return executor.submit(new Callable() { - + return executor.submit(new Callable() { @Override - public CancelResourceReserveOutput call() throws Exception { - CancelResourceReserveOutput output = null; + public Boolean call() throws Exception { + Boolean output = false; if (cancelResourceReserveInput != null) { - RpcResult pceOutputResult = null; Future> pceOutputFuture = service .cancelResourceReserve(cancelResourceReserveInput); - try { pceOutputResult = pceOutputFuture.get(); } catch (InterruptedException | CancellationException | ExecutionException e) { @@ -251,9 +317,7 @@ public class MappingAndSendingPCRequest { if (pceOutputResult != null && pceOutputResult.isSuccessful()) { LOG.info("PCE replied to CancelResource request !"); - CancelResourceReserveOutput pceOutput = pceOutputResult.getResult(); - output = new CancelResourceReserveOutputBuilder() - .setConfigurationResponseCommon(pceOutput.getConfigurationResponseCommon()).build(); + output = true; setSuccess(true); } } else { @@ -265,54 +329,35 @@ public class MappingAndSendingPCRequest { } - public Boolean getSuccess() { - return success; - } - - public void setSuccess(Boolean success) { - this.success = success; - } - - public String getError() { - return error; - } - - public void setError(String error) { - this.error = error; - } - - /*Send pathComputationRequest request to PCE. + /** + * Send pathComputationRequest request to PCE. * - * @return PathComputationRequestOutput data response from PCE + * @return Boolean true if success, false else */ - public ListenableFuture pathComputationRequest() { + public ListenableFuture pathComputationRequest() { LOG.info("In pathComputationRequest ..."); setSuccess(false); - return executor.submit(new Callable() { + return executor.submit(new Callable() { @Override - public PathComputationRequestOutput call() throws Exception { + public Boolean call() throws Exception { RpcResult pceOutputResult = null; - PathComputationRequestOutput output = null; + Boolean output = false; if (pathComputationRequestInput != null) { + LOG.info("pathComputationRequestInput : {}", pathComputationRequestInput.toString()); Future> pceOutputFuture = service .pathComputationRequest(pathComputationRequestInput); try { - pceOutputResult = pceOutputFuture.get();// wait to get - // the result + pceOutputResult = pceOutputFuture.get(); } catch (InterruptedException | CancellationException | ExecutionException e) { setError("Did not receive the expected response from pce to pathComputationRequest RPC " + e.toString()); LOG.error(error); pceOutputFuture.cancel(true); } - if (pceOutputResult != null && pceOutputResult.isSuccessful()) { setSuccess(true); + output = true; LOG.info("PCE replied to pathComputation request !"); - PathComputationRequestOutput pceOutput = pceOutputResult.getResult(); - output = new PathComputationRequestOutputBuilder() - .setConfigurationResponseCommon(pceOutput.getConfigurationResponseCommon()) - .setResponseParameters(pceOutput.getResponseParameters()).build(); } } else { LOG.info("pathComputationRequestInput parameter not valid !"); @@ -320,6 +365,45 @@ public class MappingAndSendingPCRequest { return output; } }); + } + + public Boolean getSuccess() { + return success; + } + + public void setSuccess(Boolean success) { + this.success = success; + } + + public String getError() { + return error; + } + + public void setError(String error) { + this.error = error; + } + + public RpcProviderRegistry getRpcRegistry() { + return rpcRegistry; + } + + public void setRpcRegistry(RpcProviderRegistry rpcRegistry) { + this.rpcRegistry = rpcRegistry; + } + + public ServiceAEnd getServiceAEndSp() { + return serviceAEndSp; + } + + public void setServiceAEndSp(ServiceAEnd serviceAEndSp) { + this.serviceAEndSp = serviceAEndSp; + } + + public ServiceZEnd getServiceZEndSp() { + return serviceZEndSp; + } + public void setServiceZEndSp(ServiceZEnd serviceZEndSp) { + this.serviceZEndSp = serviceZEndSp; } }