Avoid opening the database connection sooner than necessary.
authorRobert Haas <[email protected]>
Sun, 24 May 2009 02:00:19 +0000 (22:00 -0400)
committerRobert Haas <[email protected]>
Sun, 24 May 2009 02:00:19 +0000 (22:00 -0400)
perl-lib/PgCommitFest/Handler.pm
perl-lib/PgCommitFest/Request.pm

index 13af0fd91e9692b3cac4c78b73d8a7fa15eb6388..6ad00d9f1f473b444cabc86f863962adb7a400ff 100644 (file)
@@ -27,16 +27,11 @@ our %ACTION = (
        'patch_comment_delete'          => \&PgCommitFest::PatchComment::delete
 );
 
-our $PG = 'dbi:Pg:dbname=pgcommitfest';
-our $PGUSERNAME = 'pgcommitfest';
-our $PGPASSWORD = '';
-
 sub main_loop {
        $SIG{'PIPE'} = sub { die "SIGPIPE\n"; };
        while (1) {
                # Invoke main request handler and save any resulting error message.
-               my $db = PgCommitFest::DB->connect($PG, $PGUSERNAME, $PGPASSWORD);
-               my $r = PgCommitFest::Request->new($db);
+               my $r = PgCommitFest::Request->new();
                last if !defined $r;
                eval {
                        handler($r);
@@ -47,7 +42,7 @@ sub main_loop {
                my $err = $@;
 
                # Roll back any uncommited database work.
-               $db->tidy;
+               $r->db->tidy if $r->db_is_connected;
 
                # Print errors to system log.
                if ($err && $err ne "SIGPIPE\n" && $err ne "DONE\n") {
@@ -57,7 +52,6 @@ sub main_loop {
                                $r->render_template('error', { 'error_list' => [ $err ] });
                        }
                }
-               $db->disconnect;        
        }
 }
 
index 4ceaf7fc9dedddb1d233025841878ebd5a398c51..ae38399a5e8b00486155aa931c74901bf43f2fc0 100644 (file)
@@ -12,6 +12,9 @@ die "Must set PGCOMMITFEST_ROOT to root directory of installation!\n"
 our $ROOT = $ENV{'PGCOMMITFEST_ROOT'};
 our $template = Template->new({ 'INCLUDE_PATH' => $ROOT . '/template',
        'FILTERS' => { 'htmlsafe' => \&PgCommitFest::WebControl::escape } });
+our $PG = 'dbi:Pg:dbname=pgcommitfest';
+our $PGUSERNAME = 'pgcommitfest';
+our $PGPASSWORD = '';
 $CGI::POST_MAX = 65536;
 $CGI::DISABLE_UPLOADS = 1;  # No need for uploads at present.
 
@@ -23,7 +26,7 @@ sub new {
                'cgi' => $cgi,
                'control' => {},
                'control_list' => [],
-               'db' => $db,
+               'db' => undef,
                'error_list' => [],
                'header' => {
                        'Content-type' => 'text/html',
@@ -105,9 +108,18 @@ sub control {
 
 sub db {
        my ($self) = @_;
+       if (!defined $self->{'db'}) {
+               $self->{'db'} =
+                       PgCommitFest::DB->connect($PG, $PGUSERNAME, $PGPASSWORD);
+       }
        return $self->{'db'};
 }
 
+sub db_is_connected {
+       my ($self) = @_;
+       defined $self->{'db'};
+}
+
 sub error {
        my ($self, $fmt, @arg) = @_;
        push @{$self->{'error_list'}}, sprintf($fmt, @arg);