This is an automated email from the ASF dual-hosted git repository.
sarath pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git
The following commit(s) were added to refs/heads/master by this push:
new 7fcf041 ATLAS-3310:- Fix create/update Relationships, after updating
a bigint attribute.
7fcf041 is described below
commit 7fcf04159887d4719631e8e3d54f4297e17f4c4d
Author: mayanknj <[email protected]>
AuthorDate: Tue Jul 16 18:49:40 2019 +0530
ATLAS-3310:- Fix create/update Relationships, after updating a bigint
attribute.
---
.../apache/atlas/type/AtlasRelationshipType.java | 24 ++++++++++++++++++----
.../store/graph/v2/AtlasRelationshipStoreV2.java | 19 +++++++++++++----
2 files changed, 35 insertions(+), 8 deletions(-)
diff --git
a/intg/src/main/java/org/apache/atlas/type/AtlasRelationshipType.java
b/intg/src/main/java/org/apache/atlas/type/AtlasRelationshipType.java
index 98071b2..6d1c64b 100644
--- a/intg/src/main/java/org/apache/atlas/type/AtlasRelationshipType.java
+++ b/intg/src/main/java/org/apache/atlas/type/AtlasRelationshipType.java
@@ -20,6 +20,7 @@ package org.apache.atlas.type;
import org.apache.atlas.AtlasErrorCode;
import org.apache.atlas.exception.AtlasBaseException;
+import org.apache.atlas.model.instance.AtlasObjectId;
import org.apache.atlas.model.instance.AtlasRelationship;
import org.apache.atlas.model.typedef.AtlasBaseTypeDef;
import org.apache.atlas.model.typedef.AtlasRelationshipDef;
@@ -242,14 +243,29 @@ public class AtlasRelationshipType extends
AtlasStructType {
* @throws AtlasBaseException
*/
private boolean validateRelationship(AtlasRelationship relationship) {
- String end1TypeName = relationship.getEnd1() != null ?
relationship.getEnd1().getTypeName() : null;
- String end2TypeName = relationship.getEnd2() != null ?
relationship.getEnd2().getTypeName() : null;
- if (StringUtils.isNotEmpty(end1TypeName) &&
StringUtils.isNotEmpty(end2TypeName)) {
- return end1Type.isTypeOrSuperTypeOf(end1TypeName) &&
end2Type.isTypeOrSuperTypeOf(end2TypeName) && super.isValidValue(relationship);
+ AtlasObjectId end1 = relationship.getEnd1();
+ AtlasObjectId end2 = relationship.getEnd2();
+
+ if (end1 != null && end2 != null) {
+
+ String end1TypeName = end1.getTypeName();
+ String end2TypeName = end2.getTypeName();
+
+ if (StringUtils.isNotEmpty(end1TypeName) &&
StringUtils.isNotEmpty(end2TypeName)) {
+
+ return end1Type.isTypeOrSuperTypeOf(end1TypeName) &&
end2Type.isTypeOrSuperTypeOf(end2TypeName) && super.isValidValue(relationship);
+
+ } else {
+
+ return StringUtils.isNotEmpty(end1.getGuid()) &&
StringUtils.isNotEmpty(end2.getGuid());
+
+ }
+
}
return false;
+
}
/**
diff --git
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasRelationshipStoreV2.java
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasRelationshipStoreV2.java
index 54059e8..1c8b057 100644
---
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasRelationshipStoreV2.java
+++
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasRelationshipStoreV2.java
@@ -192,7 +192,16 @@ public class AtlasRelationshipStoreV2 implements
AtlasRelationshipStore {
}
}
- validateRelationship(end1Vertex, end2Vertex, edgeType,
relationship.getAttributes());
+ boolean relationshipTypeNotExists = false;
+ if (StringUtils.isEmpty(relationship.getTypeName())) {
+ relationship.setTypeName(edgeType);
+ relationshipTypeNotExists = true;
+ }
+ validateRelationship(end1Vertex, end2Vertex, relationship);
+
+ if (relationshipTypeNotExists) {
+ relationship.setTypeName(null);
+ }
AtlasRelationship ret = updateRelationship(edge, relationship);
sendNotifications(ret, OperationType.RELATIONSHIP_UPDATE);
@@ -337,7 +346,7 @@ public class AtlasRelationshipStoreV2 implements
AtlasRelationshipStore {
AtlasEdge ret;
try {
- validateRelationship(end1Vertex, end2Vertex,
relationship.getTypeName(), relationship.getAttributes());
+ validateRelationship(end1Vertex, end2Vertex, relationship);
String relationshipLabel = getRelationshipEdgeLabel(end1Vertex,
end2Vertex, relationship.getTypeName());
@@ -623,7 +632,10 @@ public class AtlasRelationshipStoreV2 implements
AtlasRelationshipStore {
validateAndNormalize(relationship);
}
- private void validateRelationship(AtlasVertex end1Vertex, AtlasVertex
end2Vertex, String relationshipName, Map<String, Object> attributes) throws
AtlasBaseException {
+ private void validateRelationship(AtlasVertex end1Vertex, AtlasVertex
end2Vertex, AtlasRelationship relationship) throws AtlasBaseException {
+
+ String relationshipName = relationship.getTypeName();
+
AtlasRelationshipType relationshipType =
typeRegistry.getRelationshipTypeByName(relationshipName);
if (relationshipType == null) {
@@ -654,7 +666,6 @@ public class AtlasRelationshipStoreV2 implements
AtlasRelationshipStore {
}
List<String> messages = new ArrayList<>();
- AtlasRelationship relationship = new
AtlasRelationship(relationshipName, attributes);
relationshipType.validateValue(relationship, relationshipName,
messages);