2 * Copyright © 2017 Orange, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.transportpce.servicehandler.service;
10 import com.google.common.util.concurrent.ListenableFuture;
12 import java.util.concurrent.ExecutionException;
14 import org.opendaylight.transportpce.pce.service.PathComputationService;
15 import org.opendaylight.transportpce.servicehandler.MappingConstraints;
16 import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
17 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.CancelResourceReserveInput;
18 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.CancelResourceReserveInputBuilder;
19 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.PathComputationRequestInput;
20 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.PathComputationRequestInputBuilder;
21 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.PathComputationRequestOutput;
22 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.ServiceEndpoint;
23 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.sdnc.request.header.SdncRequestHeader;
24 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceCreateInput;
25 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.TempServiceCreateInput;
26 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.RoutingConstraintsSp.PceMetric;
27 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.routing.constraints.sp.HardConstraints;
28 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.routing.constraints.sp.SoftConstraints;
29 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev171016.service.handler.header.ServiceHandlerHeaderBuilder;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
33 public class PCEServiceWrapper {
35 private static final Logger LOG = LoggerFactory.getLogger(PCEServiceWrapper.class);
37 private final PathComputationService pathComputationService;
39 public PCEServiceWrapper(PathComputationService pathComputationService) {
40 this.pathComputationService = pathComputationService;
43 public PathComputationRequestOutput performPCE(ServiceCreateInput serviceCreateInput, boolean reserveResource) {
44 return performPCE(serviceCreateInput.getHardConstraints(), serviceCreateInput.getSoftConstraints(),
45 serviceCreateInput.getServiceName(), serviceCreateInput.getSdncRequestHeader(),
46 serviceCreateInput.getServiceAEnd(), serviceCreateInput.getServiceZEnd(), reserveResource);
49 public PathComputationRequestOutput performPCE(TempServiceCreateInput tempServiceCreateInput,
50 boolean reserveResource) {
51 return performPCE(tempServiceCreateInput.getHardConstraints(), tempServiceCreateInput.getSoftConstraints(),
52 tempServiceCreateInput.getCommonId(), tempServiceCreateInput.getSdncRequestHeader(),
53 tempServiceCreateInput.getServiceAEnd(), tempServiceCreateInput.getServiceZEnd(), reserveResource);
56 private PathComputationRequestOutput performPCE(org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constrains
57 .rev161014.routing.constraints.HardConstraints hardConstraints, org.opendaylight.yang.gen.v1.http.org
58 .openroadm.routing.constrains.rev161014.routing.constraints.SoftConstraints softConstraints,
59 String serviceName, SdncRequestHeader sdncRequestHeader, ServiceEndpoint serviceAEnd,
60 ServiceEndpoint serviceZEnd, boolean reserveResource) {
61 MappingConstraints mappingConstraints = new MappingConstraints(hardConstraints, softConstraints);
62 mappingConstraints.serviceToServicePathConstarints();
63 PathComputationRequestInput pathComputationRequestInput =
64 createPceRequestInput(serviceName, sdncRequestHeader,mappingConstraints.getServicePathHardConstraints(),
65 mappingConstraints.getServicePathSoftConstraints(), reserveResource, serviceAEnd,
67 LOG.debug("Calling path computation.");
68 ListenableFuture<PathComputationRequestOutput> pathComputationRequestOutput
69 = this.pathComputationService.pathComputationRequest(pathComputationRequestInput);
70 LOG.debug("Path computation done.");
71 PathComputationRequestOutput output = null;
73 output = pathComputationRequestOutput.get();
74 } catch (InterruptedException | ExecutionException e) {
75 LOG.error("PCE RPC path computation failed !");
80 private PathComputationRequestInput createPceRequestInput(String serviceName,
81 SdncRequestHeader serviceHandler, HardConstraints hardConstraints,
82 SoftConstraints softConstraints, Boolean reserveResource, ServiceEndpoint serviceAEnd,
83 ServiceEndpoint serviceZEnd) {
84 LOG.info("Mapping ServiceCreateInput or ServiceFeasibilityCheckInput or serviceReconfigureInput to PCE"
86 ServiceHandlerHeaderBuilder serviceHandlerHeader = new ServiceHandlerHeaderBuilder();
87 if (serviceHandler != null) {
88 serviceHandlerHeader.setRequestId(serviceHandler.getRequestId());
90 return new PathComputationRequestInputBuilder()
91 .setServiceName(serviceName)
92 .setResourceReserve(reserveResource)
93 .setServiceHandlerHeader(serviceHandlerHeader.build())
94 .setHardConstraints(hardConstraints)
95 .setSoftConstraints(softConstraints)
96 .setPceMetric(PceMetric.TEMetric)
97 .setServiceAEnd(ModelMappingUtils.createServiceAEnd(serviceAEnd))
98 .setServiceZEnd(ModelMappingUtils.createServiceZEnd(serviceZEnd))
102 private CancelResourceReserveInput mappingCancelResourceReserve(String serviceName,
103 SdncRequestHeader sdncRequestHeader) {
104 LOG.debug("Mapping ServiceCreateInput or ServiceFeasibilityCheckInput or serviceReconfigureInput to PCE"
106 ServiceHandlerHeaderBuilder serviceHandlerHeader = new ServiceHandlerHeaderBuilder();
107 if (sdncRequestHeader != null) {
108 serviceHandlerHeader.setRequestId(sdncRequestHeader.getRequestId());
110 CancelResourceReserveInputBuilder cancelResourceReserveInput = new CancelResourceReserveInputBuilder()
111 .setServiceName(serviceName)
112 .setServiceHandlerHeader(serviceHandlerHeader.build());
113 return cancelResourceReserveInput.build();