aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiharika Sharma <niharika.sharma@amdocs.com>2021-03-25 17:07:04 -0400
committerNiharika Sharma <niharika.sharma@amdocs.com>2021-03-25 21:32:01 +0000
commitd010436eadddc878ddfc50c8f8908817f5231804 (patch)
tree7db98819fab15826b514cb819a84b599f56f405e
parenteab4c7ce3ebe4d202f94b22836c9e1b9af023d84 (diff)
Fixed Concurrent Updates overriding the AAI object such as Pserver
Issue-ID: AAI-3308 Signed-off-by: Niharika Sharma <niharika.sharma@amdocs.com> Change-Id: I5f5b89d6304f382c186ae03f3f70ba60097ff6e3
-rw-r--r--.gitignore1
-rw-r--r--src/main/java/org/onap/aai/dbgen/schemamod/SchemaMod.java13
-rw-r--r--src/main/java/org/onap/aai/dbgen/schemamod/SchemaModInternalBatch.java21
-rw-r--r--src/main/scripts/schemaMod.sh11
-rw-r--r--src/test/java/org/onap/aai/dbgen/schemamod/SchemaModTest.java4
5 files changed, 34 insertions, 16 deletions
diff --git a/.gitignore b/.gitignore
index d904233..c491c41 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,4 +11,5 @@ debug-logs/
.settings/
.project
.classpath
+*.DS_Store
src/main/resources/etc/scriptdata/addmanualdata/tenant_isolation/payload/
diff --git a/src/main/java/org/onap/aai/dbgen/schemamod/SchemaMod.java b/src/main/java/org/onap/aai/dbgen/schemamod/SchemaMod.java
index 6e48d4b..7fbc449 100644
--- a/src/main/java/org/onap/aai/dbgen/schemamod/SchemaMod.java
+++ b/src/main/java/org/onap/aai/dbgen/schemamod/SchemaMod.java
@@ -68,23 +68,26 @@ public class SchemaMod {
String targetDataType = "";
String targetIndexInfo = "";
String preserveDataFlag = "";
+ String consistencyLockFlag = "";
String commitBlockSizeStr = "";
long commitBlockSize = 120000;
- String usageString = "Usage: SchemaMod propertyName targetDataType targetIndexInfo preserveDataFlag [blockSize] \n";
+ String usageString = "Usage: SchemaMod propertyName targetDataType targetIndexInfo preserveDataFlag consistencyLockFlag [blockSize] \n";
- if (args.length == 4) {
+ if (args.length == 5) {
propName = args[0];
targetDataType = args[1];
targetIndexInfo = args[2];
preserveDataFlag = args[3];
+ consistencyLockFlag = args[4];
}
- else if (args.length == 5) {
+ else if (args.length == 6) {
propName = args[0];
targetDataType = args[1];
targetIndexInfo = args[2];
preserveDataFlag = args[3];
- commitBlockSizeStr = args[4];
+ consistencyLockFlag = args[4];
+ commitBlockSizeStr = args[5];
}
else {
String emsg = "Incorrect number of Parameters passed. \n" + usageString;
@@ -148,7 +151,7 @@ public class SchemaMod {
TransactionalGraphEngine engine = null;
try {
engine = new JanusGraphDBEngine(queryStyle, loader);
- SchemaModInternalBatch internal = new SchemaModInternalBatch(engine, logger, propName, targetDataType, targetIndexInfo, Boolean.parseBoolean(preserveDataFlag), commitBlockSize);
+ SchemaModInternalBatch internal = new SchemaModInternalBatch(engine, logger, propName, targetDataType, targetIndexInfo, Boolean.parseBoolean(preserveDataFlag), Boolean.parseBoolean(consistencyLockFlag), commitBlockSize);
internal.execute();
engine.startTransaction();
engine.tx().close();
diff --git a/src/main/java/org/onap/aai/dbgen/schemamod/SchemaModInternalBatch.java b/src/main/java/org/onap/aai/dbgen/schemamod/SchemaModInternalBatch.java
index e88e2bf..e88c261 100644
--- a/src/main/java/org/onap/aai/dbgen/schemamod/SchemaModInternalBatch.java
+++ b/src/main/java/org/onap/aai/dbgen/schemamod/SchemaModInternalBatch.java
@@ -32,6 +32,8 @@ import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.janusgraph.core.schema.ConsistencyModifier;
+import org.janusgraph.core.schema.JanusGraphIndex;
import org.onap.aai.serialization.engines.TransactionalGraphEngine;
import org.onap.aai.util.FormatDate;
@@ -48,17 +50,19 @@ public class SchemaModInternalBatch {
private final Class<?> type;
private final String indexType;
private final boolean preserveData;
+ private final boolean consistencyLock;
private final Cardinality cardinality;
private final long commitBlockSize;
private final Logger logger;
public SchemaModInternalBatch(TransactionalGraphEngine engine, Logger logger, String propName,
- String type, String indexType, boolean preserveData, long commitBlockSize) {
+ String type, String indexType, boolean preserveData, boolean consistencyLock, long commitBlockSize) {
this.engine = engine;
this.propName = propName;
this.type = determineClass(type);
this.indexType = indexType;
this.preserveData = preserveData;
+ this.consistencyLock = consistencyLock;
this.cardinality = determineCardinality(type);
this.commitBlockSize = commitBlockSize;
this.logger = logger;
@@ -226,14 +230,23 @@ public class SchemaModInternalBatch {
// targetDataType
PropertyKey freshPropKey = graphMgt.makePropertyKey(propName).dataType(type)
.cardinality(cardinality).make();
-
+ if (consistencyLock) {
+ logAndPrint(logger, " -- Consistency Lock is being set on the property ");
+ graphMgt.setConsistency(freshPropKey, ConsistencyModifier.LOCK);
+ }
// Create the appropriate index (if any)
+ JanusGraphIndex indexG = null;
if (indexType.equals("uniqueIndex")) {
String freshIndexName = propName + dteStr;
- graphMgt.buildIndex(freshIndexName, Vertex.class).addKey(freshPropKey).unique().buildCompositeIndex();
+ indexG = graphMgt.buildIndex(freshIndexName, Vertex.class).addKey(freshPropKey).unique().buildCompositeIndex();
} else if (indexType.equals("index")) {
String freshIndexName = propName + dteStr;
- graphMgt.buildIndex(freshIndexName, Vertex.class).addKey(freshPropKey).buildCompositeIndex();
+ indexG = graphMgt.buildIndex(freshIndexName, Vertex.class).addKey(freshPropKey).buildCompositeIndex();
+ }
+
+ if(indexG != null && consistencyLock) {
+ logAndPrint(logger, " -- Consistency Lock is being set on the index ");
+ graphMgt.setConsistency(indexG, ConsistencyModifier.LOCK);
}
logAndPrint(logger, "Committing schema changes with graphMgt.commit()");
diff --git a/src/main/scripts/schemaMod.sh b/src/main/scripts/schemaMod.sh
index c7b8ce9..8e6c0bb 100644
--- a/src/main/scripts/schemaMod.sh
+++ b/src/main/scripts/schemaMod.sh
@@ -13,19 +13,20 @@
# just to change existing instances of the schema since schemaGenerator does not
# update things - it just does the initial creation.
#
-# To use this script, there are 4 required parameters, and one optional:
+# To use this script, there are 5 required parameters, and one optional:
# propertyName -- the name of the property that you need to change either the index or dataType on
# targetDataType -- whether it's changing or not, you need to give it: String, Integer, Boolean or Long
# targetIndexInfo -- whether it's changing or not, you need to give it: index, noIndex or uniqueIndex
# preserveDataFlag -- true or false. The only reason I can think of why you'd ever want to
# set this to false would be maybe if you were changing to an incompatible dataType so didn't
# want it to try to use the old data (and fail). But 99% of the time this will just be 'true'.
+# consistencyLock -- true or false. Whether to enable consistency lock on the property or not
#
# commitBlockSize -- OPTIONAL -- how many updates to commit at once.
# Default will be used if no value is passed.
#
-# Ie. schemaMod flavor-id String index true
-# or, schemaMod flavor-id String noIndex true 50000
+# Ie. schemaMod flavor-id String index true true
+# or, schemaMod flavor-id String noIndex true true 50000
#
COMMON_ENV_PATH=$( cd "$(dirname "$0")" ; pwd -P )
@@ -33,9 +34,9 @@ COMMON_ENV_PATH=$( cd "$(dirname "$0")" ; pwd -P )
start_date;
check_user;
-if [ "$#" -ne 4 ] && [ "$#" -ne 5 ]; then
+if [ "$#" -ne 5 ] && [ "$#" -ne 6 ]; then
echo "Illegal number of parameters"
- echo "usage: $0 propertyName targetDataType targetIndexInfo preserveDataFlag [blockSize]"
+ echo "usage: $0 propertyName targetDataType targetIndexInfo preserveDataFlag consistencyLock [blockSize]"
exit 1
fi
diff --git a/src/test/java/org/onap/aai/dbgen/schemamod/SchemaModTest.java b/src/test/java/org/onap/aai/dbgen/schemamod/SchemaModTest.java
index e40a3e1..caccccf 100644
--- a/src/test/java/org/onap/aai/dbgen/schemamod/SchemaModTest.java
+++ b/src/test/java/org/onap/aai/dbgen/schemamod/SchemaModTest.java
@@ -100,9 +100,9 @@ public class SchemaModTest extends AAISetup {
@Test
public void testSchemaModDataType() throws AAIException {
- String usageString = "Usage: SchemaMod propertyName targetDataType targetIndexInfo preserveDataFlag \n";
+ String usageString = "Usage: SchemaMod propertyName targetDataType targetIndexInfo preserveDataFlag consistencyLock \n";
String[] args = {
- "hostname", "String", "noIndex", "false"
+ "hostname", "String", "noIndex", "false", "false"
};
schemaMod.execute(args);