From 5d34e99acd639c0b2280891407846fb0bfce3a1c Mon Sep 17 00:00:00 2001 From: Gabe Lyons Date: Wed, 23 Jun 2021 22:30:57 -0700 Subject: [PATCH] Revert "fix(gms): add rest.li validation in gms (#2745)" This reverts commit f0b4adc0e498ad5e549221494334befc1964b1dc. --- .../metadata/resources/ResourceUtils.java | 36 ------------------- .../resources/entity/AspectResource.java | 7 +--- .../resources/entity/EntityResource.java | 16 +-------- .../com/linkedin/common/urn/UrnValidator.java | 30 ---------------- 4 files changed, 2 insertions(+), 87 deletions(-) delete mode 100644 gms/impl/src/main/java/com/linkedin/metadata/resources/ResourceUtils.java delete mode 100644 li-utils/src/main/javaPegasus/com/linkedin/common/urn/UrnValidator.java diff --git a/gms/impl/src/main/java/com/linkedin/metadata/resources/ResourceUtils.java b/gms/impl/src/main/java/com/linkedin/metadata/resources/ResourceUtils.java deleted file mode 100644 index 8b35d7785b7b9..0000000000000 --- a/gms/impl/src/main/java/com/linkedin/metadata/resources/ResourceUtils.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.linkedin.metadata.resources; - -import com.linkedin.common.urn.UrnValidator; -import com.linkedin.data.schema.validation.ValidateDataAgainstSchema; -import com.linkedin.data.schema.validation.ValidationOptions; -import com.linkedin.data.schema.validation.ValidationResult; -import com.linkedin.data.template.RecordTemplate; -import com.linkedin.restli.common.HttpStatus; -import com.linkedin.restli.server.RestLiServiceException; - - -public class ResourceUtils { - - private static final ValidationOptions DEFAULT_VALIDATION_OPTIONS = new ValidationOptions(); - private static final UrnValidator URN_VALIDATOR = new UrnValidator(); - - /** - * Validates a {@link RecordTemplate} and throws {@link com.linkedin.restli.server.RestLiServiceException} - * if validation fails. - * - * @param record record to be validated. - * @param status the status code to return to the client on failure. - */ - public static void validateRecord(RecordTemplate record, HttpStatus status) { - final ValidationResult result = ValidateDataAgainstSchema.validate( - record, - DEFAULT_VALIDATION_OPTIONS, - URN_VALIDATOR); - if (!result.isValid()) { - throw new RestLiServiceException(status, result.getMessages().toString()); - } - } - - private ResourceUtils() { } - -} diff --git a/gms/impl/src/main/java/com/linkedin/metadata/resources/entity/AspectResource.java b/gms/impl/src/main/java/com/linkedin/metadata/resources/entity/AspectResource.java index bf7be220cf72f..207fbc0c63a33 100644 --- a/gms/impl/src/main/java/com/linkedin/metadata/resources/entity/AspectResource.java +++ b/gms/impl/src/main/java/com/linkedin/metadata/resources/entity/AspectResource.java @@ -5,7 +5,6 @@ import com.linkedin.metadata.entity.EntityService; import com.linkedin.metadata.restli.RestliUtils; import com.linkedin.parseq.Task; -import com.linkedin.restli.common.HttpStatus; import com.linkedin.restli.server.annotations.Optional; import com.linkedin.restli.server.annotations.QueryParam; import com.linkedin.restli.server.annotations.RestLiCollection; @@ -19,9 +18,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static com.linkedin.metadata.resources.ResourceUtils.*; - - /** * Single unified resource for fetching, updating, searching, & browsing DataHub entities */ @@ -50,10 +46,9 @@ public Task get( final VersionedAspect aspect = _entityService.getVersionedAspect(urn, aspectName, version); if (aspect == null) { throw RestliUtils.resourceNotFoundException(); - } else { - validateRecord(aspect, HttpStatus.S_500_INTERNAL_SERVER_ERROR); } return aspect; }); } + } diff --git a/gms/impl/src/main/java/com/linkedin/metadata/resources/entity/EntityResource.java b/gms/impl/src/main/java/com/linkedin/metadata/resources/entity/EntityResource.java index f80dcb316b20b..860a699c593f3 100644 --- a/gms/impl/src/main/java/com/linkedin/metadata/resources/entity/EntityResource.java +++ b/gms/impl/src/main/java/com/linkedin/metadata/resources/entity/EntityResource.java @@ -16,15 +16,12 @@ import com.linkedin.metadata.search.SearchService; import com.linkedin.metadata.search.utils.BrowsePathUtils; import com.linkedin.parseq.Task; -import com.linkedin.restli.common.HttpStatus; -import com.linkedin.restli.common.validation.RestLiDataValidator; import com.linkedin.restli.server.annotations.Action; import com.linkedin.restli.server.annotations.ActionParam; import com.linkedin.restli.server.annotations.Optional; import com.linkedin.restli.server.annotations.QueryParam; import com.linkedin.restli.server.annotations.RestLiCollection; import com.linkedin.restli.server.annotations.RestMethod; -import com.linkedin.restli.server.annotations.ValidatorParam; import com.linkedin.restli.server.resources.CollectionResourceTaskTemplate; import java.net.URISyntaxException; import java.time.Clock; @@ -42,7 +39,6 @@ import org.slf4j.LoggerFactory; import static com.linkedin.metadata.PegasusUtils.urnToEntityName; -import static com.linkedin.metadata.resources.ResourceUtils.*; import static com.linkedin.metadata.restli.RestliConstants.ACTION_AUTOCOMPLETE; import static com.linkedin.metadata.restli.RestliConstants.ACTION_BROWSE; import static com.linkedin.metadata.restli.RestliConstants.ACTION_GET_BROWSE_PATHS; @@ -99,8 +95,6 @@ public Task get(@Nonnull String urnStr, @QueryParam(PARAM_ASPECTS) @Opti final Entity entity = _entityService.getEntity(urn, projectedAspects); if (entity == null) { throw RestliUtils.resourceNotFoundException(); - } else { - validateRecord(entity, HttpStatus.S_500_INTERNAL_SERVER_ERROR); } return entity; }); @@ -122,17 +116,13 @@ public Task> batchGet( return _entityService.getEntities(urns, projectedAspects) .entrySet() .stream() - .peek(entry -> validateRecord(entry.getValue(), HttpStatus.S_500_INTERNAL_SERVER_ERROR)) .collect(Collectors.toMap(entry -> entry.getKey().toString(), Map.Entry::getValue)); }); } @Action(name = ACTION_INGEST) @Nonnull - public Task ingest(@ActionParam(PARAM_ENTITY) @Nonnull Entity entity, @ValidatorParam RestLiDataValidator validator) throws URISyntaxException { - - validateRecord(entity, HttpStatus.S_422_UNPROCESSABLE_ENTITY); - + public Task ingest(@ActionParam(PARAM_ENTITY) @Nonnull Entity entity) throws URISyntaxException { final Set projectedAspects = new HashSet<>(Arrays.asList("browsePaths")); final RecordTemplate snapshotRecord = RecordUtils.getSelectedRecordTemplateFromUnion(entity.getValue()); final Urn urn = com.linkedin.metadata.dao.utils.ModelUtils.getUrnFromSnapshot(snapshotRecord); @@ -154,10 +144,6 @@ public Task ingest(@ActionParam(PARAM_ENTITY) @Nonnull Entity entity, @Val @Action(name = ACTION_BATCH_INGEST) @Nonnull public Task batchIngest(@ActionParam(PARAM_ENTITIES) @Nonnull Entity[] entities) throws URISyntaxException { - for (Entity entity : entities) { - validateRecord(entity, HttpStatus.S_422_UNPROCESSABLE_ENTITY); - } - final AuditStamp auditStamp = new AuditStamp().setTime(_clock.millis()).setActor(Urn.createFromString(DEFAULT_ACTOR)); return RestliUtils.toTask(() -> { diff --git a/li-utils/src/main/javaPegasus/com/linkedin/common/urn/UrnValidator.java b/li-utils/src/main/javaPegasus/com/linkedin/common/urn/UrnValidator.java deleted file mode 100644 index ae7fe58614eb1..0000000000000 --- a/li-utils/src/main/javaPegasus/com/linkedin/common/urn/UrnValidator.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.linkedin.common.urn; - -import com.linkedin.data.message.Message; -import com.linkedin.data.schema.DataSchema; -import com.linkedin.data.schema.NamedDataSchema; -import com.linkedin.data.schema.validator.Validator; -import com.linkedin.data.schema.validator.ValidatorContext; -import java.net.URISyntaxException; - - -/** - * Rest.li Validator responsible for ensuring that {@link Urn} objects are well-formed. - * - * Note that this validator does not validate the integrity of strongly typed urns, - * or validate Urn objects against their associated key aspect. - */ -public class UrnValidator implements Validator { - @Override - public void validate(ValidatorContext context) { - if (DataSchema.Type.TYPEREF.equals(context.dataElement().getSchema().getType()) - && ((NamedDataSchema) context.dataElement().getSchema()).getName().endsWith("Urn")) { - try { - Urn.createFromString((String) context.dataElement().getValue()); - } catch (URISyntaxException e) { - context.addResult(new Message(context.dataElement().path(), "\"Provided urn %s\" is invalid", context.dataElement().getValue())); - context.setHasFix(false); - } - } - } -}