Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(core): turn validation errors into metadata errors #2988

Closed
wants to merge 1 commit into from

Conversation

rix0rrr
Copy link
Contributor

@rix0rrr rix0rrr commented Jun 21, 2019

Validation errors are currently turned into exceptions. This causes
issues where missing context values lead to validation errors (such as
in the case of DnsValidatedCertificate): the error would have been
solved by retrieving the context value, but because an exception is
thrown the CLI stops immediately and doesn't re-execute.

I feel it also makes sense to treat these errors as construct errors,
as opposed to exceptions which I feel should be more "you're misusing
the API" kind of errors, rather than "something is wrong somewhere"
kind of errors.

The change I made is the smallest change to achieve the desired effect.
If we agree that we want this change, it would probably be better to
do it differently, just have .validate() implementors call
this.node.addError() immediately.

Fixes #2076.


Pull Request Checklist

  • Testing
    • Unit test added (prefer not to modify an existing test, otherwise, it's probably a breaking change)
    • CLI change?: coordinate update of integration tests with team
    • cdk-init template change?: coordinated update of integration tests with team
  • Docs
    • jsdocs: All public APIs documented
    • README: README and/or documentation topic updated
    • Design: For significant features, design document added to design folder
  • Title and Description
    • Change type: title prefixed with fix, feat and module name in parens, which will appear in changelog
    • Title: use lower-case and doesn't end with a period
    • Breaking?: last paragraph: "BREAKING CHANGE: <describe what changed + link for details>"
    • Issues: Indicate issues fixed via: "Fixes #xxx" or "Closes #xxx"
  • Sensitive Modules (requires 2 PR approvers)
    • IAM Policy Document (in @aws-cdk/aws-iam)
    • EC2 Security Groups and ACLs (in @aws-cdk/aws-ec2)
    • Grant APIs (only if not based on official documentation with a reference)

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license.

@rix0rrr rix0rrr requested a review from a team as a code owner June 21, 2019 10:30
Validation errors are currently turned into exceptions. This causes
issues where missing context values lead to validation errors (such as
in the case of `DnsValidatedCertificate`): the error would have been
solved by retrieving the context value, but because an exception is
thrown the CLI stops immediately and doesn't re-execute.

I feel it also makes sense to treat these errors as construct errors,
as opposed to exceptions which I feel should be more "you're misusing
the API" kind of errors, rather than "something is wrong somewhere"
kind of errors.

The change I made is the smallest change to achieve the desired effect.
If we agree that we want this change, it would probably be better to
do it differently, just have `.validate()` implementors call
`this.node.addError()` immediately.

Fixes #2076.
@rix0rrr rix0rrr force-pushed the huijbers/fix-hosted-zone-import-error branch from 1d9ffa1 to 41114db Compare June 21, 2019 10:31
@rix0rrr rix0rrr changed the title Huijbers/fix hosted zone import error fix(core): turn validation errors into metadata errors Jun 21, 2019
@eladb
Copy link
Contributor

eladb commented Jun 21, 2019

I’d expect this to fail many unit tests that rely on validate throwing. Also, I like the guarantee we provide today that synthesize won’t be called if validation failed because then constructs May have invalid data when they synthesize (E.g. pipeline can assume there will at least be a single stage).

@rix0rrr
Copy link
Contributor Author

rix0rrr commented Jun 21, 2019

I like the guarantee we provide today that synthesize won’t be called if validation failed

That's a good point. We can still provide that guarantee though.

@rix0rrr
Copy link
Contributor Author

rix0rrr commented Jun 21, 2019

I like the guarantee we provide today that synthesize won’t be called if validation failed

Yep, got some rendering that errors out. But how is it that skipValidation: true doesn't run into the same issue? Probable answer: it would have, but our tests just haven't encountered it yet?

@rix0rrr
Copy link
Contributor Author

rix0rrr commented Jun 21, 2019

Hmm. I still feel metadata errors are the "correct" solution, but this is indeed a harder change than it seems at first sight.

@eladb
Copy link
Contributor

eladb commented Jun 21, 2019

When a test used skipValidation it explicit acknowledges that it’s aware of the resulting behavior

@eladb
Copy link
Contributor

eladb commented Jun 21, 2019

Perhaps short term we can just special case the dummy value so that validation will not fail

@eladb
Copy link
Contributor

eladb commented Jun 23, 2019

Let's punt this for now

@eladb eladb closed this Jun 23, 2019
@RomainMuller RomainMuller deleted the huijbers/fix-hosted-zone-import-error branch August 10, 2019 00:39
@NGL321 NGL321 added the contribution/core This is a PR that came from AWS. label Sep 27, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
contribution/core This is a PR that came from AWS.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

DnsValidatedCertificate reports DNS zone example.com to be non-authoritative
3 participants