Repository: incubator-atlas Updated Branches: refs/heads/0.8-incubating 764b20753 -> 9fd00bb8c
ATLAS-1648: Fix HiveHookIT failures Signed-off-by: Madhan Neethiraj <[email protected]> (cherry picked from commit f87f5f22b8de37c8b08dfeaf0b2c5ca289675c84) Project: http://git-wip-us.apache.org/repos/asf/incubator-atlas/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-atlas/commit/9fd00bb8 Tree: http://git-wip-us.apache.org/repos/asf/incubator-atlas/tree/9fd00bb8 Diff: http://git-wip-us.apache.org/repos/asf/incubator-atlas/diff/9fd00bb8 Branch: refs/heads/0.8-incubating Commit: 9fd00bb8cecd9bd3f4fe333d35071b09635be857 Parents: 764b207 Author: Sarath Subramanian <[email protected]> Authored: Tue Mar 7 14:07:22 2017 -0800 Committer: Madhan Neethiraj <[email protected]> Committed: Tue Mar 7 14:34:17 2017 -0800 ---------------------------------------------------------------------- .../org/apache/atlas/hive/hook/HiveHookIT.java | 3 +- .../atlas/model/typedef/AtlasBaseTypeDef.java | 5 ++ .../converters/AtlasObjectIdConverter.java | 52 +++++++++++++++++--- .../web/resources/EntityJerseyResourceIT.java | 2 +- 4 files changed, 54 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9fd00bb8/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java ---------------------------------------------------------------------- diff --git a/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java b/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java index d640a81..979e729 100755 --- a/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java +++ b/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java @@ -942,7 +942,8 @@ public class HiveHookIT extends HiveITBase { private String createTrait(String guid) throws AtlasServiceException, JSONException { //add trait - String traitName = "PII_Trait" + RandomStringUtils.random(10); + //valid type names in v2 must consist of a letter followed by a sequence of letter, number, or _ characters + String traitName = "PII_Trait" + random(); atlasClient.createTraitType(traitName); Struct traitInstance = new Struct(traitName); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9fd00bb8/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java ---------------------------------------------------------------------- diff --git a/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java b/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java index f8083de..7308eb7 100644 --- a/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java +++ b/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java @@ -35,6 +35,7 @@ import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Objects; +import java.util.TimeZone; import static org.codehaus.jackson.annotate.JsonAutoDetect.Visibility.NONE; import static org.codehaus.jackson.annotate.JsonAutoDetect.Visibility.PUBLIC_ONLY; @@ -110,6 +111,10 @@ public abstract class AtlasBaseTypeDef implements java.io.Serializable { public static final String SERIALIZED_DATE_FORMAT_STR = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; public static final DateFormat DATE_FORMATTER = new SimpleDateFormat(SERIALIZED_DATE_FORMAT_STR); + static { + DATE_FORMATTER.setTimeZone(TimeZone.getTimeZone("UTC")); + } + private final TypeCategory category; private String guid = null; private String createdBy = null; http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9fd00bb8/repository/src/main/java/org/apache/atlas/repository/converters/AtlasObjectIdConverter.java ---------------------------------------------------------------------- diff --git a/repository/src/main/java/org/apache/atlas/repository/converters/AtlasObjectIdConverter.java b/repository/src/main/java/org/apache/atlas/repository/converters/AtlasObjectIdConverter.java index a5ab8d7..f8fa4d5 100644 --- a/repository/src/main/java/org/apache/atlas/repository/converters/AtlasObjectIdConverter.java +++ b/repository/src/main/java/org/apache/atlas/repository/converters/AtlasObjectIdConverter.java @@ -19,6 +19,7 @@ package org.apache.atlas.repository.converters; import org.apache.atlas.AtlasErrorCode; +import org.apache.atlas.AtlasException; import org.apache.atlas.exception.AtlasBaseException; import org.apache.atlas.model.TypeCategory; import org.apache.atlas.model.instance.AtlasEntity; @@ -27,7 +28,10 @@ import org.apache.atlas.type.AtlasEntityType; import org.apache.atlas.type.AtlasType; import org.apache.atlas.type.AtlasTypeRegistry; import org.apache.atlas.typesystem.IReferenceableInstance; +import org.apache.atlas.typesystem.Referenceable; import org.apache.atlas.typesystem.persistence.Id; +import org.apache.atlas.typesystem.persistence.StructInstance; +import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import java.util.Map; @@ -50,23 +54,24 @@ AtlasObjectIdConverter extends AtlasAbstractFormatConverter { if (v1Obj != null) { if (v1Obj instanceof Id) { Id id = (Id) v1Obj; + ret = new AtlasObjectId(id._getId(), id.getTypeName()); } else if (v1Obj instanceof IReferenceableInstance) { IReferenceableInstance refInst = (IReferenceableInstance) v1Obj; + String guid = refInst.getId()._getId(); - String guid = refInst.getId()._getId(); ret = new AtlasObjectId(guid, refInst.getTypeName()); - if (!converterContext.entityExists(guid)) { - AtlasEntityType entityType = typeRegistry.getEntityTypeByName(refInst.getTypeName()); - AtlasEntityFormatConverter entityFormatConverter = (AtlasEntityFormatConverter) converterRegistry.getConverter(TypeCategory.ENTITY); - - AtlasEntity entity = entityFormatConverter.fromV1ToV2(v1Obj, entityType, converterContext); + if (!converterContext.entityExists(guid) && hasAnyAssignedAttribute(refInst)) { + AtlasEntityType entityType = typeRegistry.getEntityTypeByName(refInst.getTypeName()); + AtlasEntityFormatConverter converter = (AtlasEntityFormatConverter) converterRegistry.getConverter(TypeCategory.ENTITY); + AtlasEntity entity = converter.fromV1ToV2(v1Obj, entityType, converterContext); converterContext.addReferredEntity(entity); } } } + return ret; } @@ -97,4 +102,39 @@ AtlasObjectIdConverter extends AtlasAbstractFormatConverter { } return ret; } + + private boolean hasAnyAssignedAttribute(IReferenceableInstance rInstance) { + boolean ret = false; + + if (rInstance instanceof StructInstance) { + StructInstance sInstance = (StructInstance) rInstance; + + Map<String, Object> attributes = null; + + try { + attributes = sInstance.getValuesMap(); + } catch (AtlasException e) { + // ignore + } + + if (MapUtils.isNotEmpty(attributes)) { + for (String attrName : attributes.keySet()) { + try { + if (sInstance.isValueSet(attrName)) { + ret = true; + break; + } + } catch (AtlasException e) { + // ignore + } + } + } + } else if (rInstance instanceof Referenceable) { + Referenceable referenceable = (Referenceable) rInstance; + + ret = MapUtils.isNotEmpty(referenceable.getValuesMap()); + } + + return ret; + } } http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/9fd00bb8/webapp/src/test/java/org/apache/atlas/web/resources/EntityJerseyResourceIT.java ---------------------------------------------------------------------- diff --git a/webapp/src/test/java/org/apache/atlas/web/resources/EntityJerseyResourceIT.java b/webapp/src/test/java/org/apache/atlas/web/resources/EntityJerseyResourceIT.java index 91e2947..f2af208 100755 --- a/webapp/src/test/java/org/apache/atlas/web/resources/EntityJerseyResourceIT.java +++ b/webapp/src/test/java/org/apache/atlas/web/resources/EntityJerseyResourceIT.java @@ -738,7 +738,7 @@ public class EntityJerseyResourceIT extends BaseResourceIT { LOG.debug("Updating entity= {}", tableUpdated); AtlasClient.EntityResult entityResult = atlasClientV1.updateEntity(tableId._getId(), tableUpdated); - assertEquals(entityResult.getUpdateEntities().size(), 2); + assertEquals(entityResult.getUpdateEntities().size(), 1); assertEquals(entityResult.getUpdateEntities().get(0), tableId._getId()); JSONObject response = atlasClientV1.callAPIWithBodyAndParams(AtlasClient.API.GET_ENTITY, null, tableId._getId());
