From ea5748f9175475e3c493cb016a72a969fb58cd0f Mon Sep 17 00:00:00 2001 From: Kai GAO Date: Thu, 3 Dec 2015 16:22:16 +0800 Subject: [PATCH] Support cost map in simple-ird Patch set 2: fix missing dependency in alto-release-features Change-Id: I60fadea94fd2b2a557f120f410055cd821b07977 Signed-off-by: Kai GAO --- alto-basic/simple-ird/features/pom.xml | 8 ++++ .../features/src/main/features/features.xml | 2 + alto-basic/simple-ird/impl/pom.xml | 6 +++ .../basic/impl/SimpleIrdEntryListener.java | 7 ++++ .../SimpleIrdRfc7285CostTypeListener.java | 13 +++--- .../model-costmap/api/pom.xml | 6 +++ .../service/model/costmap/CostmapUtils.java | 4 +- .../api/src/main/yang/alto-model-costmap.yang | 26 +++--------- .../model-costmap/features/pom.xml | 26 ++++++++++++ .../features/src/main/features/features.xml | 4 ++ .../model-costmap/impl/pom.xml | 6 +++ .../costmap/test/AltoCostmapProvider.java | 41 +++++++++++++------ alto-release-features/pom.xml | 6 +++ .../src/main/features/features.xml | 2 + 14 files changed, 117 insertions(+), 40 deletions(-) diff --git a/alto-basic/simple-ird/features/pom.xml b/alto-basic/simple-ird/features/pom.xml index d6db5089..3ce12972 100644 --- a/alto-basic/simple-ird/features/pom.xml +++ b/alto-basic/simple-ird/features/pom.xml @@ -113,6 +113,14 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL xml runtime + + org.opendaylight.alto.core + alto-service-model-costmap-features + features + ${project.version} + xml + runtime + org.opendaylight.alto.core alto-service-model-endpointcost-features diff --git a/alto-basic/simple-ird/features/src/main/features/features.xml b/alto-basic/simple-ird/features/src/main/features/features.xml index bfe49629..a1d20d5e 100644 --- a/alto-basic/simple-ird/features/src/main/features/features.xml +++ b/alto-basic/simple-ird/features/src/main/features/features.xml @@ -19,6 +19,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html mvn:org.opendaylight.alto.core/alto-northbound-features/${project.version}/xml/features mvn:org.opendaylight.alto.core/alto-service-model-networkmap-features/${project.version}/xml/features mvn:org.opendaylight.alto.core/alto-service-model-endpointcost-features/${project.version}/xml/features + mvn:org.opendaylight.alto.core/alto-service-model-costmap-features/${project.version}/xml/features odl-mdsal-models @@ -34,6 +35,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html odl-alto-resourcepool odl-alto-service-model-networkmap odl-alto-service-model-endpointcost + odl-alto-service-model-costmap mvn:org.opendaylight.alto.basic/alto-simple-ird-impl/${project.version} mvn:org.opendaylight.alto.basic/alto-simple-ird-impl/${project.version}/xml/config diff --git a/alto-basic/simple-ird/impl/pom.xml b/alto-basic/simple-ird/impl/pom.xml index dfbd0f01..9cf970ee 100644 --- a/alto-basic/simple-ird/impl/pom.xml +++ b/alto-basic/simple-ird/impl/pom.xml @@ -46,6 +46,12 @@ and is available at http://www.eclipse.org/legal/epl-v10.html ${project.version} + + org.opendaylight.alto.core + alto-service-model-costmap-api + ${project.version} + + org.opendaylight.alto.core alto-service-model-endpointcost-api diff --git a/alto-basic/simple-ird/impl/src/main/java/org/opendaylight/alto/basic/impl/SimpleIrdEntryListener.java b/alto-basic/simple-ird/impl/src/main/java/org/opendaylight/alto/basic/impl/SimpleIrdEntryListener.java index 229f8ba7..fea401cf 100644 --- a/alto-basic/simple-ird/impl/src/main/java/org/opendaylight/alto/basic/impl/SimpleIrdEntryListener.java +++ b/alto-basic/simple-ird/impl/src/main/java/org/opendaylight/alto/basic/impl/SimpleIrdEntryListener.java @@ -47,6 +47,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.types.rev150921.R import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.types.rev150921.Tag; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.ird.rev151021.ResourceTypeIrd; +import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.ResourceTypeCostmap; +import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.ResourceTypeFilteredCostmap; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rev151021.ResourceTypeEndpointcost; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rev151021.ResourceTypeFilteredNetworkmap; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rev151021.ResourceTypeNetworkmap; @@ -333,6 +335,11 @@ public class SimpleIrdEntryListener implements AutoCloseable, DataChangeListener } else if (resource.getType().equals(ResourceTypeEndpointcost.class)) { entryBuilder.setAccepts("application/alto-endpointcostparams+json"); entryBuilder.setMediaType("application/alto-endpointcost+json"); + } else if (resource.getType().equals(ResourceTypeCostmap.class)) { + entryBuilder.setMediaType("application/alto-costmap+json"); + } else if (resource.getType().equals(ResourceTypeFilteredCostmap.class)) { + entryBuilder.setAccepts("application/alto-costmapfilter+json"); + entryBuilder.setMediaType("application/alto-costmap+json"); } else { LOG.warn("Haven't implemented yet, skipping"); continue; diff --git a/alto-basic/simple-ird/impl/src/main/java/org/opendaylight/alto/basic/impl/rfc7285/SimpleIrdRfc7285CostTypeListener.java b/alto-basic/simple-ird/impl/src/main/java/org/opendaylight/alto/basic/impl/rfc7285/SimpleIrdRfc7285CostTypeListener.java index 43fccb78..4ac4e62b 100644 --- a/alto-basic/simple-ird/impl/src/main/java/org/opendaylight/alto/basic/impl/rfc7285/SimpleIrdRfc7285CostTypeListener.java +++ b/alto-basic/simple-ird/impl/src/main/java/org/opendaylight/alto/basic/impl/rfc7285/SimpleIrdRfc7285CostTypeListener.java @@ -39,6 +39,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.resourcepool.rev1 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.types.rev150921.CostTypeData; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.types.rev150921.ResourceId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.ResourceTypeCostmap; +import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.ResourceTypeFilteredCostmap; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rev151021.ResourceTypeEndpointcost; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rev151021.CapabilitiesCostType; @@ -108,13 +110,15 @@ public final class SimpleIrdRfc7285CostTypeListener resourceIID = (InstanceIdentifier)entry.getInstance(); Resource resource = rwx.read(LogicalDatastoreType.OPERATIONAL, resourceIID).get().get(); - if (resource.getType().equals(ResourceTypeEndpointcost.class)) { + if (resource.getType().equals(ResourceTypeEndpointcost.class) + || resource.getType().equals(ResourceTypeCostmap.class) + || resource.getType().equals(ResourceTypeFilteredCostmap.class)) { CapabilitiesCostType capabilities; capabilities = resource.getCapabilities() - .getAugmentation(CapabilitiesCostType.class); + .getAugmentation(CapabilitiesCostType.class); if ((capabilities == null) || (capabilities.getCostType() == null) - || (capabilities.getCostType().isEmpty())) { + || (capabilities.getCostType().isEmpty())) { LOG.warn("Missing cost-type information in {}", resource.getResourceId()); continue; } @@ -142,9 +146,8 @@ public final class SimpleIrdRfc7285CostTypeListener supportConstraint = capabilities.isConstraintSupport(); } setCostTypeNames(m_instance, entry.getEntryId(), - costTypeNames, supportConstraint, rwx); + costTypeNames, supportConstraint, rwx); } else { - //TODO :: handle cost map/filtered cost map continue; } } diff --git a/alto-core/standard-service-models/model-costmap/api/pom.xml b/alto-core/standard-service-models/model-costmap/api/pom.xml index 37715b6f..6872a699 100644 --- a/alto-core/standard-service-models/model-costmap/api/pom.xml +++ b/alto-core/standard-service-models/model-costmap/api/pom.xml @@ -39,6 +39,12 @@ and is available at http://www.eclipse.org/legal/epl-v10.html ${project.version} + + org.opendaylight.alto.core + alto-service-model-endpointcost-api + ${project.version} + + org.opendaylight.mdsal.model yang-ext diff --git a/alto-core/standard-service-models/model-costmap/api/src/main/java/org/opendaylight/alto/core/service/model/costmap/CostmapUtils.java b/alto-core/standard-service-models/model-costmap/api/src/main/java/org/opendaylight/alto/core/service/model/costmap/CostmapUtils.java index 7c6ef6c2..c57180af 100644 --- a/alto-core/standard-service-models/model-costmap/api/src/main/java/org/opendaylight/alto/core/service/model/costmap/CostmapUtils.java +++ b/alto-core/standard-service-models/model-costmap/api/src/main/java/org/opendaylight/alto/core/service/model/costmap/CostmapUtils.java @@ -8,8 +8,8 @@ package org.opendaylight.alto.core.service.model.costmap; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.types.rev150921.CostMetric; -import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.context.resource.capabilities.CostType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.context.resource.capabilities.CostTypeBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rev151021.context.resource.capabilities.CostType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rev151021.context.resource.capabilities.CostTypeBuilder; public class CostmapUtils { diff --git a/alto-core/standard-service-models/model-costmap/api/src/main/yang/alto-model-costmap.yang b/alto-core/standard-service-models/model-costmap/api/src/main/yang/alto-model-costmap.yang index 096dcb97..33d110a1 100644 --- a/alto-core/standard-service-models/model-costmap/api/src/main/yang/alto-model-costmap.yang +++ b/alto-core/standard-service-models/model-costmap/api/src/main/yang/alto-model-costmap.yang @@ -41,6 +41,12 @@ module alto-model-costmap { "The resource type for cost map"; } + identity "resource-type-filtered-costmap"{ + base "alto-resourcepool:resource-type"; + description + "The resource type for filtered cost map"; + } + grouping "cost-type-data" { container "cost-type" { leaf "cost-metric" { @@ -121,24 +127,4 @@ module alto-model-costmap { uses "alto-response-costmap"; } } - - augment "/alto-resourcepool:context" - + "/alto-resourcepool:resource" - + "/alto-resourcepool:capabilities" { - - - yang-ext:augment-identifier "capabilities-cost-type"; - - list "cost-type" { - uses "alto-types:cost-type-data"; - - leaf "description" { - type string; - } - } - - leaf "constraint-support" { - type boolean; - } - } } diff --git a/alto-core/standard-service-models/model-costmap/features/pom.xml b/alto-core/standard-service-models/model-costmap/features/pom.xml index 2385ac6e..bdf9266b 100644 --- a/alto-core/standard-service-models/model-costmap/features/pom.xml +++ b/alto-core/standard-service-models/model-costmap/features/pom.xml @@ -119,5 +119,31 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL alto-service-model-base-api ${project.version} + + ${project.groupId} + alto-service-model-endpointcost-features + features + ${project.version} + xml + runtime + + + ${project.groupId} + alto-service-model-endpointcost-api + ${project.version} + + + ${project.groupId} + alto-service-model-networkmap-features + features + ${project.version} + xml + runtime + + + ${project.groupId} + alto-service-model-networkmap-api + ${project.version} + diff --git a/alto-core/standard-service-models/model-costmap/features/src/main/features/features.xml b/alto-core/standard-service-models/model-costmap/features/src/main/features/features.xml index 06857254..c5548d4d 100644 --- a/alto-core/standard-service-models/model-costmap/features/src/main/features/features.xml +++ b/alto-core/standard-service-models/model-costmap/features/src/main/features/features.xml @@ -16,10 +16,14 @@ and is available at http://www.eclipse.org/legal/epl-v10.html mvn:org.opendaylight.netconf/features-restconf/${restconf.version}/xml/features mvn:org.opendaylight.dlux/features-dlux/${dlux.version}/xml/features mvn:org.opendaylight.alto.core/alto-service-model-base-features/${project.version}/xml/features + mvn:org.opendaylight.alto.core/alto-service-model-networkmap-features/${project.version}/xml/features + mvn:org.opendaylight.alto.core/alto-service-model-endpointcost-features/${project.version}/xml/features odl-mdsal-models odl-alto-service-model-base + odl-alto-service-model-networkmap-api + odl-alto-service-model-endpointcost-api mvn:org.opendaylight.alto.core/alto-service-model-costmap-api/${project.version} diff --git a/alto-core/standard-service-models/model-costmap/impl/pom.xml b/alto-core/standard-service-models/model-costmap/impl/pom.xml index 659f6709..54839e06 100644 --- a/alto-core/standard-service-models/model-costmap/impl/pom.xml +++ b/alto-core/standard-service-models/model-costmap/impl/pom.xml @@ -34,6 +34,12 @@ and is available at http://www.eclipse.org/legal/epl-v10.html ${project.version} + + ${project.groupId} + alto-service-model-endpointcost-api + ${project.version} + + ${project.groupId} alto-service-model-costmap-api diff --git a/alto-core/standard-service-models/model-costmap/impl/src/main/java/org/opendaylight/alto/core/impl/costmap/test/AltoCostmapProvider.java b/alto-core/standard-service-models/model-costmap/impl/src/main/java/org/opendaylight/alto/core/impl/costmap/test/AltoCostmapProvider.java index 56564fe8..fba5c153 100644 --- a/alto-core/standard-service-models/model-costmap/impl/src/main/java/org/opendaylight/alto/core/impl/costmap/test/AltoCostmapProvider.java +++ b/alto-core/standard-service-models/model-costmap/impl/src/main/java/org/opendaylight/alto/core/impl/costmap/test/AltoCostmapProvider.java @@ -7,30 +7,39 @@ */ package org.opendaylight.alto.core.impl.costmap.test; - +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; import org.opendaylight.alto.core.resourcepool.ResourcepoolUtils; import org.opendaylight.alto.core.service.model.costmap.CostmapUtils; + import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; + import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; + import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.resourcepool.rev150921.context.Resource; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.resourcepool.rev150921.context.resource.CapabilitiesBuilder; + import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.types.rev150921.CostMetric; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.types.rev150921.PidName; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.types.rev150921.ResourceId; + import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.AltoModelCostmapService; -import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.CapabilitiesCostType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.CapabilitiesCostTypeBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.QueryInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.QueryOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.QueryOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.ResourceTypeCostmap; +import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.ResourceTypeFilteredCostmap; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.alto.request.costmap.request.CostmapRequest; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.alto.response.costmap.response.CostmapResponseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.cost.type.data.CostType; @@ -46,20 +55,18 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap. import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rfc7285.rev151021.query.input.request.costmap.request.costmap.params.filter.CostmapFilterData; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rfc7285.rev151021.query.output.response.costmap.response.costmap.response.data.costmap.source.costmap.destination.cost.NumericalBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rfc7285.rev151021.query.output.response.costmap.response.costmap.response.data.costmap.source.costmap.destination.cost.OrdinalBuilder; + +import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rev151021.CapabilitiesCostType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rev151021.CapabilitiesCostTypeBuilder; + import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.math.BigDecimal; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; - public class AltoCostmapProvider implements BindingAwareProvider, AutoCloseable, AltoModelCostmapService { private static final Logger LOG = LoggerFactory.getLogger(AltoCostmapProvider.class); @@ -70,6 +77,7 @@ public class AltoCostmapProvider implements BindingAwareProvider, AutoCloseable, private ListenerRegistration m_listener=null; private static final String TEST_COSTMAP_NAME="test-model-costmap"; + private static final String TEST_FILTERED_COSTMAP_NAME="test-model-filtered-costmap"; private static final ResourceId TEST_COSTMAP_RID = new ResourceId(TEST_COSTMAP_NAME); private static final CostMetric COST_METRIC_ROUTINGCOST = new CostMetric("routingcost"); private static final String COST_MODE_ORDINAL = "ordinal"; @@ -79,8 +87,6 @@ public class AltoCostmapProvider implements BindingAwareProvider, AutoCloseable, throws InterruptedException, ExecutionException, TransactionCommitFailedException { WriteTransaction wx = m_dataBroker.newWriteOnlyTransaction(); - - CapabilitiesCostTypeBuilder cctBuilder = new CapabilitiesCostTypeBuilder(); cctBuilder.setCostType(Arrays.asList( CostmapUtils.createCostTypeCapability(COST_METRIC_ROUTINGCOST, @@ -97,6 +103,14 @@ public class AltoCostmapProvider implements BindingAwareProvider, AutoCloseable, ResourcepoolUtils.lazyUpdateResource(ResourcepoolUtils.DEFAULT_CONTEXT, TEST_COSTMAP_NAME, wx); + ResourcepoolUtils.createResourceWithCapabilities(ResourcepoolUtils.DEFAULT_CONTEXT, + TEST_FILTERED_COSTMAP_NAME, + ResourceTypeFilteredCostmap.class, + builder.build(), wx); + + ResourcepoolUtils.lazyUpdateResource(ResourcepoolUtils.DEFAULT_CONTEXT, + TEST_FILTERED_COSTMAP_NAME, wx); + wx.submit().get(); } @@ -170,7 +184,8 @@ public class AltoCostmapProvider implements BindingAwareProvider, AutoCloseable, @Override public Future> query(QueryInput input) { - if (!input.getType().equals(ResourceTypeCostmap.class)) { + if (!input.getType().equals(ResourceTypeCostmap.class) + && !input.getType().equals(ResourceTypeFilteredCostmap.class)) { return RpcResultBuilder.failed().buildFuture(); } diff --git a/alto-release-features/pom.xml b/alto-release-features/pom.xml index 0cf86d7d..10daf93f 100644 --- a/alto-release-features/pom.xml +++ b/alto-release-features/pom.xml @@ -185,6 +185,12 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL ${project.version} + + org.opendaylight.alto.core + alto-service-model-costmap-api + ${project.version} + + org.opendaylight.alto.basic alto-simple-ird-impl diff --git a/alto-release-features/src/main/features/features.xml b/alto-release-features/src/main/features/features.xml index ac199f54..875949ac 100644 --- a/alto-release-features/src/main/features/features.xml +++ b/alto-release-features/src/main/features/features.xml @@ -93,6 +93,8 @@ and is available at http://www.eclipse.org/legal/epl-v10.html mvn:org.opendaylight.alto.core/alto-service-model-ird-api/${project.version} mvn:org.opendaylight.alto.core/alto-service-model-networkmap-api/${project.version} mvn:org.opendaylight.alto.core/alto-service-model-endpointcost-api/${project.version} + mvn:org.opendaylight.alto.core/alto-service-model-costmap-api/${project.version} + -- 2.36.6