diff --git a/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java b/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java index 73dd33a..e8afed1 100644 --- a/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java +++ b/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java @@ -100,6 +100,7 @@ public enum AtlasErrorCode { INSTANCE_NOT_FOUND(404, "ATLAS-404-00-00B", "Given instance is invalid/not found: {0}"), RELATIONSHIP_GUID_NOT_FOUND(404, "ATLAS-404-00-00C", "Given relationship guid {0} is invalid/not found"), RELATIONSHIP_CRUD_INVALID_PARAMS(404, "ATLAS-404-00-00D", "Invalid relationship creation/updation parameters passed : {0}"), + RELATIONSHIPDEF_END_TYPE_NAME_NOT_FOUND(404, "ATLAS-404-00-00E", "RelationshipDef {0} endDef typename {0} cannot be found"), // All data conflict errors go here TYPE_ALREADY_EXISTS(409, "ATLAS-409-00-001", "Given type {0} already exists"), TYPE_HAS_REFERENCES(409, "ATLAS-409-00-002", "Given type {0} has references"), diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipDefStoreV1.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipDefStoreV1.java index bd7416e..ddf0af9 100644 --- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipDefStoreV1.java +++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipDefStoreV1.java @@ -78,15 +78,23 @@ public class AtlasRelationshipDefStoreV1 extends AtlasAbstractDefStoreV1 impleme updateVertexPreCreate(relationshipDef, (AtlasRelationshipType) type, relationshipDefVertex); - final AtlasRelationshipEndDef endDef1 = relationshipDef.getEndDef1(); - final String type1 = endDef1.getType(); - final AtlasRelationshipEndDef endDef2 = relationshipDef.getEndDef2(); - final String type2 = endDef2.getType(); - final String name1 = endDef1.getName(); - final String name2 = endDef2.getName(); - AtlasVertex end1TypeVertex = typeDefStore.findTypeVertexByName(type1); - - AtlasVertex end2TypeVertex = typeDefStore.findTypeVertexByName(type2); + final AtlasRelationshipEndDef endDef1 = relationshipDef.getEndDef1(); + final AtlasRelationshipEndDef endDef2 = relationshipDef.getEndDef2(); + final String type1 = endDef1.getType(); + final String type2 = endDef2.getType(); + final String name1 = endDef1.getName(); + final String name2 = endDef2.getName(); + final AtlasVertex end1TypeVertex = typeDefStore.findTypeVertexByName(type1); + final AtlasVertex end2TypeVertex = typeDefStore.findTypeVertexByName(type2); + + if (end1TypeVertex == null) { + throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_END_TYPE_NAME_NOT_FOUND, relationshipDef.getName(), type1); + } + + if (end2TypeVertex == null) { + throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_END_TYPE_NAME_NOT_FOUND, relationshipDef.getName(), type2); + } + // create an edge between the relationshipDef and each of the entityDef vertices. AtlasEdge edge1 = typeDefStore.getOrCreateEdge(relationshipDefVertex, end1TypeVertex, AtlasGraphUtilsV1.RELATIONSHIPTYPE_EDGE_LABEL);