From 10188fc727feaa425aac9b5652ed69d691129be9 Mon Sep 17 00:00:00 2001 From: sp694w Date: Mon, 6 Aug 2018 06:49:54 -0400 Subject: RA: Add capability for Policy driven VlanTags Change-Id: I5486a4989006c80b8a77ff2eb64fceed068c0c16 Issue-ID: CCSDK-438 Signed-off-by: Saurav Paira --- .../ccsdk/sli/adaptors/ra/ResourceAllocator.java | 99 +++++++++++++++------- .../sli/adaptors/ra/alloc/DbAllocationRule.java | 67 ++++++++++++++- .../sli/adaptors/ra/comp/ResourceRequest.java | 7 ++ .../sli/adaptors/ra/rule/dao/RangeRuleDaoImpl.java | 10 +-- .../onap/ccsdk/sli/adaptors/rm/util/RangeUtil.java | 2 +- 5 files changed, 147 insertions(+), 38 deletions(-) (limited to 'resource-assignment/provider/src/main/java') diff --git a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/ResourceAllocator.java b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/ResourceAllocator.java index 0e4b9252..385dae75 100644 --- a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/ResourceAllocator.java +++ b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/ResourceAllocator.java @@ -47,7 +47,8 @@ public class ResourceAllocator implements SvcLogicResource { private static final Logger log = LoggerFactory.getLogger(ResourceAllocator.class); - private static final String[] INPUT_PREFIX = {"ra-input.", "tmp.resource-allocator."}; + private static final String[] INPUT_PREFIX = { "ra-input.", "tmp.resource-allocator." }; + private static final String START_RELEASE_LC = "Starting release for: {}"; private ResourceManager resourceManager; private EndPointAllocator endPointAllocator; @@ -98,16 +99,16 @@ public class ResourceAllocator implements SvcLogicResource { String orderBy, SvcLogicContext ctx) throws SvcLogicException { String resourceEntityId = getParam(ctx, - new String[] {"service-instance-id", "reservation-entity-id", "resource-entity-id"}, false, null); - String resourceEntityType = - getParam(ctx, new String[] {"reservation-entity-type", "resource-entity-type"}, false, null); - String resourceEntityVersion = - getParam(ctx, new String[] {"reservation-entity-version", "resource-entity-version"}, false, "1"); - - String resourceTargetId = - getParam(ctx, new String[] {"reservation-target-id", "resource-target-id"}, false, null); - String resourceTargetType = - getParam(ctx, new String[] {"reservation-target-type", "resource-target-type"}, false, null); + new String[] { "service-instance-id", "reservation-entity-id", "resource-entity-id" }, false, null); + String resourceEntityType = getParam(ctx, new String[] { "reservation-entity-type", "resource-entity-type" }, + false, null); + String resourceEntityVersion = getParam(ctx, + new String[] { "reservation-entity-version", "resource-entity-version" }, false, "1"); + + String resourceTargetId = getParam(ctx, new String[] { "reservation-target-id", "resource-target-id" }, false, + null); + String resourceTargetType = getParam(ctx, new String[] { "reservation-target-type", "resource-target-type" }, + false, null); String resourceName = getParam(ctx, "resource-name", false, null); if (resourceEntityId != null && resourceEntityType != null) { @@ -130,8 +131,8 @@ public class ResourceAllocator implements SvcLogicResource { sd.resourceEntityId, sd.resourceEntityVersion); setResourceDataInResponse(rdlist, rsList); } else if (rt.resourceTargetId != null && rt.resourceTargetType != null && rr.resourceName != null) { - ResourceData rd = - endPointAllocator.getResource(rt.resourceTargetType, rt.resourceTargetId, rr.resourceName); + ResourceData rd = endPointAllocator.getResource(rt.resourceTargetType, rt.resourceTargetId, + rr.resourceName); setResourceDataInResponse(Collections.singletonList(rd), rsList); } @@ -179,19 +180,24 @@ public class ResourceAllocator implements SvcLogicResource { @Override public QueryStatus release(String resource, String key, SvcLogicContext ctx) throws SvcLogicException { String resourceEntityId = getParam(ctx, - new String[] {"service-instance-id", "reservation-entity-id", "resource-entity-id"}, true, null); - String resourceEntityType = - getParam(ctx, new String[] {"reservation-entity-type", "resource-entity-type"}, true, null); - String resourceEntityVersion = - getParam(ctx, new String[] {"reservation-entity-version", "resource-entity-version"}, false, null); + new String[] { "service-instance-id", "reservation-entity-id", "resource-entity-id" }, true, null); + String resourceEntityType = getParam(ctx, new String[] { "reservation-entity-type", "resource-entity-type" }, + true, null); + String resourceEntityVersion = getParam(ctx, + new String[] { "reservation-entity-version", "resource-entity-version" }, false, null); + + String endPointPosition = getParam(ctx, "endpoint-position", false, null); ResourceEntity sd = new ResourceEntity(); sd.resourceEntityId = resourceEntityId; sd.resourceEntityType = resourceEntityType; sd.resourceEntityVersion = resourceEntityVersion; + ResourceRequest rr = new ResourceRequest(); + rr.endPointPosition = endPointPosition; + try { - this.release(sd); + this.release(sd, rr); } catch (Exception e) { throw new SvcLogicException(e.getMessage()); } @@ -202,12 +208,12 @@ public class ResourceAllocator implements SvcLogicResource { if (sd.resourceEntityVersion != null) { String resourceSet = sd.resourceEntityType + "::" + sd.resourceEntityId + "::" + sd.resourceEntityVersion; - log.info("Starting release for: " + resourceSet); + log.info(START_RELEASE_LC, resourceSet); resourceManager.releaseResourceSet(resourceSet); } else { String resourceUnion = sd.resourceEntityType + "::" + sd.resourceEntityId; - log.info("Starting release for: " + resourceUnion); + log.info(START_RELEASE_LC, resourceUnion); resourceManager.releaseResourceUnion(resourceUnion); } @@ -216,6 +222,39 @@ public class ResourceAllocator implements SvcLogicResource { } + public AllocationStatus release(ResourceEntity sd, ResourceRequest rr) throws Exception { + + if (sd != null && sd.resourceEntityVersion != null) { + if (rr != null && rr.endPointPosition != null && !rr.endPointPosition.isEmpty()) { + String resourceSet = sd.resourceEntityType + "::" + sd.resourceEntityId + "::" + rr.endPointPosition + + "::" + sd.resourceEntityVersion; + log.info(START_RELEASE_LC, resourceSet); + resourceManager.releaseResourceSet(resourceSet); + + } else { + String resourceSet = sd.resourceEntityType + "::" + sd.resourceEntityId + "::" + + sd.resourceEntityVersion; + log.info(START_RELEASE_LC, resourceSet); + resourceManager.releaseResourceSet(resourceSet); + } + + } else if (sd != null && (sd.resourceEntityVersion == null || sd.resourceEntityVersion.isEmpty())) { + if (rr != null && rr.endPointPosition != null && !rr.endPointPosition.isEmpty()) { + String resourceUnion = sd.resourceEntityType + "::" + sd.resourceEntityId + "::" + rr.endPointPosition; + log.info(START_RELEASE_LC, resourceUnion); + resourceManager.releaseResourceUnion(resourceUnion); + + } else { + String resourceUnion = sd.resourceEntityType + "::" + sd.resourceEntityId; + log.info(START_RELEASE_LC, resourceUnion); + resourceManager.releaseResourceUnion(resourceUnion); + } + } + + return AllocationStatus.Success; + + } + private QueryStatus allocateResources(SvcLogicContext ctx, boolean checkOnly, String prefix) throws SvcLogicException { String serviceModel = getParam(ctx, "service-model", true, null); @@ -321,20 +360,20 @@ public class ResourceAllocator implements SvcLogicResource { private ResourceEntity getResourceEntityData(SvcLogicContext ctx) throws SvcLogicException { ResourceEntity sd = new ResourceEntity(); sd.resourceEntityId = getParam(ctx, - new String[] {"service-instance-id", "reservation-entity-id", "resource-entity-id"}, true, null); - sd.resourceEntityType = - getParam(ctx, new String[] {"reservation-entity-type", "resource-entity-type"}, true, null); - sd.resourceEntityVersion = - getParam(ctx, new String[] {"reservation-entity-version", "resource-entity-version"}, false, "1"); + new String[] { "service-instance-id", "reservation-entity-id", "resource-entity-id" }, true, null); + sd.resourceEntityType = getParam(ctx, new String[] { "reservation-entity-type", "resource-entity-type" }, true, + null); + sd.resourceEntityVersion = getParam(ctx, + new String[] { "reservation-entity-version", "resource-entity-version" }, false, "1"); sd.data = getDataParam(ctx, "reservation-entity-data", "resource-entity-data", "service-data"); return sd; } private ResourceTarget getResourceTargetData(SvcLogicContext ctx) throws SvcLogicException { ResourceTarget sd = new ResourceTarget(); - sd.resourceTargetId = getParam(ctx, new String[] {"reservation-target-id", "resource-target-id"}, true, null); - sd.resourceTargetType = - getParam(ctx, new String[] {"reservation-target-type", "resource-target-type"}, true, null); + sd.resourceTargetId = getParam(ctx, new String[] { "reservation-target-id", "resource-target-id" }, true, null); + sd.resourceTargetType = getParam(ctx, new String[] { "reservation-target-type", "resource-target-type" }, true, + null); sd.data = getDataParam(ctx, "reservation-target-data", "resource-target-data", "equipment-data"); return sd; } @@ -443,4 +482,4 @@ public class ResourceAllocator implements SvcLogicResource { public void setSpeedUtil(SpeedUtil speedUtil) { this.speedUtil = speedUtil; } -} +} \ No newline at end of file diff --git a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/alloc/DbAllocationRule.java b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/alloc/DbAllocationRule.java index b13ef80e..12c02c85 100644 --- a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/alloc/DbAllocationRule.java +++ b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/alloc/DbAllocationRule.java @@ -38,6 +38,7 @@ import org.onap.ccsdk.sli.adaptors.rm.data.LimitAllocationRequest; import org.onap.ccsdk.sli.adaptors.rm.data.MultiResourceAllocationRequest; import org.onap.ccsdk.sli.adaptors.rm.data.Range; import org.onap.ccsdk.sli.adaptors.rm.data.RangeAllocationRequest; +import org.onap.ccsdk.sli.adaptors.rm.data.ResourceType; import org.onap.ccsdk.sli.adaptors.util.expr.ExpressionEvaluator; import org.onap.ccsdk.sli.adaptors.util.str.StrUtil; import org.slf4j.Logger; @@ -92,6 +93,13 @@ public class DbAllocationRule implements AllocationRule { arlist.add(ar1); } + if ((rangeRuleList == null || rangeRuleList.isEmpty()) + && ResourceType.Range.equals(resourceRequest.resourceType)) { + AllocationRequest ar1 = buildAllocationRequest(resourceEntity, resourceTarget, resourceRequest, checkOnly, + change); + arlist.add(ar1); + } + if (arlist.isEmpty()) { return null; } @@ -106,6 +114,59 @@ public class DbAllocationRule implements AllocationRule { return ar; } + private AllocationRequest buildAllocationRequest(ResourceEntity resourceEntity, ResourceTarget resourceTarget, + ResourceRequest resourceRequest, boolean checkOnly, boolean change) { + + RangeAllocationRequest ar = new RangeAllocationRequest(); + ar.applicationId = resourceRequest.applicationId; + if (resourceRequest.endPointPosition != null) { + ar.resourceUnionId = resourceEntity.resourceEntityType + "::" + resourceEntity.resourceEntityId + "::" + + resourceRequest.endPointPosition; + ar.endPointPosition = resourceRequest.endPointPosition; + } else { + ar.resourceUnionId = resourceEntity.resourceEntityType + "::" + resourceEntity.resourceEntityId; + } + ar.resourceSetId = ar.resourceUnionId + "::" + resourceEntity.resourceEntityVersion; + ar.resourceName = resourceRequest.resourceName; + if (resourceRequest.resourceShareGroup != null) { + ar.resourceShareGroupList = Collections.singleton(resourceRequest.resourceShareGroup); + } + ar.assetId = resourceTarget.resourceTargetType + "::" + resourceTarget.resourceTargetId; + ar.requestedNumbers = StrUtil.listInt(resourceRequest.rangeRequestedNumbers, + "Invalid value for requested-numbers"); + if (ar.requestedNumbers != null) { + ar.requestedCount = ar.requestedNumbers.size(); + } + ar.excludeNumbers = StrUtil.listInt(resourceRequest.rangeExcludeNumbers, "Invalid value for exclude-numbers"); + ar.reverseOrder = resourceRequest.rangeReverseOrder; + ar.missingResourceAction = AllocationAction.Succeed_Allocate; + ar.expiredResourceAction = AllocationAction.Succeed_Allocate; + ar.replace = resourceRequest.replace; + ar.check = true; + ar.allocate = !checkOnly; + ar.rangeList = resourceRequest.rangeOverrideList; + if (ar.rangeList == null || ar.rangeList.isEmpty()) { + if (resourceRequest.rangeMinOverride >= 0 + && resourceRequest.rangeMaxOverride >= resourceRequest.rangeMinOverride) { + ar.rangeList = new ArrayList<>(); + Range range = new Range(); + range.min = resourceRequest.rangeMinOverride; + range.max = resourceRequest.rangeMaxOverride; + ar.rangeList.add(range); + } + } else { + if (resourceRequest.rangeMinOverride >= 0) { + ar.rangeList.get(0).min = resourceRequest.rangeMinOverride; + } + if (resourceRequest.rangeMaxOverride >= 0) { + ar.rangeList.get(ar.rangeList.size() - 1).max = resourceRequest.rangeMaxOverride; + } + } + ar.forceNewNumbers = resourceRequest.rangeForceNewNumbers; + StrUtil.info(log, ar); + return ar; + } + private AllocationRequest buildAllocationRequest(ResourceRule resourceRule, ResourceEntity resourceEntity, ResourceTarget resourceTarget, ResourceRequest resourceRequest, boolean checkOnly, boolean change) { StrUtil.info(log, resourceRule); @@ -163,7 +224,8 @@ public class DbAllocationRule implements AllocationRule { ar.allocate = !checkOnly; ar.rangeList = rangeRule.rangeList; if (ar.rangeList == null || ar.rangeList.isEmpty()) { - if (resourceRequest.rangeMinOverride >= 0 && resourceRequest.rangeMaxOverride >= resourceRequest.rangeMinOverride) { + if (resourceRequest.rangeMinOverride >= 0 + && resourceRequest.rangeMaxOverride >= resourceRequest.rangeMinOverride) { ar.rangeList = new ArrayList<>(); Range range = new Range(); range.min = resourceRequest.rangeMinOverride; @@ -177,6 +239,7 @@ public class DbAllocationRule implements AllocationRule { if (resourceRequest.rangeMaxOverride >= 0) { ar.rangeList.get(ar.rangeList.size() - 1).max = resourceRequest.rangeMaxOverride; } + } ar.forceNewNumbers = resourceRequest.rangeForceNewNumbers; return ar; @@ -189,4 +252,4 @@ public class DbAllocationRule implements AllocationRule { public void setRangeRuleDao(RangeRuleDao rangeRuleDao) { this.rangeRuleDao = rangeRuleDao; } -} +} \ No newline at end of file diff --git a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/comp/ResourceRequest.java b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/comp/ResourceRequest.java index a52ce385..36a13797 100644 --- a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/comp/ResourceRequest.java +++ b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/comp/ResourceRequest.java @@ -21,6 +21,11 @@ package org.onap.ccsdk.sli.adaptors.ra.comp; +import java.util.List; + +import org.onap.ccsdk.sli.adaptors.rm.data.Range; +import org.onap.ccsdk.sli.adaptors.rm.data.ResourceType; + public class ResourceRequest { public String resourceName; @@ -37,4 +42,6 @@ public class ResourceRequest { public boolean checkOnly; public String applicationId; public String endPointPosition; + public ResourceType resourceType; + public List rangeOverrideList; } diff --git a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/rule/dao/RangeRuleDaoImpl.java b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/rule/dao/RangeRuleDaoImpl.java index 4599314a..b021620b 100644 --- a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/rule/dao/RangeRuleDaoImpl.java +++ b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/rule/dao/RangeRuleDaoImpl.java @@ -40,8 +40,8 @@ public class RangeRuleDaoImpl implements RangeRuleDao { @Override public List getRangeRules(String serviceModel, String equipLevel) { - List rangeRuleList = - jdbcTemplate.query(GET_SQL, new Object[] {serviceModel, equipLevel}, (RowMapper) (rs, rowNum) -> { + return jdbcTemplate.query(GET_SQL, new Object[] { serviceModel, equipLevel }, + (RowMapper) (rs, rowNum) -> { RangeRule rl = new RangeRule(); rl.id = rs.getLong("range_rule_id"); rl.rangeName = rs.getString("range_name"); @@ -71,17 +71,17 @@ public class RangeRuleDaoImpl implements RangeRuleDao { } } if (nn.length > 2) { - log.warn("Invalid value found in DB for range: " + rangeStr); + log.warn("Invalid value found in DB for range: {}", rangeStr); } rl.rangeList.add(range); } return rl; }); - return rangeRuleList; + } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } -} +} \ No newline at end of file diff --git a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/rm/util/RangeUtil.java b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/rm/util/RangeUtil.java index fdc8a2b1..2e378f1a 100644 --- a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/rm/util/RangeUtil.java +++ b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/rm/util/RangeUtil.java @@ -56,7 +56,7 @@ public class RangeUtil { if (req.rangeList != null && !req.rangeList.isEmpty()) { boolean good = false; for (Range range : req.rangeList) { - if (num < range.min || num > range.min) { + if (num < range.min || num > range.max) { continue; } -- cgit 1.2.3-korg