From 6de1b8454468f0b219408752f161ad56ac6e736c Mon Sep 17 00:00:00 2001 From: Venkatesh Seetharam <venkatesh@apache.org> Date: Fri, 5 Jun 2015 13:59:10 -0700 Subject: [PATCH] BUG-38869 update entity for an entity that does not exist returns a 400 instead of 404 BUG-38726 add trait to an entity that does not exist returns a 400, it should return a 404 --- repository/src/main/java/org/apache/hadoop/metadata/repository/EntityNotFoundException.java | 2 +- repository/src/main/java/org/apache/hadoop/metadata/repository/graph/GraphBackedMetadataRepository.java | 4 ++-- webapp/src/main/java/org/apache/hadoop/metadata/web/resources/EntityResource.java | 26 ++++++++++++++++++++++++-- webapp/src/main/java/org/apache/hadoop/metadata/web/resources/HiveLineageResource.java | 1 - webapp/src/main/java/org/apache/hadoop/metadata/web/resources/MetadataDiscoveryResource.java | 3 +-- webapp/src/main/java/org/apache/hadoop/metadata/web/resources/RexsterGraphResource.java | 1 - webapp/src/main/java/org/apache/hadoop/metadata/web/resources/TypesResource.java | 1 - webapp/src/test/java/org/apache/hadoop/metadata/web/resources/EntityJerseyResourceIT.java | 6 +++--- 8 files changed, 31 insertions(+), 13 deletions(-) diff --git a/repository/src/main/java/org/apache/hadoop/metadata/repository/EntityNotFoundException.java b/repository/src/main/java/org/apache/hadoop/metadata/repository/EntityNotFoundException.java index 52ee200..f41bd42 100644 --- a/repository/src/main/java/org/apache/hadoop/metadata/repository/EntityNotFoundException.java +++ b/repository/src/main/java/org/apache/hadoop/metadata/repository/EntityNotFoundException.java @@ -23,7 +23,7 @@ import org.apache.hadoop.metadata.MetadataException; /** * A simple wrapper for 404. */ -public class EntityNotFoundException extends MetadataException { +public class EntityNotFoundException extends RepositoryException { public EntityNotFoundException() { } diff --git a/repository/src/main/java/org/apache/hadoop/metadata/repository/graph/GraphBackedMetadataRepository.java b/repository/src/main/java/org/apache/hadoop/metadata/repository/graph/GraphBackedMetadataRepository.java index 9db6f22..9b546b1 100755 --- a/repository/src/main/java/org/apache/hadoop/metadata/repository/graph/GraphBackedMetadataRepository.java +++ b/repository/src/main/java/org/apache/hadoop/metadata/repository/graph/GraphBackedMetadataRepository.java @@ -162,9 +162,9 @@ public class GraphBackedMetadataRepository implements MetadataRepository { public ITypedReferenceableInstance getEntityDefinition(String guid) throws RepositoryException { LOG.info("Retrieving entity with guid={}", guid); - try { - Vertex instanceVertex = getVertexForGUID(guid); + Vertex instanceVertex = getVertexForGUID(guid); + try { LOG.debug("Found a vertex {} for guid {}", instanceVertex, guid); return graphToInstanceMapper.mapGraphToTypedInstance(guid, instanceVertex); diff --git a/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/EntityResource.java b/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/EntityResource.java index 3198100..3d9162b 100755 --- a/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/EntityResource.java +++ b/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/EntityResource.java @@ -21,6 +21,8 @@ package org.apache.hadoop.metadata.web.resources; import com.google.common.base.Preconditions; import org.apache.hadoop.metadata.MetadataException; import org.apache.hadoop.metadata.MetadataServiceClient; +import org.apache.hadoop.metadata.ParamChecker; +import org.apache.hadoop.metadata.repository.EntityNotFoundException; import org.apache.hadoop.metadata.services.MetadataService; import org.apache.hadoop.metadata.typesystem.types.ValueConversionException; import org.apache.hadoop.metadata.web.util.Servlets; @@ -43,7 +45,6 @@ import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriInfo; @@ -131,6 +132,7 @@ public class EntityResource { public Response getEntityDefinition(@PathParam("guid") String guid) { try { LOG.debug("Fetching entity definition for guid={} ", guid); + ParamChecker.notEmpty(guid, "guid cannot be null"); final String entityDefinition = metadataService.getEntityDefinition(guid); JSONObject response = new JSONObject(); @@ -148,10 +150,14 @@ public class EntityResource { return Response.status(status).entity(response).build(); - } catch (MetadataException | IllegalArgumentException e) { + } catch (EntityNotFoundException e) { LOG.error("An entity with GUID={} does not exist", guid, e); throw new WebApplicationException( Servlets.getErrorResponse(e, Response.Status.NOT_FOUND)); + } catch (MetadataException | IllegalArgumentException e) { + LOG.error("Bad GUID={}", guid, e); + throw new WebApplicationException( + Servlets.getErrorResponse(e, Response.Status.BAD_REQUEST)); } catch (Throwable e) { LOG.error("Unable to get instance definition for GUID {}", guid, e); throw new WebApplicationException( @@ -218,6 +224,10 @@ public class EntityResource { JSONObject response = new JSONObject(); response.put(MetadataServiceClient.REQUEST_ID, Thread.currentThread().getName()); return Response.ok(response).build(); + } catch (EntityNotFoundException e) { + LOG.error("An entity with GUID={} does not exist", guid, e); + throw new WebApplicationException( + Servlets.getErrorResponse(e, Response.Status.NOT_FOUND)); } catch (MetadataException | IllegalArgumentException e) { LOG.error("Unable to add property {} to entity id {}", property, guid, e); throw new WebApplicationException( @@ -251,6 +261,10 @@ public class EntityResource { response.put(MetadataServiceClient.COUNT, traitNames.size()); return Response.ok(response).build(); + } catch (EntityNotFoundException e) { + LOG.error("An entity with GUID={} does not exist", guid, e); + throw new WebApplicationException( + Servlets.getErrorResponse(e, Response.Status.NOT_FOUND)); } catch (MetadataException | IllegalArgumentException e) { LOG.error("Unable to get trait names for entity {}", guid, e); throw new WebApplicationException( @@ -286,6 +300,10 @@ public class EntityResource { response.put(MetadataServiceClient.GUID, guid); return Response.created(locationURI).entity(response).build(); + } catch (EntityNotFoundException e) { + LOG.error("An entity with GUID={} does not exist", guid, e); + throw new WebApplicationException( + Servlets.getErrorResponse(e, Response.Status.NOT_FOUND)); } catch (MetadataException | IOException | IllegalArgumentException e) { LOG.error("Unable to add trait for entity={}", guid, e); throw new WebApplicationException( @@ -320,6 +338,10 @@ public class EntityResource { response.put(TRAIT_NAME, traitName); return Response.ok(response).build(); + } catch (EntityNotFoundException e) { + LOG.error("An entity with GUID={} does not exist", guid, e); + throw new WebApplicationException( + Servlets.getErrorResponse(e, Response.Status.NOT_FOUND)); } catch (MetadataException | IllegalArgumentException e) { LOG.error("Unable to delete trait name={} for entity={}", traitName, guid, e); throw new WebApplicationException( diff --git a/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/HiveLineageResource.java b/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/HiveLineageResource.java index 69091b9..076a916 100644 --- a/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/HiveLineageResource.java +++ b/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/HiveLineageResource.java @@ -33,7 +33,6 @@ import javax.inject.Singleton; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.*; import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; /** diff --git a/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/MetadataDiscoveryResource.java b/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/MetadataDiscoveryResource.java index f5d16d0..5928e37 100755 --- a/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/MetadataDiscoveryResource.java +++ b/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/MetadataDiscoveryResource.java @@ -38,7 +38,6 @@ import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.List; import java.util.Map; @@ -320,4 +319,4 @@ public class MetadataDiscoveryResource { return response; } } -} \ No newline at end of file +} diff --git a/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/RexsterGraphResource.java b/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/RexsterGraphResource.java index 8c336cd..0092879 100755 --- a/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/RexsterGraphResource.java +++ b/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/RexsterGraphResource.java @@ -46,7 +46,6 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.HashMap; import java.util.Map; diff --git a/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/TypesResource.java b/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/TypesResource.java index 3ad8076..b4ab051 100755 --- a/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/TypesResource.java +++ b/webapp/src/main/java/org/apache/hadoop/metadata/web/resources/TypesResource.java @@ -43,7 +43,6 @@ import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.ArrayList; import java.util.HashMap; diff --git a/webapp/src/test/java/org/apache/hadoop/metadata/web/resources/EntityJerseyResourceIT.java b/webapp/src/test/java/org/apache/hadoop/metadata/web/resources/EntityJerseyResourceIT.java index 2fe874c..d58ee5b 100755 --- a/webapp/src/test/java/org/apache/hadoop/metadata/web/resources/EntityJerseyResourceIT.java +++ b/webapp/src/test/java/org/apache/hadoop/metadata/web/resources/EntityJerseyResourceIT.java @@ -389,7 +389,7 @@ public class EntityJerseyResourceIT extends BaseResourceIT { @Test(dependsOnMethods = "testAddTrait") public void testAddExistingTrait() throws Exception { - final String traitName = "PII_Trait"; + final String traitName = "PII_Trait" + randomString(); Struct traitInstance = new Struct(traitName); String traitInstanceAsJSON = InstanceSerialization.toJson(traitInstance, true); @@ -408,7 +408,7 @@ public class EntityJerseyResourceIT extends BaseResourceIT { @Test(dependsOnMethods = "testGetTraitNames") public void testAddTraitWithAttribute() throws Exception { - final String traitName = "P_I_I"; + final String traitName = "PII_Trait" + randomString(); HierarchicalTypeDefinition<TraitType> piiTrait = TypesUtil.createTraitTypeDef(traitName, ImmutableList.<String>of(), TypesUtil.createRequiredAttrDef("type", DataTypes.STRING_TYPE)); @@ -456,7 +456,7 @@ public class EntityJerseyResourceIT extends BaseResourceIT { @Test public void testAddTraitWithNoRegistration() throws Exception { - final String traitName = "PII_Trait_Blah"; + final String traitName = "PII_Trait" + randomString(); HierarchicalTypeDefinition<TraitType> piiTrait = TypesUtil.createTraitTypeDef(traitName, ImmutableList.<String>of()); String traitDefinitionAsJSON = TypesSerialization$.MODULE$.toJson(piiTrait, true); -- libgit2 0.27.1