You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by ma...@apache.org on 2017/03/02 02:23:51 UTC
incubator-atlas git commit: ATLAS-1614: updated v1 partial-update to
perform attribute validation
Repository: incubator-atlas
Updated Branches:
refs/heads/master 6fd04d9a8 -> 44df46cf1
ATLAS-1614: updated v1 partial-update to perform attribute validation
Project: http://git-wip-us.apache.org/repos/asf/incubator-atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-atlas/commit/44df46cf
Tree: http://git-wip-us.apache.org/repos/asf/incubator-atlas/tree/44df46cf
Diff: http://git-wip-us.apache.org/repos/asf/incubator-atlas/diff/44df46cf
Branch: refs/heads/master
Commit: 44df46cf14c216021d80c1a49c62bd0e48f6844a
Parents: 6fd04d9
Author: Madhan Neethiraj <ma...@apache.org>
Authored: Wed Mar 1 17:45:38 2017 -0800
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Wed Mar 1 18:17:28 2017 -0800
----------------------------------------------------------------------
intg/src/main/java/org/apache/atlas/AtlasErrorCode.java | 1 +
.../repository/converters/AtlasInstanceConverter.java | 12 ++++++++++++
.../apache/atlas/services/DefaultMetadataService.java | 10 ++++++----
.../java/org/apache/atlas/services/MetadataService.java | 4 ++++
4 files changed, 23 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/44df46cf/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java
----------------------------------------------------------------------
diff --git a/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java b/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java
index edcef4b..5ad362c 100644
--- a/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java
+++ b/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java
@@ -66,6 +66,7 @@ public enum AtlasErrorCode {
INVALID_STRUCT_VALUE(400, "ATLAS40036E", "not a valid struct value {0}"),
INSTANCE_LINEAGE_INVALID_PARAMS(400, "ATLAS40037E", "Invalid lineage query parameters passed {0}: {1}"),
ATTRIBUTE_UPDATE_NOT_SUPPORTED(400, "ATLAS40038E", "{0}.{1} : attribute update not supported"),
+ INVALID_VALUE(400, "ATLAS40039E", "invalid value: {0}"),
// All Not found enums go here
TYPE_NAME_NOT_FOUND(404, "ATLAS4041E", "Given typename {0} was invalid"),
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/44df46cf/repository/src/main/java/org/apache/atlas/repository/converters/AtlasInstanceConverter.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/converters/AtlasInstanceConverter.java b/repository/src/main/java/org/apache/atlas/repository/converters/AtlasInstanceConverter.java
index 287ce15..a4f99a5 100644
--- a/repository/src/main/java/org/apache/atlas/repository/converters/AtlasInstanceConverter.java
+++ b/repository/src/main/java/org/apache/atlas/repository/converters/AtlasInstanceConverter.java
@@ -49,6 +49,7 @@ import org.apache.atlas.typesystem.exception.EntityNotFoundException;
import org.apache.atlas.typesystem.exception.TraitNotFoundException;
import org.apache.atlas.typesystem.exception.TypeNotFoundException;
import org.apache.atlas.repository.converters.AtlasFormatConverter.ConverterContext;
+import org.apache.atlas.typesystem.types.ValueConversionException;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.slf4j.Logger;
@@ -149,6 +150,13 @@ public class AtlasInstanceConverter {
throw new AtlasBaseException(AtlasErrorCode.TYPE_NAME_INVALID, TypeCategory.ENTITY.name(), referenceable.getTypeName());
}
+ // validate
+ try {
+ metadataService.validateAndConvertToTypedInstance(referenceable, entityType.getTypeName());
+ } catch (AtlasException excp) {
+ throw toAtlasBaseException(excp);
+ }
+
ConverterContext ctx = new ConverterContext();
AtlasEntity entity = converter.fromV1ToV2(referenceable, entityType, ctx);
@@ -199,6 +207,10 @@ public class AtlasInstanceConverter {
return new AtlasBaseException(AtlasErrorCode.TYPE_NAME_NOT_FOUND, e);
}
+ if (e instanceof ValueConversionException) {
+ return new AtlasBaseException(AtlasErrorCode.INVALID_VALUE, e, e.getMessage());
+ }
+
return new AtlasBaseException(e);
}
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/44df46cf/repository/src/main/java/org/apache/atlas/services/DefaultMetadataService.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/services/DefaultMetadataService.java b/repository/src/main/java/org/apache/atlas/services/DefaultMetadataService.java
index 77db167..5a8add1 100755
--- a/repository/src/main/java/org/apache/atlas/services/DefaultMetadataService.java
+++ b/repository/src/main/java/org/apache/atlas/services/DefaultMetadataService.java
@@ -42,6 +42,7 @@ import org.apache.atlas.repository.audit.EntityAuditRepository;
import org.apache.atlas.repository.graph.GraphHelper;
import org.apache.atlas.repository.typestore.ITypeStore;
import org.apache.atlas.type.AtlasTypeUtil;
+import org.apache.atlas.typesystem.IReferenceableInstance;
import org.apache.atlas.typesystem.IStruct;
import org.apache.atlas.typesystem.ITypedReferenceableInstance;
import org.apache.atlas.typesystem.ITypedStruct;
@@ -476,7 +477,7 @@ public class DefaultMetadataService implements MetadataService, ActiveStateChang
newEntity = ParamChecker.notNull(newEntity, "updatedEntity cannot be null");
ITypedReferenceableInstance existInstance = validateEntityExists(guid);
- ITypedReferenceableInstance newInstance = convertToTypedInstance(newEntity, existInstance.getTypeName());
+ ITypedReferenceableInstance newInstance = validateAndConvertToTypedInstance(newEntity, existInstance.getTypeName());
((ReferenceableInstance)newInstance).replaceWithNewId(new Id(guid, 0, newInstance.getTypeName()));
CreateUpdateEntitiesResult result = repository.updatePartial(newInstance);
@@ -484,10 +485,11 @@ public class DefaultMetadataService implements MetadataService, ActiveStateChang
return result;
}
- private ITypedReferenceableInstance convertToTypedInstance(Referenceable updatedEntity, String typeName)
+ @Override
+ public ITypedReferenceableInstance validateAndConvertToTypedInstance(IReferenceableInstance updatedEntity, String typeName)
throws AtlasException {
ClassType type = typeSystem.getDataType(ClassType.class, typeName);
- ITypedReferenceableInstance newInstance = type.createInstance();
+ ITypedReferenceableInstance newInstance = type.createInstance(updatedEntity.getId());
for (String attributeName : updatedEntity.getValuesMap().keySet()) {
AttributeInfo attributeInfo = type.fieldMapping.fields.get(attributeName);
@@ -538,7 +540,7 @@ public class DefaultMetadataService implements MetadataService, ActiveStateChang
ITypedReferenceableInstance oldInstance = getEntityDefinitionReference(typeName, uniqueAttributeName, attrValue);
- final ITypedReferenceableInstance newInstance = convertToTypedInstance(updatedEntity, typeName);
+ final ITypedReferenceableInstance newInstance = validateAndConvertToTypedInstance(updatedEntity, typeName);
((ReferenceableInstance)newInstance).replaceWithNewId(oldInstance.getId());
CreateUpdateEntitiesResult result = repository.updatePartial(newInstance);
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/44df46cf/server-api/src/main/java/org/apache/atlas/services/MetadataService.java
----------------------------------------------------------------------
diff --git a/server-api/src/main/java/org/apache/atlas/services/MetadataService.java b/server-api/src/main/java/org/apache/atlas/services/MetadataService.java
index 45b35b3..0110373 100644
--- a/server-api/src/main/java/org/apache/atlas/services/MetadataService.java
+++ b/server-api/src/main/java/org/apache/atlas/services/MetadataService.java
@@ -23,6 +23,7 @@ import org.apache.atlas.AtlasException;
import org.apache.atlas.CreateUpdateEntitiesResult;
import org.apache.atlas.EntityAuditEvent;
import org.apache.atlas.listener.EntityChangeListener;
+import org.apache.atlas.typesystem.IReferenceableInstance;
import org.apache.atlas.typesystem.ITypedReferenceableInstance;
import org.apache.atlas.typesystem.ITypedStruct;
import org.apache.atlas.typesystem.Referenceable;
@@ -309,4 +310,7 @@ public interface MetadataService {
* @throws AtlasException
*/
ITypedReferenceableInstance[] deserializeClassInstances(String entityInstanceDefinition) throws AtlasException;
+
+ ITypedReferenceableInstance validateAndConvertToTypedInstance(IReferenceableInstance updatedEntity, String typeName)
+ throws AtlasException;
}