import org.opendaylight.transportpce.pce.gnpy.GnpyResult;
import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumer;
import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.result.Response;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.CancelResourceReserveInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.CancelResourceReserveOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.CancelResourceReserveOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.PathComputationRequestOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.ServicePathRpcResult;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.ServicePathRpcResultBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.gnpy.GnpyResponse;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.gnpy.GnpyResponseBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.gnpy.gnpy.response.response.type.NoPathCaseBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.gnpy.gnpy.response.response.type.PathCaseBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.path.performance.PathPropertiesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.path.performance.path.properties.PathMetric;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.path.performance.path.properties.PathMetricBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.service.path.rpc.result.PathDescription;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.service.path.rpc.result.PathDescriptionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.ServicePathRpcResult;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.ServicePathRpcResultBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.gnpy.GnpyResponse;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.gnpy.GnpyResponseBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.gnpy.gnpy.response.response.type.NoPathCaseBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.gnpy.gnpy.response.response.type.PathCaseBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.performance.PathPropertiesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.performance.path.properties.PathMetric;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.performance.path.properties.PathMetricBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescriptionBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirection;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.ServicePathNotificationTypes;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.response.parameters.sp.ResponseParametersBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.handler.header.ServiceHandlerHeaderBuilder;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+@Component(immediate = true)
public class PathComputationServiceImpl implements PathComputationService {
private static final Logger LOG = LoggerFactory.getLogger(PathComputationServiceImpl.class);
private final GnpyConsumer gnpyConsumer;
private PortMapping portMapping;
- public PathComputationServiceImpl(NetworkTransactionService networkTransactionService,
- NotificationPublishService notificationPublishService,
- GnpyConsumer gnpyConsumer, PortMapping portMapping) {
+ @Activate
+ public PathComputationServiceImpl(@Reference NetworkTransactionService networkTransactionService,
+ @Reference NotificationPublishService notificationPublishService,
+ @Reference GnpyConsumer gnpyConsumer,
+ @Reference PortMapping portMapping) {
this.notificationPublishService = notificationPublishService;
this.networkTransactionService = networkTransactionService;
this.executor = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(5));
this.gnpyConsumer = gnpyConsumer;
this.portMapping = portMapping;
- }
-
- public void init() {
- LOG.info("init ...");
- }
-
- public void close() {
- LOG.info("close.");
+ LOG.debug("PathComputationServiceImpl instantiated");
}
@SuppressFBWarnings(
@Override
public ListenableFuture<PathComputationRequestOutput> pathComputationRequest(PathComputationRequestInput input) {
- LOG.info("pathComputationRequest");
+ LOG.debug("input parameters are : input = {}", input.toString());
return executor.submit(new Callable<PathComputationRequestOutput>() {
@Override
}
// Path calculator returned Success
PathDescription pathDescription =
- new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118
- .service.path.rpc.result.PathDescriptionBuilder()
+ new PathDescriptionBuilder()
.setAToZDirection(path.getAToZDirection())
.setZToADirection(path.getZToADirection())
.build();
AToZDirection atoz = pathDescription.getAToZDirection();
if ((atoz != null) && (atoz.getAToZ() != null)) {
LOG.debug("Impl AtoZ Notification: [{}] elements in description", atoz.getAToZ().size());
- for (org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705
+ for (org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501
.path.description.atoz.direction.AToZKey key : atoz.getAToZ().keySet()) {
LOG.debug("Impl AtoZ Notification: [{}] {}", key, atoz.getAToZ().get(key));
}
ZToADirection ztoa = pathDescription.getZToADirection();
if ((ztoa != null) && (ztoa.getZToA() != null)) {
LOG.debug("Impl ZtoA Notification: [{}] elements in description", ztoa.getZToA().size());
- for (org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705
+ for (org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501
.path.description.ztoa.direction.ZToAKey key : ztoa.getZToA().keySet()) {
LOG.debug("Impl ZtoA Notification: [{}] {}", key, ztoa.getZToA().get(key));
}
});
}
+ @Override
+ public ListenableFuture<PathComputationRerouteRequestOutput> pathComputationRerouteRequest(
+ PathComputationRerouteRequestInput input) {
+ return executor.submit(() -> {
+ PathComputationRerouteRequestOutputBuilder output = new PathComputationRerouteRequestOutputBuilder();
+ ConfigurationResponseCommonBuilder configurationResponseCommon = new ConfigurationResponseCommonBuilder()
+ .setRequestId("none");
+ PceComplianceCheckResult check = PceComplianceCheck.check(input);
+ if (!check.hasPassed()) {
+ LOG.error("Path not calculated, path computation reroute request not compliant : {}",
+ check.getMessage());
+ configurationResponseCommon
+ .setAckFinalIndicator("Yes")
+ .setResponseCode("Path not calculated")
+ .setResponseMessage(check.getMessage());
+ return output
+ .setConfigurationResponseCommon(configurationResponseCommon.build())
+ .build();
+ }
+ PathComputationRequestInput pathComputationInput = new PathComputationRequestInputBuilder()
+ .setServiceName("no_name")
+ .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId("none").build())
+ .setServiceAEnd(new ServiceAEndBuilder(input.getServiceAEnd()).build())
+ .setServiceZEnd(new ServiceZEndBuilder(input.getServiceZEnd()).build())
+ .setHardConstraints(input.getHardConstraints())
+ .setPceRoutingMetric(input.getPceRoutingMetric())
+ .setResourceReserve(false)
+ .setSoftConstraints(input.getSoftConstraints())
+ .setRoutingMetric(input.getRoutingMetric())
+ .build();
+ PceSendingPceRPCs sendingPCE = new PceSendingPceRPCs(pathComputationInput, networkTransactionService,
+ gnpyConsumer, portMapping, input.getEndpoints());
+ sendingPCE.pathComputation();
+ String message = sendingPCE.getMessage();
+ String responseCode = sendingPCE.getResponseCode();
+ LOG.info("PCE response: {} {}", message, responseCode);
+ return output.setConfigurationResponseCommon(
+ configurationResponseCommon
+ .setAckFinalIndicator("Yes")
+ .setResponseCode(responseCode)
+ .setResponseMessage(message)
+ .build())
+ .build();
+ });
+ }
+
public GnpyResponse generateGnpyResponse(Response responseGnpy, String pathDir) {
if (responseGnpy == null) {
return new GnpyResponseBuilder()