aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/onap/aai/dbgen/ForceDeleteTool.java78
-rw-r--r--src/main/java/org/onap/aai/migration/v12/MigrateModelVerDistriubutionStatusProperty.java85
-rw-r--r--src/main/java/org/onap/aai/migration/v12/MigratePATHPhysicalInventory.java348
-rw-r--r--src/main/java/org/onap/aai/migration/v12/MigrateServiceInstanceToConfiguration.java193
4 files changed, 49 insertions, 655 deletions
diff --git a/src/main/java/org/onap/aai/dbgen/ForceDeleteTool.java b/src/main/java/org/onap/aai/dbgen/ForceDeleteTool.java
index c12f3f3..7bb0555 100644
--- a/src/main/java/org/onap/aai/dbgen/ForceDeleteTool.java
+++ b/src/main/java/org/onap/aai/dbgen/ForceDeleteTool.java
@@ -100,24 +100,29 @@ public class ForceDeleteTool {
for (int i = 0; i < args.length; i++) {
String thisArg = args[i];
argStr4Msg = argStr4Msg + " " + thisArg;
-
if (thisArg.equals("-action")) {
i++;
if (i >= args.length) {
logger.error(" No value passed with -action option. ");
+ System.out.println(" No value passed with -action option. ");
exit(0);
}
- actionVal = args[i];
- argStr4Msg = argStr4Msg + " " + actionVal;
+ else {
+ actionVal = args[i];
+ argStr4Msg = argStr4Msg + " " + actionVal;
+ }
}
else if (thisArg.equals("-userId")) {
i++;
if (i >= args.length) {
logger.error(" No value passed with -userId option. ");
+ System.out.println(" No value passed with -userId option. ");
exit(0);
}
- userIdVal = args[i];
- argStr4Msg = argStr4Msg + " " + userIdVal;
+ else {
+ userIdVal = args[i];
+ argStr4Msg = argStr4Msg + " " + userIdVal;
+ }
}
else if (thisArg.equals("-overRideProtection")) {
overRideProtection = true;
@@ -129,40 +134,54 @@ public class ForceDeleteTool {
i++;
if (i >= args.length) {
logger.error(" No value passed with -vertexId option. ");
+ System.out.println(" No value passed with -vertexId option. ");
exit(0);
}
- String nextArg = args[i];
- argStr4Msg = argStr4Msg + " " + nextArg;
- try {
- vertexIdLong = Long.parseLong(nextArg);
- } catch (Exception e) {
- logger.error("Bad value passed with -vertexId option: ["
+ else {
+ String nextArg = args[i];
+ argStr4Msg = argStr4Msg + " " + nextArg;
+
+ try {
+ vertexIdLong = Long.parseLong(nextArg);
+ } catch (Exception e) {
+ logger.error("Bad value passed with -vertexId option: ["
+ nextArg + "]");
- exit(0);
+ System.out.println("Bad value passed with -vertexId option: ["
+ + nextArg + "]");
+ exit(0);
+ }
}
}
else if (thisArg.equals("-params4Collect")) {
i++;
if (i >= args.length) {
logger.error(" No value passed with -params4Collect option. ");
+ System.out.println(" No value passed with -params4Collect option. ");
exit(0);
}
- dataString = args[i];
- argStr4Msg = argStr4Msg + " " + dataString;
+ else {
+ dataString = args[i];
+ argStr4Msg = argStr4Msg + " " + dataString;
+ }
}
else if (thisArg.equals("-edgeId")) {
i++;
if (i >= args.length) {
logger.error(" No value passed with -edgeId option. ");
+ System.out.println(" No value passed with -edgeId option. ");
exit(0);
}
- String nextArg = args[i];
- argStr4Msg = argStr4Msg + " " + nextArg;
- edgeIdStr = nextArg;
+ else {
+ String nextArg = args[i];
+ argStr4Msg = argStr4Msg + " " + nextArg;
+ edgeIdStr = nextArg;
+ }
}
else {
logger.error(" Unrecognized argument passed to ForceDeleteTool: ["
+ thisArg + "]. ");
+ System.out.println(" Unrecognized argument passed to ForceDeleteTool: ["
+ + thisArg + "]");
logger.error(" Valid values are: -action -userId -vertexId -edgeId -overRideProtection -params4Collect -DISPLAY_ALL_VIDS");
exit(0);
}
@@ -349,18 +368,19 @@ public class ForceDeleteTool {
System.out.println(infMsg);
exit(0);
}
-
- if( fd.getEdgeDelConfirmation(logger, userIdVal, thisEdge, overRideProtection) ){
- thisEdge.remove();
- graph.tx().commit();
- String infMsg = ">>>>>>>>>> Removed edge with edgeId = " + edgeIdStr;
- logger.debug( infMsg );
- System.out.println(infMsg);
- }
- else {
- String infMsg = " Delete Cancelled. ";
- System.out.println(infMsg);
- logger.debug( infMsg );
+ else {
+ if( fd.getEdgeDelConfirmation(logger, userIdVal, thisEdge, overRideProtection) ){
+ thisEdge.remove();
+ graph.tx().commit();
+ String infMsg = ">>>>>>>>>> Removed edge with edgeId = " + edgeIdStr;
+ logger.debug( infMsg );
+ System.out.println(infMsg);
+ }
+ else {
+ String infMsg = " Delete Cancelled. ";
+ System.out.println(infMsg);
+ logger.debug( infMsg );
+ }
}
exit(0);
}
diff --git a/src/main/java/org/onap/aai/migration/v12/MigrateModelVerDistriubutionStatusProperty.java b/src/main/java/org/onap/aai/migration/v12/MigrateModelVerDistriubutionStatusProperty.java
deleted file mode 100644
index c09643f..0000000
--- a/src/main/java/org/onap/aai/migration/v12/MigrateModelVerDistriubutionStatusProperty.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-package org.onap.aai.migration.v12;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.onap.aai.db.props.AAIProperties;
-import org.onap.aai.edges.EdgeIngestor;
-import org.onap.aai.introspection.LoaderFactory;
-import org.onap.aai.migration.*;
-import org.onap.aai.serialization.db.EdgeSerializer;
-import org.onap.aai.serialization.engines.TransactionalGraphEngine;
-import org.onap.aai.setup.SchemaVersions;
-
-import java.util.Optional;
-
-@MigrationPriority(20)
-@MigrationDangerRating(2)
-public class MigrateModelVerDistriubutionStatusProperty extends Migrator{
-
- private final String PARENT_NODE_TYPE = "model-ver";
- private boolean success = true;
-
- public MigrateModelVerDistriubutionStatusProperty(TransactionalGraphEngine engine, LoaderFactory loaderFactory, EdgeIngestor edgeIngestor, EdgeSerializer edgeSerializer, SchemaVersions schemaVersions) {
- super(engine, loaderFactory, edgeIngestor, edgeSerializer, schemaVersions);
- }
-
-
-
- @Override
- public void run() {
-
-
- GraphTraversal<Vertex, Vertex> f = this.engine.asAdmin().getTraversalSource().V().has(AAIProperties.NODE_TYPE,"model-ver");
-
- while(f.hasNext()) {
- Vertex v = f.next();
- try {
- v.property("distribution-status", "DISTRIBUTION_COMPLETE_OK");
- logger.info("changed model-ver.distribution-status property value for model-version-id: " + v.property("model-version-id").value());
-
- } catch (Exception e) {
- e.printStackTrace();
- success = false;
- logger.error("encountered exception for model-version-id:" + v.property("model-version-id").value(), e);
- }
- }
- }
-
-
- @Override
- public Status getStatus() {
- if (success) {
- return Status.SUCCESS;
- } else {
- return Status.FAILURE;
- }
- }
- @Override
- public Optional<String[]> getAffectedNodeTypes() {
- return Optional.of(new String[]{PARENT_NODE_TYPE});
- }
-
- @Override
- public String getMigrationName() {
- return "MigrateModelVerDistriubutionStatusProperty";
- }
-
-}
diff --git a/src/main/java/org/onap/aai/migration/v12/MigratePATHPhysicalInventory.java b/src/main/java/org/onap/aai/migration/v12/MigratePATHPhysicalInventory.java
deleted file mode 100644
index af3d90a..0000000
--- a/src/main/java/org/onap/aai/migration/v12/MigratePATHPhysicalInventory.java
+++ /dev/null
@@ -1,348 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-package org.onap.aai.migration.v12;
-/*-
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.onap.aai.db.props.AAIProperties;
-import org.onap.aai.edges.EdgeIngestor;
-import org.onap.aai.introspection.Introspector;
-import org.onap.aai.introspection.LoaderFactory;
-import org.onap.aai.migration.MigrationDangerRating;
-import org.onap.aai.migration.MigrationPriority;
-import org.onap.aai.migration.Migrator;
-import org.onap.aai.migration.Status;
-import org.onap.aai.serialization.db.EdgeSerializer;
-import org.onap.aai.serialization.engines.TransactionalGraphEngine;
-import org.onap.aai.setup.SchemaVersions;
-import org.onap.aai.util.AAIConfig;
-
-
-@MigrationPriority(26)
-@MigrationDangerRating(100)
-public class MigratePATHPhysicalInventory extends Migrator {
-
- private static List<String> lagPortList = new ArrayList<String>();
- private static Map<String, Vertex> pnfList = new HashMap<String, Vertex>();
- private final String LAGINTERFACE_NODE_TYPE = "lag-interface";
- private final String PNF_NODE_TYPE = "pnf";
- private final String PROPERTY_PNF_NAME = "pnf-name";
- private final String PROPERTY_INTERFACE_NAME = "interface-name";
- private final String LAG_INTERFACE_NODE_TYPE = "lag-interface";
- private static boolean success = true;
- private static boolean checkLog = false;
- private static GraphTraversalSource g = null;
- private int headerLength;
-
- private static List<String> dmaapMsgList = new ArrayList<String>();
- private static final String homeDir = System.getProperty("AJSC_HOME");
-
- //Create a map to store the evcs processed where lag-interfaces were found to track the sequence of ports
- //key contains the evcName
- //value is a map that contains the mapping for sequence of forwarders and corresponding portAids in the order they are found
-
- private static Map<String, Map<Vertex, String>> pathFileMap = new HashMap<String, Map<Vertex, String>>();
-
- private static int processedLagInterfacesCount = 0;
- private static int skippedRowCount = 0;
- //Map with lineNumber and the reason for failure for each interface
- private static Map<String, String> lagInterfacesNotProcessedMap = new HashMap<String, String>();
-
-
- public MigratePATHPhysicalInventory(TransactionalGraphEngine engine, LoaderFactory loaderFactory, EdgeIngestor edgeIngestor, EdgeSerializer edgeSerializer, SchemaVersions schemaVersions) {
- super(engine, loaderFactory, edgeIngestor, edgeSerializer, schemaVersions);
- this.g = this.engine.asAdmin().getTraversalSource();
- }
-
- @Override
- public void run() {
- logger.info("---------- Start migration of PATH file Physical Inventory ----------");
- String configDir = System.getProperty("BUNDLECONFIG_DIR");
- if (homeDir == null) {
- logger.info("ERROR: Could not find sys prop AJSC_HOME");
- success = false;
- return;
- }
- if (configDir == null) {
- success = false;
- return;
- }
-
- String feedDir = homeDir + "/" + configDir + "/" + "migration-input-files/sarea-inventory/";
- int fileLineCounter = 0;
- String fileName = feedDir+ "path.csv";
- logger.info(fileName);
- logger.info("---------- Processing PATH Entries from file ----------");
- try {
- List<String> lines = Files.readAllLines(Paths.get(fileName));
- Iterator<String> lineItr = lines.iterator();
- while (lineItr.hasNext()){
- String line = lineItr.next().replace("\n", "").replace("\r", "");
- logger.info("\n");
- if (!line.isEmpty()) {
- if (fileLineCounter != 0) {
- String[] colList = line.split("\\s*,\\s*", -1);
- Map<String, String> pathColValues = new HashMap<String, String>();
- pathColValues.put("evcName", colList[1]);
- pathColValues.put("bearerFacingCircuit", colList[4]);
- pathColValues.put("bearerCvlan", colList[6]);
- pathColValues.put("bearerSvlan", colList[7]);
- pathColValues.put("bearerPtniiName", colList[8]);
- pathColValues.put("bearerPortAid", colList[12]);
- pathColValues.put("collectorFacingCircuit", colList[14]);
- pathColValues.put("collectorCvlan", colList[16]);
- pathColValues.put("collectorSvlan", colList[17]);
- pathColValues.put("collectorPtniiName", colList[18]);
- pathColValues.put("collectorPortAid", colList[22]);
-
- // For each row, check if the collector and bearerPnfs exist and create lag interfaces
-
- validateCollectorPnfAndCreateLagInterface(pathColValues, (fileLineCounter+1));
- validateBearerPnfAndCreateLagInterface(pathColValues, (fileLineCounter+1));
-
- } else {
- this.headerLength = line.split("\\s*,\\s*", -1).length;
- logger.info("headerLength: " + headerLength);
- if (this.headerLength < 21){
- logger.info("ERROR: Input file should have 21 columns");
- this.success = false;
- return;
- }
- }
- }
- fileLineCounter++;
- }
- logger.info ("\n \n ******* Final Summary for PATH FILE Physical Inventory Migration ********* \n");
- logger.info("Lag Interfaces processed: "+processedLagInterfacesCount);
- logger.info("Total Rows Count: "+(fileLineCounter + 1));
- logger.info("Fallout Lag Interfaces Count : "+lagInterfacesNotProcessedMap.size() +"\n");
-
- if (!lagInterfacesNotProcessedMap.isEmpty()) {
- logger.info("------ Fallout Details: ------");
- lagInterfacesNotProcessedMap.forEach((lineEntry, errorMsg) -> {
- int lineNumberIndex = lineEntry.indexOf("-");
- String lineNumber = lineEntry.substring(0, lineNumberIndex);
- String portDetail = lineEntry.substring(lineNumberIndex+1);
- logger.info(errorMsg + ": on row "+ lineNumber +" for PortAid ["+ portDetail+"]");
- });
- }
- } catch (FileNotFoundException e) {
- logger.info("ERROR: Could not file file " + fileName, e.getMessage());
- success = false;
- checkLog = true;
- } catch (IOException e) {
- logger.info("ERROR: Issue reading file " + fileName, e);
- success = false;
- } catch (Exception e) {
- logger.info("encountered exception", e);
- e.printStackTrace();
- success = false;
- }
- }
-
-
- private void validateBearerPnfAndCreateLagInterface(Map<String, String> pathColValues, int lineNumber) {
- String bearerPtniiName = pathColValues.get("bearerPtniiName");
- String bearerPortAid = pathColValues.get("bearerPortAid");
- Vertex pnfVtx = getPnf(bearerPtniiName);
- if (pnfVtx != null){
- //create lag-interface
- createLagInterfaceObject(pnfVtx, bearerPortAid, lineNumber);
- } else {
- int lagIdentifierIndex = bearerPortAid.indexOf("_");
- if (lagIdentifierIndex > 0) {
- lagInterfacesNotProcessedMap.put(""+ lineNumber+ "-"+bearerPtniiName+"-"+bearerPortAid+"", "Pnf ["+bearerPtniiName+"] not found" );
- }
- }
-
- }
-
- private void validateCollectorPnfAndCreateLagInterface(Map<String, String> pathColValues, int lineNumber) {
- String collectorPtniiName = pathColValues.get("collectorPtniiName");
- String collectorPortAid = pathColValues.get("collectorPortAid");
- Vertex pnfVtx = getPnf(collectorPtniiName);
- if (pnfVtx != null){
- //create lag-interface
- createLagInterfaceObject(pnfVtx, collectorPortAid, lineNumber);
- }else {
- int lagIdentifierIndex = collectorPortAid.indexOf("_");
- if (lagIdentifierIndex > 0) {
- lagInterfacesNotProcessedMap.put(""+ lineNumber+ "-"+collectorPtniiName+"-"+collectorPortAid+"", "Pnf ["+collectorPtniiName+"] not found" );
- }
- }
- }
-
- private void createLagInterfaceObject(Vertex pnfVtx, String portAid, int lineNumber) {
- String pnfName = pnfVtx.value(PROPERTY_PNF_NAME);
-
- if (pnfName != null && !pnfName.isEmpty()) {
-
- if(portAid == null || portAid.isEmpty()){
- logger.info("\t Invalid Port entry [" +portAid + "] - Invalid record - skipping..." );
- } else{
- if (!AAIConfig.isEmpty(portAid)) {
- GraphTraversal<Vertex, Vertex> portList;
-
- boolean isPortAidALagIntf = false;
- String interfaceName = null;
-
- int lagIdentifierIndex = portAid.indexOf("_");
-
- if (lagIdentifierIndex > 0) {
- String[] subStringList = portAid.split("_");
- interfaceName = subStringList[0];
- isPortAidALagIntf = true;
- }
-
- if (isPortAidALagIntf)
- {
- try {
-
- if (lagPortList != null && lagPortList.contains(pnfName+"_"+interfaceName)){
- logger.info("\t lag-interface [" + interfaceName + "] already exists in AAI - skipping");
- return;
- }
-
-
- portList = g.V(pnfVtx).in("tosca.relationships.network.BindsTo").has("interface-name", interfaceName).has("aai-node-type", "lag-interface");
- if (portList!= null && portList.hasNext()) {
- Vertex lagInterfaceVtx = portList.next();
- if (lagInterfaceVtx != null && lagInterfaceVtx.property("interface-name").isPresent()) {
- logger.info("\t lag-interface [" + interfaceName + "] already exists in AAI - skipping");
-// lagInterfacesNotProcessedMap.put(""+lineNumber+"-"+pnfName+"-"+portAid+"", "lag-interface already exists for ["+interfaceName+"]" );
- }
- }
- else if (portList == null || !portList.hasNext()) {
- //Create lag-interface in pnf
- Introspector lagInterface = loader.introspectorFromName(LAG_INTERFACE_NODE_TYPE);
-
- Vertex lagIntVtx = serializer.createNewVertex(lagInterface);
- lagInterface.setValue("interface-name", interfaceName);
- this.createTreeEdge(pnfVtx, lagIntVtx);
- serializer.serializeSingleVertex(lagIntVtx, lagInterface, "migrations");
-
- logger.info("\t Created new lag-interface " + lagIntVtx + " with interface-name= " + lagIntVtx.value("interface-name"));
-
- processedLagInterfacesCount++;
- lagPortList.add(pnfName+"_"+interfaceName);
-
- String dmaapMsg = System.nanoTime() + "_" + lagIntVtx.id().toString() + "_" + lagIntVtx.value("resource-version").toString();
- dmaapMsgList.add(dmaapMsg);
-// Introspector introspector = serializer.getLatestVersionView(lagIntVtx);
-// this.notificationHelper.addEvent(lagIntVtx, introspector, EventAction.CREATE, this.serializer.getURIForVertex(lagIntVtx, false));
-// logger.info("\t Dmaap event sent for " + lagIntVtx + " with interface-name= " + lagIntVtx.value("interface-name").toString() );
- }
- } catch (Exception e) {
- logger.info("\t ERROR: Failure to create lag-interface ["+ interfaceName + "]");
- lagInterfacesNotProcessedMap.put(""+lineNumber+"-"+pnfName+"-"+portAid+"", "Failed to create lag-interface ["+interfaceName+"]" );
- }
- }
- else
- {
- logger.info("\t Port-Aid[" +portAid +"] on PNF["+pnfName+"] not a lag-interface, skipping....");
- }
- }
-
- }
- }
- }
-
-
- private Vertex getPnf(String ptniiName) {
- Vertex pnfVtx = null;
- if (!AAIConfig.isEmpty(ptniiName)) {
- if (!pnfList.isEmpty() && pnfList.containsKey(ptniiName)){
- return pnfList.get(ptniiName);
- }
- List<Vertex> collectorPnfList = g.V().has(this.PROPERTY_PNF_NAME, ptniiName).has(AAIProperties.NODE_TYPE, PNF_NODE_TYPE).toList();
- if (collectorPnfList != null && collectorPnfList.size() == 1) {
- pnfVtx = collectorPnfList.get(0);
- pnfList.put(ptniiName, pnfVtx);
- logger.info("\t Pnf [" + ptniiName + "] found in AAI");
- } else if (collectorPnfList == null || collectorPnfList.size() == 0) {
- logger.info("\t ERROR: Failure to find Pnf [" + ptniiName + "]" );
- }
- } else {
- logger.info("\t ERROR: Failure to find Pnf [" + ptniiName + "]" );
- }
- return pnfVtx;
- }
-
- @Override
- public Status getStatus() {
- if (checkLog) {
- return Status.CHECK_LOGS;
- }
- else if (success) {
- return Status.SUCCESS;
- }
- else {
- return Status.FAILURE;
- }
- }
-
- @Override
- public void commit() {
- engine.commit();
- createDmaapFiles(dmaapMsgList);
- }
-
- @Override
- public Optional<String[]> getAffectedNodeTypes() {
- return Optional.of(new String[]{this.LAG_INTERFACE_NODE_TYPE});
- }
-
- @Override
- public String getMigrationName() {
- return "MigratePATHPhysicalInventory";
- }
-}
diff --git a/src/main/java/org/onap/aai/migration/v12/MigrateServiceInstanceToConfiguration.java b/src/main/java/org/onap/aai/migration/v12/MigrateServiceInstanceToConfiguration.java
deleted file mode 100644
index b4208af..0000000
--- a/src/main/java/org/onap/aai/migration/v12/MigrateServiceInstanceToConfiguration.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-package org.onap.aai.migration.v12;
-
-import java.io.UnsupportedEncodingException;
-import java.util.Iterator;
-import java.util.Optional;
-import java.util.UUID;
-
-import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.onap.aai.db.props.AAIProperties;
-import org.onap.aai.edges.EdgeIngestor;
-import org.onap.aai.exceptions.AAIException;
-import org.onap.aai.introspection.Introspector;
-import org.onap.aai.introspection.LoaderFactory;
-import org.onap.aai.introspection.exceptions.AAIUnknownObjectException;
-import org.onap.aai.migration.MigrationDangerRating;
-import org.onap.aai.migration.MigrationPriority;
-import org.onap.aai.migration.Migrator;
-import org.onap.aai.migration.Status;
-import org.onap.aai.edges.enums.EdgeType;
-import org.onap.aai.serialization.db.EdgeSerializer;
-import org.onap.aai.serialization.engines.TransactionalGraphEngine;
-import org.onap.aai.setup.SchemaVersions;
-
-//@Enabled
-@MigrationPriority(10)
-@MigrationDangerRating(10)
-public class MigrateServiceInstanceToConfiguration extends Migrator {
-
- private boolean success = true;
- private final String CONFIGURATION_NODE_TYPE = "configuration";
- private final String SERVICE_INSTANCE_NODE_TYPE = "service-instance";
- private Introspector configObj;
-
- public MigrateServiceInstanceToConfiguration(TransactionalGraphEngine engine, LoaderFactory loaderFactory, EdgeIngestor edgeIngestor, EdgeSerializer edgeSerializer, SchemaVersions schemaVersions) {
- super(engine, loaderFactory, edgeIngestor, edgeSerializer, schemaVersions);
- try {
- this.configObj = this.loader.introspectorFromName(CONFIGURATION_NODE_TYPE);
- } catch (AAIUnknownObjectException e) {
- this.configObj = null;
- }
- }
-
- @Override
- public void run() {
- Vertex serviceInstance = null;
- Vertex configuration = null;
- String serviceInstanceId = "", tunnelBandwidth = "";
- String bandwidthTotal, configType, nodeType;
- GraphTraversal<Vertex, Vertex> serviceInstanceItr;
- Iterator<Vertex> configurationItr;
-
- try {
- serviceInstanceItr = this.engine.asAdmin().getTraversalSource().V()
- .has(AAIProperties.NODE_TYPE, P.within(getAffectedNodeTypes().get()))
- .where(this.engine.getQueryBuilder()
- .createEdgeTraversal(EdgeType.TREE, "service-instance", "service-subscription")
- .getVerticesByProperty("service-type", "DHV")
- .<GraphTraversal<?, ?>>getQuery());
-
- if (serviceInstanceItr == null || !serviceInstanceItr.hasNext()) {
- logger.info("No servince-instance nodes found with service-type of DHV");
- return;
- }
-
- // iterate through all service instances of service-type DHV
- while (serviceInstanceItr.hasNext()) {
- serviceInstance = serviceInstanceItr.next();
-
- if (serviceInstance != null && serviceInstance.property("bandwidth-total").isPresent()) {
- serviceInstanceId = serviceInstance.value("service-instance-id");
- logger.info("Processing service instance with id=" + serviceInstanceId);
- bandwidthTotal = serviceInstance.value("bandwidth-total");
-
- if (bandwidthTotal != null && !bandwidthTotal.isEmpty()) {
-
- // check for existing edges to configuration nodes
- configurationItr = serviceInstance.vertices(Direction.OUT, "has");
-
- // create new configuration node if service-instance does not have existing ones
- if (!configurationItr.hasNext()) {
- logger.info(serviceInstanceId + " has no existing configuration nodes, creating new node");
- createConfigurationNode(serviceInstance, bandwidthTotal);
- continue;
- }
-
- // in case if configuration nodes exist, but none are DHV
- boolean hasDHVConfig = false;
-
- // service-instance has existing configuration nodes
- while (configurationItr.hasNext()) {
- configuration = configurationItr.next();
- nodeType = configuration.value("aai-node-type").toString();
-
- if (configuration != null && "configuration".equalsIgnoreCase(nodeType)) {
- logger.info("Processing configuration node with id=" + configuration.property("configuration-id").value());
- configType = configuration.value("configuration-type");
- logger.info("Configuration type: " + configType);
-
- // if configuration-type is DHV, update tunnel-bandwidth to bandwidth-total value
- if ("DHV".equalsIgnoreCase(configType)) {
- if (configuration.property("tunnel-bandwidth").isPresent()) {
- tunnelBandwidth = configuration.value("tunnel-bandwidth");
- } else {
- tunnelBandwidth = "";
- }
-
- logger.info("Existing tunnel-bandwidth: " + tunnelBandwidth);
- configuration.property("tunnel-bandwidth", bandwidthTotal);
- touchVertexProperties(configuration, false);
- logger.info("Updated tunnel-bandwidth: " + configuration.value("tunnel-bandwidth"));
- hasDHVConfig = true;
- }
- }
- }
-
- // create new configuration node if none of existing config nodes are of type DHV
- if (!hasDHVConfig) {
- logger.info(serviceInstanceId + " has existing configuration nodes, but none are DHV, create new node");
- createConfigurationNode(serviceInstance, bandwidthTotal);
- }
- }
- }
- }
- } catch (AAIException | UnsupportedEncodingException e) {
- logger.error("Caught exception while processing service instance with id=" + serviceInstanceId + " | " + e.toString());
- success = false;
- }
- }
-
- private void createConfigurationNode(Vertex serviceInstance, String bandwidthTotal) throws UnsupportedEncodingException, AAIException {
- // create new vertex
- Vertex configurationNode = serializer.createNewVertex(configObj);
-
- // configuration-id: UUID format
- String configurationUUID = UUID.randomUUID().toString();
- configObj.setValue("configuration-id", configurationUUID);
-
- // configuration-type: DHV
- configObj.setValue("configuration-type", "DHV");
-
- // migrate the bandwidth-total property from the service-instance to the
- // tunnel-bandwidth property of the related configuration object
- configObj.setValue("tunnel-bandwidth", bandwidthTotal);
-
- // create edge between service instance and configuration: cousinEdge(out, in)
- createCousinEdge(serviceInstance, configurationNode);
-
- // serialize edge & vertex, takes care of everything
- serializer.serializeSingleVertex(configurationNode, configObj, "migrations");
- logger.info("Created configuration node with uuid=" + configurationUUID + ", tunnel-bandwidth=" + bandwidthTotal);
- }
-
- @Override
- public Status getStatus() {
- if (success) {
- return Status.SUCCESS;
- } else {
- return Status.FAILURE;
- }
- }
-
- @Override
- public Optional<String[]> getAffectedNodeTypes() {
- return Optional.of(new String[] {SERVICE_INSTANCE_NODE_TYPE});
- }
-
- @Override
- public String getMigrationName() {
- return "service-instance-to-configuration";
- }
-}