This is an automated email from the ASF dual-hosted git repository. madhan pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/atlas.git
commit 7086a4ac3ebdda56c7f125edfd0014a3c2ad3f58 Author: Ashutosh Mestry <[email protected]> AuthorDate: Thu Jul 30 15:50:21 2020 -0700 ATLAS-3907: Java Patch Handler: Set index consistency. (cherry picked from commit 05eba3fdb9fedf3483cdb1cef938f7a2cbf7933e) --- .../repository/graphdb/AtlasGraphManagement.java | 5 ++ .../graphdb/janus/AtlasJanusGraphManagement.java | 35 ++++++++++++++ .../repository/patches/AtlasPatchManager.java | 3 +- .../repository/patches/IndexConsistencyPatch.java | 56 ++++++++++++++++++++++ 4 files changed, 98 insertions(+), 1 deletion(-) diff --git a/graphdb/api/src/main/java/org/apache/atlas/repository/graphdb/AtlasGraphManagement.java b/graphdb/api/src/main/java/org/apache/atlas/repository/graphdb/AtlasGraphManagement.java index fca7890..f7d2e27 100644 --- a/graphdb/api/src/main/java/org/apache/atlas/repository/graphdb/AtlasGraphManagement.java +++ b/graphdb/api/src/main/java/org/apache/atlas/repository/graphdb/AtlasGraphManagement.java @@ -167,4 +167,9 @@ public interface AtlasGraphManagement { * @return the encoded name for the index */ String getIndexFieldName(String indexName, AtlasPropertyKey propertyKey, boolean isStringField); + + /** + * Set consistency to ConsistencyModifier.LOCK for all vertex and edge indexes. + */ + void updateUniqueIndexesForConsistencyLock(); } diff --git a/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraphManagement.java b/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraphManagement.java index 6ef9cb7..d0cda71 100644 --- a/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraphManagement.java +++ b/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraphManagement.java @@ -20,6 +20,7 @@ package org.apache.atlas.repository.graphdb.janus; import com.google.common.base.Preconditions; import org.apache.atlas.repository.graphdb.AtlasEdgeDirection; import org.apache.tinkerpop.gremlin.structure.Direction; +import org.apache.tinkerpop.gremlin.structure.Element; import org.janusgraph.core.Cardinality; import org.janusgraph.core.EdgeLabel; import org.janusgraph.core.PropertyKey; @@ -274,4 +275,38 @@ public class AtlasJanusGraphManagement implements AtlasGraphManagement { indexBuilder.buildCompositeIndex(); } + + @Override + public void updateUniqueIndexesForConsistencyLock() { + try { + setConsistency(this.management, Vertex.class); + setConsistency(this.management, Edge.class); + } finally { + commit(); + } + } + + private static void setConsistency(JanusGraphManagement mgmt, Class<? extends Element> elementType) { + LOG.info("setConsistency: {}: Starting...", elementType.getSimpleName()); + int count = 0; + + try { + Iterable<JanusGraphIndex> iterable = mgmt.getGraphIndexes(elementType); + for (JanusGraphIndex index : iterable) { + if (!index.isCompositeIndex() || !index.isUnique() || mgmt.getConsistency(index) == ConsistencyModifier.LOCK) { + continue; + } + + for (PropertyKey propertyKey : index.getFieldKeys()) { + LOG.info("setConsistency: {}: {}", count, propertyKey.name()); + } + + mgmt.setConsistency(index, ConsistencyModifier.LOCK); + count++; + } + } + finally { + LOG.info("setConsistency: {}: {}: Done!", elementType.getSimpleName(), count); + } + } } \ No newline at end of file diff --git a/repository/src/main/java/org/apache/atlas/repository/patches/AtlasPatchManager.java b/repository/src/main/java/org/apache/atlas/repository/patches/AtlasPatchManager.java index 093edf9..b142a2a 100644 --- a/repository/src/main/java/org/apache/atlas/repository/patches/AtlasPatchManager.java +++ b/repository/src/main/java/org/apache/atlas/repository/patches/AtlasPatchManager.java @@ -53,7 +53,8 @@ public class AtlasPatchManager { new UniqueAttributePatch(context), new ClassificationTextPatch(context), new FreeTextRequestHandlerPatch(context), - new SuggestionsRequestHandlerPatch(context) + new SuggestionsRequestHandlerPatch(context), + new IndexConsistencyPatch(context) }; try { diff --git a/repository/src/main/java/org/apache/atlas/repository/patches/IndexConsistencyPatch.java b/repository/src/main/java/org/apache/atlas/repository/patches/IndexConsistencyPatch.java new file mode 100644 index 0000000..2abe73c --- /dev/null +++ b/repository/src/main/java/org/apache/atlas/repository/patches/IndexConsistencyPatch.java @@ -0,0 +1,56 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * 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. + */ +package org.apache.atlas.repository.patches; + +import org.apache.atlas.exception.AtlasBaseException; +import org.apache.atlas.repository.graphdb.AtlasGraph; +import org.apache.atlas.type.AtlasTypeRegistry; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import static org.apache.atlas.model.patches.AtlasPatch.PatchStatus.APPLIED; + +public class IndexConsistencyPatch extends AtlasPatchHandler { + private static final Logger LOG = LoggerFactory.getLogger(IndexConsistencyPatch.class); + + private static final String PATCH_ID = "JAVA_PATCH_0000_005"; + private static final String PATCH_DESCRIPTION = "Sets index consistency for vertices and edges."; + + private final PatchContext context; + + public IndexConsistencyPatch(PatchContext context) { + super(context.getPatchRegistry(), PATCH_ID, PATCH_DESCRIPTION); + this.context = context; + } + + @Override + public void apply() throws AtlasBaseException { + AtlasGraph graph = context.getGraph(); + + try { + LOG.info("IndexConsistencyPatch: Starting..."); + graph.getManagementSystem().updateUniqueIndexesForConsistencyLock(); + } finally { + LOG.info("IndexConsistencyPatch: Done!"); + } + + setStatus(APPLIED); + + LOG.info("IndexConsistencyPatch.apply(): patchId={}, status={}", getPatchId(), getStatus()); + } +}
