[Jifty-commit] r6951 - in jifty/trunk/lib/Jifty: .
Jifty commits
jifty-commit at lists.jifty.org
Thu May 7 02:46:30 EDT 2009
Author: sunnavy
Date: Thu May 7 02:46:29 2009
New Revision: 6951
Modified:
jifty/trunk/lib/Jifty/Script/Server.pm
jifty/trunk/lib/Jifty/Server.pm
Log:
forked server script so we can have real restart from now on
Modified: jifty/trunk/lib/Jifty/Script/Server.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Script/Server.pm (original)
+++ jifty/trunk/lib/Jifty/Script/Server.pm Thu May 7 02:46:29 2009
@@ -17,10 +17,10 @@
BEGIN { $SIG{__DIE__} = $x;}
-
use File::Path ();
use constant PIDFILE => 'var/jifty-server.pid';
+use constant PARENTPIDFILE => 'var/jifty-server-parent.pid';
=head1 NAME
@@ -67,6 +67,11 @@
Stops the server, if it is running. This is accomplished by reading
the PID from C<var/jifty-server.pid>
+=item --restart
+
+restart the server, if it is running. This is accomplished by
+killing the child pid, and let parent pid create a new one
+
=item --sigready SIGNAL
Sets the signal number that shouldbe sent to the server's parent
@@ -98,6 +103,7 @@
$self->SUPER::options,
'p|port=s' => 'port',
'stop' => 'stop',
+ 'restart' => 'restart',
'sigready=s' => 'sigready',
'quiet' => 'quiet',
'dbiprof' => 'dbiprof',
@@ -123,30 +129,57 @@
sub run {
my $self = shift;
- $self->print_help;
- Jifty->new();
+ if ( $self->{stop} ) {
+ $self->_stop;
+ }
+ elsif ( $self->{restart} ) {
+ $self->_stop_child;
+ }
+ else {
+ $self->_fork;
+ }
+}
- if ($self->{stop}) {
- open my $fh, '<', PIDFILE;
- my $pid = <$fh>;
- kill 'TERM' => $pid;
- return;
+sub _fork {
+ my $self = shift;
+ my $pid = fork;
+
+ die 'fork failed' unless defined $pid;
+ if ($pid) {
+ open my $fh, '>', PARENTPIDFILE or die $!;
+ print $fh $$;
+ close $fh;
+
+ wait;
+ sleep 1; # to make cpu happy
+ $self->_fork;
+ }
+ else {
+ $self->_run_server;
}
+}
+
+sub _run_server {
+ my $self = shift;
+ $self->print_help;
+ Jifty->new();
# Purge stale mason cache data
- my $data_dir = Jifty->config->framework('Web')->{'DataDir'};
- my $server_class = Jifty->config->framework('Web')->{'ServerClass'} || 'Jifty::Server';
+ my $data_dir = Jifty->config->framework('Web')->{'DataDir'};
+ my $server_class = Jifty->config->framework('Web')->{'ServerClass'}
+ || 'Jifty::Server';
die "--user option only available with Net::Server subclasses\n"
- if $self->{user} and $server_class eq "Jifty::Server";
+ if $self->{user} and $server_class eq "Jifty::Server";
die "--group option only available with Net::Server subclasses\n"
- if $self->{group} and $server_class eq "Jifty::Server";
+ if $self->{group} and $server_class eq "Jifty::Server";
die "--host option only available with Net::Server subclasses\n"
- if $self->{host} and $server_class eq "Jifty::Server";
+ if $self->{host} and $server_class eq "Jifty::Server";
Jifty::Util->require($server_class);
- File::Path::rmtree(["$data_dir/cache", "$data_dir/obj"])
- if Jifty->handler->view('Jifty::View::Mason::Handler') and -d $data_dir;
+ File::Path::rmtree( [ "$data_dir/cache", "$data_dir/obj" ] )
+ if Jifty->handler->view('Jifty::View::Mason::Handler')
+ and -d $data_dir;
$SIG{TERM} = sub { exit };
open my $fh, '>', PIDFILE or die $!;
@@ -154,16 +187,33 @@
close $fh;
Jifty->handle->dbh->{Profile} = '6/DBI::ProfileDumper'
- if $self->{dbiprof};
+ if $self->{dbiprof};
$ENV{JIFTY_SERVER_SIGREADY} ||= $self->{sigready}
- if $self->{sigready};
+ if $self->{sigready};
Log::Log4perl->get_logger($server_class)->less_logging(3)
- if $self->{quiet};
- $Jifty::SERVER = $server_class->new(port => $self->{port});
+ if $self->{quiet};
+ $Jifty::SERVER = $server_class->new( port => $self->{port} );
my @args;
- push @args, $_ => $self->{$_} for grep {exists $self->{$_}} qw/user group host/;
- $Jifty::SERVER->run( @args );
+ push @args, $_ => $self->{$_}
+ for grep { exists $self->{$_} } qw/user group host/;
+ $Jifty::SERVER->run(@args);
+}
+
+sub _stop {
+ my $self = shift;
+ open my $fh, '<', PARENTPIDFILE or die $!;
+ my $pid = <$fh>;
+ kill 'TERM' => $pid;
+
+ $self->_stop_child;
+ return;
+}
+
+sub _stop_child {
+ open my $fh, '<', PIDFILE or die $!;
+ my $pid = <$fh>;
+ kill 'TERM' => $pid;
}
1;
Modified: jifty/trunk/lib/Jifty/Server.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Server.pm (original)
+++ jifty/trunk/lib/Jifty/Server.pm Thu May 7 02:46:29 2009
@@ -145,7 +145,7 @@
sub restart {
my $self = shift;
- local @ARGV = ( 'server' );
+ local @ARGV = ( 'server', '--restart' );
$self->SUPER::restart;
}
More information about the Jifty-commit
mailing list