ATLAS-1949: Fix coverity scan issues and IT failures due to ATLAS-1943

Signed-off-by: Madhan Neethiraj <madhan@apache.org>
diff --git a/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java b/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java
index fd1b004..b24f99f 100644
--- a/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java
+++ b/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java
@@ -88,6 +88,7 @@
     RELATIONSHIPDEF_END1_NAME_INVALID(400, "ATLAS-400-00-041", "{0}: invalid end1 name. Name must not contain query keywords"),
     RELATIONSHIPDEF_END2_NAME_INVALID(400, "ATLAS-400-00-042", "{0}: invalid end2 name. Name must not contain query keywords"),
     RELATIONSHIPDEF_NOT_DEFINED(400, "ATLAS-400-00-043", "No relationshipDef defined between {0} and {1} on attribute: {2}"),
+    RELATIONSHIPDEF_INVALID(400, "ATLAS-400-00-044", "Invalid relationshipDef: {0}"),
     // All Not found enums go here
     TYPE_NAME_NOT_FOUND(404, "ATLAS-404-00-001", "Given typename {0} was invalid"),
     TYPE_GUID_NOT_FOUND(404, "ATLAS-404-00-002", "Given type guid {0} was invalid"),
diff --git a/repository/src/main/java/org/apache/atlas/repository/graph/GraphHelper.java b/repository/src/main/java/org/apache/atlas/repository/graph/GraphHelper.java
index c5e32d8..6f6d74b 100755
--- a/repository/src/main/java/org/apache/atlas/repository/graph/GraphHelper.java
+++ b/repository/src/main/java/org/apache/atlas/repository/graph/GraphHelper.java
@@ -1269,6 +1269,10 @@
                 }
             }
 
+            if (ret == null) {
+                ret = relationshipTypes.get(0).getRelationshipDef();
+            }
+
         } else {
             //relationshipTypes will have at least one relationshipDef
             ret = relationshipTypes.get(0).getRelationshipDef();
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphMapper.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphMapper.java
index 68f8370..157f8cd 100644
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphMapper.java
+++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphMapper.java
@@ -328,7 +328,7 @@
 
                     newEdge = mapObjectIdValueUsingRelationship(ctx, context);
 
-                    if (ctx.getAttribute().getInverseRefAttribute() != null) {
+                    if (newEdge != null && ctx.getAttribute().getInverseRefAttribute() != null) {
                         // Update the inverse reference using relationship on the target entity
                         addInverseReference(ctx.getAttribute().getInverseRefAttribute(), newEdge);
                     }
@@ -380,13 +380,13 @@
         case ARRAY:
             // Add edge ID to property value
             List<String> elements = inverseVertex.getProperty(propertyName, List.class);
-            if (elements == null) {
+            if (newEdge != null && elements == null) {
                 elements = new ArrayList<>();
                 elements.add(newEdge.getId().toString());
                 inverseVertex.setProperty(propertyName, elements);
             }
             else {
-               if (!elements.contains(newEdge.getId().toString())) {
+               if (newEdge != null && !elements.contains(newEdge.getId().toString())) {
                     elements.add(newEdge.getId().toString());
                     inverseVertex.setProperty(propertyName, elements);
                }
@@ -945,7 +945,7 @@
         String    newEntityId     = AtlasGraphUtilsV1.getIdFromVertex(entityVertex);
         AtlasEdge ret             = currentEdge;
 
-        if (!currentEntityId.equals(newEntityId) && entityVertex != null) {
+        if (!currentEntityId.equals(newEntityId)) {
             // create a new relationship edge to the new attribute vertex from the instance
             String relationshipName = AtlasGraphUtilsV1.getTypeName(currentEdge);
 
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java
index e919d1c..4ac00a3 100644
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java
+++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java
@@ -419,13 +419,18 @@
 
     private Object mapVertexToRelationshipAttribute(AtlasVertex entityVertex, AtlasEntityType entityType, AtlasAttribute attribute,
                                                     AtlasEntityExtInfo entityExtInfo) throws AtlasBaseException {
-        Object                  ret                = null;
-        AtlasRelationshipDef    relationshipDef    = graphHelper.getRelationshipDef(entityVertex, entityType, attribute.getName());
-        AtlasRelationshipEndDef endDef1            = relationshipDef.getEndDef1();
-        AtlasRelationshipEndDef endDef2            = relationshipDef.getEndDef2();
-        AtlasEntityType         endDef1Type        = typeRegistry.getEntityTypeByName(endDef1.getType());
-        AtlasEntityType         endDef2Type        = typeRegistry.getEntityTypeByName(endDef2.getType());
-        AtlasRelationshipEndDef attributeEndDef    = null;
+        Object               ret             = null;
+        AtlasRelationshipDef relationshipDef = graphHelper.getRelationshipDef(entityVertex, entityType, attribute.getName());
+
+        if (relationshipDef == null) {
+            throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_INVALID, "relationshipDef is null");
+        }
+
+        AtlasRelationshipEndDef endDef1         = relationshipDef.getEndDef1();
+        AtlasRelationshipEndDef endDef2         = relationshipDef.getEndDef2();
+        AtlasEntityType         endDef1Type     = typeRegistry.getEntityTypeByName(endDef1.getType());
+        AtlasEntityType         endDef2Type     = typeRegistry.getEntityTypeByName(endDef2.getType());
+        AtlasRelationshipEndDef attributeEndDef = null;
 
         if (endDef1Type.isTypeOrSuperTypeOf(entityType.getTypeName()) && StringUtils.equals(endDef1.getName(), attribute.getName())) {
             attributeEndDef = endDef1;
@@ -434,6 +439,10 @@
             attributeEndDef = endDef2;
         }
 
+        if (attributeEndDef == null) {
+            throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_INVALID, relationshipDef.toString());
+        }
+
         String relationshipLabel = attribute.getRelationshipEdgeLabel();
 
         switch (attributeEndDef.getCardinality()) {