Skip to content
This repository

HUP doesn't restore the arguments properly because of the use of $0 #34

Closed
miyagawa opened this Issue September 06, 2011 · 9 comments

2 participants

Tatsuhiko Miyagawa frankyd
Tatsuhiko Miyagawa
Owner

With Plack 0.9971's $0 change, the HUP signal handling is broken, and the way Net::Server retrieves the original command line args.

See also: https://github.com/miyagawa/Plack/issues/243

frankyd

I have an example of how to reproduce this:

https://gist.github.com/1197586

https://gist.github.com/1197876

Tatsuhiko Miyagawa
Owner

Note that this may or may not work with procfs because of the way Net::Server works. A quick test shows that there's no issue with Mac OS X.

Tatsuhiko Miyagawa
Owner

I keep failing to reproduce this bug on Mac, and also hear issues from linux users (I think). Can someone specify 100% reproducible simple step to replicate this bug? I do have a linux environment to test and fix if there's any.

Tatsuhiko Miyagawa
Owner

OK i could reproduce now - is it correct that it only happens on a) linux, b) when you use PSGI file other than app.psgi and c) when you use --preload-app.

Tatsuhiko Miyagawa
Owner

Sort of related, Net::Server does this:

delete $ENV{$_} for $self->hup_delete_env_keys;
sub hup_delete_env_keys { return qw(PATH) }

which means if you run starman using just 'perl', relying on your $PATH configured correctly, then sending HUP could potentially run the process again from a wrong path. This is issue number one.

Tatsuhiko Miyagawa
Owner

I think restarting the server with exec $0, @ARGV is not exactly what we want - we should override Net::Server's behavior of handling HUP signals. Also the code to get the original command line in Net::Server is just insane:
https://metacpan.org/source/RHANDOM/Net-Server-0.99/lib/Net/Server.pm#L162

http://unicorn.bogomips.org/SIGNALS.html handles HUP to restart config files, then restart all workers. It will pick up code changes unless the preload_app is used, which we could replicate in Starman as well.

If you use --preload-app then the code changes won't be picked up, which could be confusing to some people. We can document that in --preload-app that you can run starman behind Server::Starter to make HUP to fully restart the server while preloading the app entirely.

Tatsuhiko Miyagawa
Owner

0.29_01 is shipped to CPAN. Test it.

frankyd

I have tested version 0.29_90 and it works exactly as you have described above and in the documentation. A HUP signal now successfully restarts the workers. Thanks for sorting this out.

Tatsuhiko Miyagawa
Owner

Closing.

Tatsuhiko Miyagawa miyagawa closed this October 31, 2012
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.