----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/72046/#review219459 -----------------------------------------------------------
intg/src/main/java/org/apache/atlas/type/AtlasNamespaceType.java Lines 133 (patched) <https://reviews.apache.org/r/72046/#comment307625> AtlasNamespaceType doesn't have any instance (compared to AtlasEntityType/AtlasStructType/AtlasEnumType/AtlasRelationshipType/AtlasClassificationType), hence following abstract methods should be empty/no-op: - createDefaultValue() - isValidValue() - areEqualValues() - getNormalizedValue() - validateValue() - isValidValueForUpdate() - getNormalizedValueForUpdate() - validateValueForUpdate() Above methods in AtlasEntityType should be updated to handle namespace attributes. Please review and update. repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityStoreV2.java Lines 824 (patched) <https://reviews.apache.org/r/72046/#comment307626> - checkIfNamespaceAttributesExist() is called only within AtlasEntityStoreV2. Consider marking this method as private - given checkIfNamespaceAttributesExist() returns true if the vertex has at least one namespace attribute, consider renaming to containsAnyNamespaceAttribute() repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityStoreV2.java Lines 915 (patched) <https://reviews.apache.org/r/72046/#comment307628> checkIfNamespaceAttributesExist() returns true on presence of first namespace-attribute, which may not be good here. Consider adding method that checks for presence of all given namespace-attributes - containsAllNamespaceAttributes(entityVertex, namespaceAttributes) repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityStoreV2.java Lines 1449 (patched) <https://reviews.apache.org/r/72046/#comment307629> Consider following simper validation: for (String nsName : entityNamespaces.keySet()) { List<AtlasNamespaceAttribute> nsAttributes = entityType.getNamespaceAttributes(nsName); if (nsAttributes == null) { messages.add(nsName + ": invalid namespace for entity type " + entityType.getTypeName()); continue; } Map<String, Object> entityNsAttributes = entityNamespaces.get(nsName); for (AtlasNamespaceAttribute nsAttribute : nsAttributes) { AtlasType attrType = nsAttribute.getAttributeType(); String attrName = nsAttribute.getName(); Object attrValue = entityNsAttributes.get(attrName); String fieldName = entityType.getTypeName() + "." + nsName + "." + attrName; if (attrValue != null) { attrType.validateValue(attrValue, fieldName, messages); } else if (!nsAttribute.getAttributeDef().getIsOptional()) { messages.add(fieldName + ": mandatory namespace attribute value missing in type " + entityType.getTypeName()); } } } repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphRetriever.java Line 617 (original), 620 (patched) <https://reviews.apache.org/r/72046/#comment307623> When 'attributes' contains namespace-attributes (named as "namespaceName:attributeName"), returned entity should have these namespace-attributes populated as well. This update can be taken up in a subsequent patch, once basic-search is updated to support namespace attributes. repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphRetriever.java Line 694 (original), 697 (patched) <https://reviews.apache.org/r/72046/#comment307624> When 'attributes' contains namespace-attributes (named as "namespaceName:attributeName"?), returned entity should have these namespace-attributes populated as well. This update can be taken up in a subsequent patch, once basic-search is updated to support namespace attributes. - Madhan Neethiraj On Jan. 31, 2020, 12:40 p.m., Mandar Ambawane wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/72046/ > ----------------------------------------------------------- > > (Updated Jan. 31, 2020, 12:40 p.m.) > > > Review request for atlas, Ashutosh Mestry, Madhan Neethiraj, Nixon Rodrigues, > and Sarath Subramanian. > > > Bugs: ATLAS-3534 > https://issues.apache.org/jira/browse/ATLAS-3534 > > > Repository: atlas > > > Description > ------- > > Created separate endpoints to associate Namespace attributes to entity > > > Diffs > ----- > > common/src/main/java/org/apache/atlas/repository/Constants.java 0b28243 > intg/src/main/java/org/apache/atlas/AtlasErrorCode.java 2054513 > intg/src/main/java/org/apache/atlas/model/instance/AtlasEntity.java 1b033b9 > intg/src/main/java/org/apache/atlas/type/AtlasNamespaceType.java a141d4a > intg/src/main/java/org/apache/atlas/type/AtlasTypeRegistry.java 97e27d0 > > repository/src/main/java/org/apache/atlas/repository/store/graph/AtlasEntityStore.java > 928c70d > > repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityStoreV2.java > 25284e9 > > repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphMapper.java > e427a59 > > repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphRetriever.java > dc4c399 > webapp/src/main/java/org/apache/atlas/web/rest/EntityREST.java 6845121 > > > Diff: https://reviews.apache.org/r/72046/diff/8/ > > > Testing > ------- > > Basic testing is done. > > Create NamespaceDef sports: > > curl --location --request POST > 'http://localhost:21000/api/atlas/v2/types/typedefs' \ > --header 'Content-Type: application/json' \ > --header 'Authorization: Basic YWRtaW46YWRtaW4=' \ > --data-raw '{ > "namespaceDefs": [ > { > "name": "sports", > "description": "Sample sports", > "serviceType": "NAMESPACES", > "typeVersion": "1.0", > "attributeDefs": [ > { > "name": "sports_name", > "typeName": "string", > "options": { > "applicableEntityTypes": "[\"hdfs_path\", > \"hive_table\"]", > "maxStrLength": "50" > }, > "cardinality": "SINGLE", > "isIndexable": true, > "isOptional": true, > "includeInNotification": true, > "isUnique": false > }, > { > "name": "no_of_players", > "typeName": "int", > "options": { > "applicableEntityTypes": "[\"hdfs_path\", > \"hive_column\"]" > }, > "cardinality": "SINGLE", > "isIndexable": true, > "isOptional": true, > "includeInNotification": true, > "isUnique": false > } > ] > } > ] > }' > > > Create NamespaceDef vehicle: > > curl --location --request POST > 'http://localhost:21000/api/atlas/v2/types/typedefs' \ > --header 'Content-Type: application/json' \ > --header 'Authorization: Basic YWRtaW46YWRtaW4=' \ > --data-raw '{ > "namespaceDefs": [ > { > "name": "vehicle", > "description": "Sample vehicle", > "serviceType": "NAMESPACES", > "typeVersion": "1.0", > "attributeDefs": [ > { > "name": "vehicle_name", > "typeName": "string", > "options": { > "applicableEntityTypes": "[\"hdfs_path\", > \"hive_table\"]", > "maxStrLength": "50" > }, > "cardinality": "SINGLE", > "isIndexable": true, > "isOptional": true, > "includeInNotification": true, > "isUnique": false > }, > { > "name": "no_of_wheels", > "typeName": "int", > "options": { > "applicableEntityTypes": "[\"hdfs_path\", > \"hive_column\"]" > }, > "cardinality": "SINGLE", > "isIndexable": true, > "isOptional": true, > "includeInNotification": true, > "isUnique": false > } > ] > } > ] > }' > > > Create hdfs_path entity: > > curl --location --request POST 'http://localhost:21000/api/atlas/v2/entity' \ > --header 'Content-Type: application/json' \ > --header 'Authorization: Basic YWRtaW46YWRtaW4=' \ > --data-raw '{ > "entity": { > "guid": "-1", > "typeName": "hdfs_path", > "attributes": { > "clusterName": "cm", > "description": "desc", > "location": "localhost", > "name": "hdfs_path_entity1", > "owner": "admin", > "ownerType": "USER", > "qualifiedName": "hdfs_path_entity1@cm", > "path": "local_path" > } > } > }' > > > Associate namespace attributes with the created entity > > > curl --location --request POST > 'http://localhost:21000/api/atlas/v2/entity/guid/ea633224-ccfe-4573-9060-43190cd9531a/namespaces' > \ > --header 'Content-Type: application/json' \ > --header 'Authorization: Basic YWRtaW46YWRtaW4=' \ > --data-raw '{ > "sports":{ > "sports_name":"cricket", > "no_of_players":11 > }, > "vehicle":{ > "vehicle_name": "Car" > } > }' > > > Add one more namespace attribute in the entity > > curl --location --request POST > 'http://localhost:21000/api/atlas/v2/entity/guid/ea633224-ccfe-4573-9060-43190cd9531a/namespaces' > \ > --header 'Content-Type: application/json' \ > --header 'Authorization: Basic YWRtaW46YWRtaW4=' \ > --data-raw '{ > "vehicle":{ > "no_of_wheels": 4 > } > }' > > > Update sports_name attribute with new value as Hockey > > curl --location --request PUT > 'http://localhost:21000/api/atlas/v2/entity/guid/ea633224-ccfe-4573-9060-43190cd9531a/namespaces' > \ > --header 'Content-Type: application/json' \ > --header 'Authorization: Basic YWRtaW46YWRtaW4=' \ > --data-raw '{ > "sports":{ > "sports_name": "Hockey" > } > }' > > > Delete vehicle.vehicle_name namespace attribute > > curl --location --request DELETE > 'http://localhost:21000/api/atlas/v2/entity/guid/ea633224-ccfe-4573-9060-43190cd9531a/namespaces' > \ > --header 'Content-Type: application/json' \ > --header 'Authorization: Basic YWRtaW46YWRtaW4=' \ > --data-raw '{ > "vehicle":{ > "vehicle_name": "Car" > } > }' > > > Thanks, > > Mandar Ambawane > >