Skip to content

(#17458) Undo minor performance change in 2.7.x#1271

Merged
pcarlisle merged 3 commits intopuppetlabs:2.7.xfrom
joshcooper:ticket/2.7.x/17458-undo-performance-fix
Nov 8, 2012
Merged

(#17458) Undo minor performance change in 2.7.x#1271
pcarlisle merged 3 commits intopuppetlabs:2.7.xfrom
joshcooper:ticket/2.7.x/17458-undo-performance-fix

Conversation

@joshcooper
Copy link
Contributor

No description provided.

joshcooper and others added 3 commits November 8, 2012 14:58
Commit b5ed15b attempted to require
'puppet' at the right time, but failed. The command_line required puppet
before the application was required and its run_mode determined. As a
result, `puppet master` was using the default :user run_mode, causing
its pidfile to be named 'agent.pid' among other things.

This comit reverts b5ed15b.
In commit, 20efe94, a change was made to Puppet::Util.absolute_path? to
require the Puppet module only if necessary. This was done as an
optimization since re-requiring a file is much slower than checking if a
constant is defined.

However, defined?(Puppet) is always true when called within the
Puppet::Util.absolute_path? method, so effectively, absolute_path? would
never require the Puppet module, when previously it used to, in certain
exceptional flows.

In the normal flow, it wasn't an issue, because when puppet runs an
internal subcommand (Application), the app requires the Puppet module,
which loads features, which creates an autoloader, which calls the
absolute_path?  method.  At this point, requiring puppet is not needed.

However, if an external subcommand was specified, e.g.  `puppet foo`,
where `puppet-foo` is an external executable, or if no subcommand was
specified, e.g.  `puppet`, the CommandLine would attempt to resolve the
external subcommand using Puppet::Util.which, which calls absolute_path?
at a time when the Puppet module and features haven't been loaded,
causing #17458.

Ideally, the exceptional cases should be requiring puppet rather than
relying on the absolute_path?  method to do so.  However, in 3.x, this
entire logic has been reworked.  In 3.x, the default confdir/vardir
locations are solely based on whether we're running as root or not, and
not the application's run_mode setting.  As a result, we can and do
require puppet early on.

For 2.7.x, the safest thing is to revert the change in the require
'puppet' behavior.
Commit 20efe94 broke running `puppet` and `puppet-*` external
subcommands. This adds an acceptance test to make sure puppet doesn't
blow up when given an unknown external subcommand.

Paired-with: Josh Cooper <josh@puppetlabs.com>
pcarlisle added a commit that referenced this pull request Nov 8, 2012
…ormance-fix

(#17458) Undo minor performance change in 2.7.x
@pcarlisle pcarlisle merged commit b6679a7 into puppetlabs:2.7.x Nov 8, 2012
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants