-
Notifications
You must be signed in to change notification settings - Fork 516
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
Reject config with unknown directives before committing to it #1897
Reject config with unknown directives before committing to it #1897
Conversation
Ideally, we want to reject configurations with unknown directives before applying any configuration changes that correspond to known directives, but current apply-as-you-parse architecture makes that impractical. Pending smooth reconfiguration refactoring will make that possible, but we can make a step towards that ideal future now. Rejecting bad configurations before calling configDoConfigure() reduces the set of configuration errors that Squid can detect in one execution (because configDoConfigure() error-checking code is not reached), but that small reduction is a lesser evil compared to running configDoConfigure() with a clearly broken config, especially when we are going to kill Squid anyway. While many legacy parse_foo() functions do apply significant changes before configDoConfigure(), we cannot easily prevent that (for now). We can easily prevent configDoConfigure().
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This PR is a yet another tiny step towards smooth reconfiguration support, addressing an existing TODO. It is probably the last change I can carve out before #1840 is finally merged. Isolating and maintaining these pending changes wastes a lot of my time. Please move #1840 forward!
This review annotates this PR but does not request any changes.
@@ -625,22 +625,16 @@ Configuration::Parse() | |||
|
|||
defaults_postscriptum(); | |||
|
|||
if (unrecognizedDirectives) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It may be tempting to throw even earlier, when unrecognizedDirectives constant is set above defaults_if_none() and defaults_postscriptum() calls. However, we should not do that. It is not obvious in the current code, but those two functions can also detect unrecognized directives and similar problems. Pending smooth reconfiguration changes will make this code look natural, removing the current "Why not throw earlier?" question.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Ideally, we want to reject configurations with unknown directives before applying any configuration changes that correspond to known directives, but current apply-as-you-parse architecture makes that impractical. Pending smooth reconfiguration refactoring will make that possible, but we can make a step towards that ideal future now. Rejecting bad configurations before calling configDoConfigure() reduces the set of configuration errors that Squid can detect in one execution (because configDoConfigure() error-checking code is not reached), but that small reduction is a lesser evil compared to running configDoConfigure() with a clearly broken config, especially when we are going to kill Squid anyway. While many legacy parse_foo() functions do apply significant changes before configDoConfigure(), we cannot easily prevent that (for now). We can easily prevent configDoConfigure().
…cache#1897) Ideally, we want to reject configurations with unknown directives before applying any configuration changes that correspond to known directives, but current apply-as-you-parse architecture makes that impractical. Pending smooth reconfiguration refactoring will make that possible, but we can make a step towards that ideal future now. Rejecting bad configurations before calling configDoConfigure() reduces the set of configuration errors that Squid can detect in one execution (because configDoConfigure() error-checking code is not reached), but that small reduction is a lesser evil compared to running configDoConfigure() with a clearly broken config, especially when we are going to kill Squid anyway. While many legacy parse_foo() functions do apply significant changes before configDoConfigure(), we cannot easily prevent that (for now). We can easily prevent configDoConfigure().
Ideally, we want to reject configurations with unknown directives before
applying any configuration changes that correspond to known directives,
but current apply-as-you-parse architecture makes that impractical.
Pending smooth reconfiguration refactoring will make that possible, but
we can make a step towards that ideal future now.
Rejecting bad configurations before calling configDoConfigure() reduces
the set of configuration errors that Squid can detect in one execution
(because configDoConfigure() error-checking code is not reached), but
that small reduction is a lesser evil compared to running
configDoConfigure() with a clearly broken config, especially when we are
going to kill Squid anyway. While many legacy parse_foo() functions do
apply significant changes before configDoConfigure(), we cannot easily
prevent that (for now). We can easily prevent configDoConfigure().