From 0a31b51a1248ff77996047c3fcae1346d2343e13 Mon Sep 17 00:00:00 2001 From: Niharika Sharma Date: Tue, 6 Oct 2020 16:23:46 -0400 Subject: [PATCH] Fixed concurrency issue in PNF uploading Issue-ID: AAI-3100 Signed-off-by: Niharika Sharma Change-Id: I34fe77179efc5590f6e70b0bb2b97e7229f0adf3 --- .../java/org/onap/aai/dbgen/SchemaGenerator.java | 27 ++++++++++++++++++---- .../main/java/org/onap/aai/util/AAIConstants.java | 3 +++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/aai-core/src/main/java/org/onap/aai/dbgen/SchemaGenerator.java b/aai-core/src/main/java/org/onap/aai/dbgen/SchemaGenerator.java index af81c2d2..37d497ab 100644 --- a/aai-core/src/main/java/org/onap/aai/dbgen/SchemaGenerator.java +++ b/aai-core/src/main/java/org/onap/aai/dbgen/SchemaGenerator.java @@ -19,13 +19,15 @@ */ package org.onap.aai.dbgen; - +import org.onap.aai.util.AAIConstants; import com.google.common.collect.Multimap; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.janusgraph.core.Cardinality; import org.janusgraph.core.Multiplicity; import org.janusgraph.core.PropertyKey; import org.janusgraph.core.schema.JanusGraphManagement; +import org.janusgraph.core.schema.JanusGraphIndex; +import org.janusgraph.core.schema.ConsistencyModifier; import org.onap.aai.config.SpringContextAware; import org.onap.aai.edges.EdgeIngestor; import org.onap.aai.edges.EdgeRule; @@ -116,6 +118,14 @@ public class SchemaGenerator { if (!seenProps.containsKey(dbPropName)) { propK = graphMgmt.makePropertyKey(dbPropName).dataType(type).cardinality(cardinality) .make(); + if (dbPropName.equals("aai-uri")) { + String aai_uri_lock_enabled = AAIConfig.get(AAIConstants.AAI_LOCK_URI_ENABLED, "false"); + LOGGER.info(" Info: aai_uri_lock_enabled:" + aai_uri_lock_enabled); + if ("true".equals(aai_uri_lock_enabled)) { + LOGGER.info(" Lock is being set for aai-uri Property."); + graphMgmt.setConsistency(propK, ConsistencyModifier.LOCK); + } + } seenProps.put(dbPropName, propK); } else { propK = seenProps.get(dbPropName); @@ -124,13 +134,22 @@ public class SchemaGenerator { LOGGER.debug(" Index [{}] already existed in the DB. ", dbPropName); } else { if (obj.getIndexedProperties().contains(propName)) { + JanusGraphIndex indexG = null; if (obj.getUniqueProperties().contains(propName)) { LOGGER.info("Add Unique index for PropertyKey: [{}]", dbPropName); - graphMgmt.buildIndex(dbPropName, Vertex.class).addKey(propK).unique() - .buildCompositeIndex(); + indexG = graphMgmt.buildIndex(dbPropName, Vertex.class).addKey(propK).unique() + .buildCompositeIndex(); } else { LOGGER.info("Add index for PropertyKey: [{}]", dbPropName); - graphMgmt.buildIndex(dbPropName, Vertex.class).addKey(propK).buildCompositeIndex(); + indexG = graphMgmt.buildIndex(dbPropName, Vertex.class).addKey(propK).buildCompositeIndex(); + } + if (indexG != null && dbPropName.equals("aai-uri")) { + String aai_uri_lock_enabled = AAIConfig.get(AAIConstants.AAI_LOCK_URI_ENABLED, "false"); + LOGGER.info(" Info:: aai_uri_lock_enabled:" + aai_uri_lock_enabled); + if ("true".equals(aai_uri_lock_enabled)) { + LOGGER.info("Lock is being set for aai-uri Index."); + graphMgmt.setConsistency(indexG, ConsistencyModifier.LOCK); + } } } else { LOGGER.info("No index added for PropertyKey: [{}]", dbPropName); diff --git a/aai-els-onap-logging/src/main/java/org/onap/aai/util/AAIConstants.java b/aai-els-onap-logging/src/main/java/org/onap/aai/util/AAIConstants.java index 3ddd008f..f44f736c 100644 --- a/aai-els-onap-logging/src/main/java/org/onap/aai/util/AAIConstants.java +++ b/aai-els-onap-logging/src/main/java/org/onap/aai/util/AAIConstants.java @@ -154,6 +154,9 @@ public final class AAIConstants { public static final String AAI_TRAVERSAL_MS = "aai-traversal"; public static final String AAI_RESOURCES_MS = "aai-resources"; + /** Flag to control concurrency lock */ + public static final String AAI_LOCK_URI_ENABLED = "aai.lock.uri.enabled"; + /** * Instantiates a new AAI constants. */ -- 2.16.6