Index: /trunk/Nebulous-Server/lib/Nebulous/Server.pm
===================================================================
--- /trunk/Nebulous-Server/lib/Nebulous/Server.pm	(revision 13308)
+++ /trunk/Nebulous-Server/lib/Nebulous/Server.pm	(revision 13309)
@@ -1,5 +1,5 @@
 # Copyright (c) 2004  Joshua Hoblitt
 #
-# $Id: Server.pm,v 1.42 2007-05-08 02:31:34 jhoblitt Exp $
+# $Id: Server.pm,v 1.43 2007-05-08 23:47:03 jhoblitt Exp $
 
 package Nebulous::Server;
@@ -54,13 +54,13 @@
 
         $db->commit;
+        $log->debug("commit");
     };
     if ( $@ ) {
         $db->rollback if $db;
+        $log->debug("rollback");
         $log->logdie( "database error: $@" );
     }
 
     $log->debug( "connected to database: ", sub { $db->data_sources; } );
-
-    $log->debug( "leaving" );
 
     my $self = bless {}, ref $class || $class;
@@ -70,4 +70,6 @@
     $self->config($config);
 
+    $log->debug( "leaving" );
+    
     return $self;
 }
@@ -80,11 +82,19 @@
         return $self;
     }
-    
+
     my $log     = $self->log;
     my $sql     = $self->sql;
     my $config  = $self->config;
 
+    # if the dbh is still alive, return it
+    if (defined $self->{db} and $self->{db}->ping) {
+        $log->debug("db handle is still alive");
+        return $self->{db};
+    }
+    # otherwise create a new connection
+    $log->debug("db handle is dead");
+
     # if we're running under mod_perl & Apache::DBI is loaded we want to
-    # reconnect to the database everytime the dbh is request.  The rational is
+    # reconnect to the database everytime the dbh is requested.  The rational is
     # that if we're running under mod_perl this is probably a log running
     # processes and the database might have gone away on us.  Apache::DBI will
@@ -107,7 +117,9 @@
 
             $db->commit;
+            $log->debug("commit");
         };
         if ( $@ ) {
             $db->rollback if $db;
+            $log->debug("rollback");
             $log->logdie( "database error: $@" );
         }
@@ -145,5 +157,5 @@
     $log->debug( "entered - @_" );
 
-    my $ins_id;
+    my ($uri, $vol_id);
     eval {
         {
@@ -177,4 +189,5 @@
         }
 
+        my $ins_id;
         {
             # get instance ID
@@ -187,28 +200,15 @@
             $query->finish;
         }
-    };
-    if ($@) {
-        $db->rollback;
-        $log->logdie("database error: $@");
-    }
-
-    # Unfortunately, since we want to use the instance row's ID as part of the
-    # actual on disk file name we can't try to create the file until after
-    # we've create both a new storage_storage object and instance.
-
-    # TODO add some stuff here to retry if unsucessful
-    my ($uri, $vol_id);
-    eval {
+
+        # Unfortunately, since we want to use the instance row's ID as part of the
+        # actual on disk file name we can't try to create the file until after
+        # we've create both a new storage_storage object and instance.
+
+        # TODO add some stuff here to retry if unsucessful
         ($uri, $vol_id) = $self->_create_empty_instance_file($key, $ins_id, $vol_name);
-    };
-    if ($@) {
-        $db->rollback;
-        $log->logdie($@);
-    }
-
-    $log->debug("created $uri on volume ID: $vol_id");
-
-    eval {
-        {
+        $log->debug("created $uri on volume ID: $vol_id");
+
+        {
+            # update the instance with URI & vol_id that the file is on
             my $query = $db->prepare_cached( $sql->update_instance_uri );
             # vol_id, uri, ins_id
@@ -221,5 +221,6 @@
     if ($@) {
         $db->rollback;
-        $log->logdie("database error: $@");
+        $log->debug("rollback");
+        $log->logdie("error: $@");
     }
 
@@ -267,7 +268,9 @@
 
         $db->commit;
-    };
-    if ($@) {
-        $db->rollback;
+        $log->debug("commit");
+    };
+    if ($@) {
+        $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -315,4 +318,5 @@
                 $query->finish;
                 $db->rollback;
+                $log->debug("rollback");
                 $log->logdie( "storage object does not exist" );
             }
@@ -339,4 +343,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie( "database error: $@" );
     }
@@ -353,4 +358,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie($@);
     }
@@ -364,7 +370,9 @@
 
         $db->commit;
-    };
-    if ($@) {
-        $db->rollback;
+        $log->debug("commit");
+    };
+    if ($@) {
+        $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -423,4 +431,5 @@
         $query->finish;
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie( "database error: $@" );
     }
@@ -431,4 +440,5 @@
         if ( $write_lock ) {
             eval { $db->rollback; };
+            $log->debug("rollback");
             $log->logdie( "database error: $@" ) if $@;
 
@@ -438,4 +448,5 @@
         if ( $read_lock > 0 ) {
             eval { $db->rollback; };
+            $log->debug("rollback");
             $log->logdie( "database error: $@" ) if $@;
 
@@ -453,7 +464,9 @@
 
             $db->commit;
+            $log->debug("commit");
         };
         if ( $@ ) {
             $db->rollback;
+            $log->debug("rollback");
             $log->logdie( "database error: $@" );
         }
@@ -468,4 +481,5 @@
         if ( $write_lock ) {
             eval { $db->rollback; };
+            $log->debug("rollback");
             $log->logdie( "database error: $@" ) if $@;
 
@@ -483,7 +497,9 @@
 
             $db->commit;
+            $log->debug("commit");
         };
         if ( $@ ) {
             $db->rollback;
+            $log->debug("rollback");
             $log->logdie( "database error: $@" );
         }
@@ -546,4 +562,5 @@
         $query->finish;
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie( "database error: $@" );
     }
@@ -553,4 +570,5 @@
         if ( $read_lock ) {
             eval { $db->rollback; };
+            $log->debug("rollback");
             $log->logdie( "database error: $@" ) if $@;
            
@@ -559,4 +577,5 @@
         unless ( $write_lock ) {
             eval { $db->rollback; };
+            $log->debug("rollback");
             $log->logdie( "database error: $@" ) if $@;
 
@@ -574,7 +593,9 @@
 
             $db->commit;
+            $log->debug("commit");
         };
         if ( $@ ) {
             $db->rollback;
+            $log->debug("rollback");
             $log->logdie( "database error: $@" );
         }
@@ -590,4 +611,5 @@
         if ( $write_lock ) {
             eval { $db->rollback; };
+            $log->debug("rollback");
             $log->logdie( "database error: $@" ) if $@;
            
@@ -597,4 +619,5 @@
         if ( $read_lock == 0 ) {
             eval { $db->rollback; };
+            $log->debug("rollback");
             $log->logdie( "database error: $@" ) if $@;
            
@@ -613,7 +636,9 @@
 
             $db->commit;
+            $log->debug("commit");
         };
         if ( $@ ) {
             $db->rollback;
+            $log->debug("rollback");
             $log->logdie( "database error: $@" );
         }
@@ -686,4 +711,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -691,7 +717,9 @@
     eval { 
         $db->commit;
-    };
-    if ($@) {
-        $db->rollback;
+        $log->debug("commit");
+    };
+    if ($@) {
+        $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -738,4 +766,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -778,4 +807,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -827,4 +857,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -832,7 +863,9 @@
     eval { 
         $db->commit;
-    };
-    if ($@) {
-        $db->rollback;
+        $log->debug("commit");
+    };
+    if ($@) {
+        $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -1019,7 +1052,9 @@
 
         $db->commit;
+        $log->debug("commit");
     };
     if ( $@ ) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie( "database error: $@" );
     }
@@ -1064,4 +1099,5 @@
     if ( $@ ) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -1122,4 +1158,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -1151,4 +1188,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie( "database error: $@" );
     }
@@ -1180,4 +1218,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie( "database error: $@" );
     }
Index: /trunk/Nebulous/lib/Nebulous/Server.pm
===================================================================
--- /trunk/Nebulous/lib/Nebulous/Server.pm	(revision 13308)
+++ /trunk/Nebulous/lib/Nebulous/Server.pm	(revision 13309)
@@ -1,5 +1,5 @@
 # Copyright (c) 2004  Joshua Hoblitt
 #
-# $Id: Server.pm,v 1.42 2007-05-08 02:31:34 jhoblitt Exp $
+# $Id: Server.pm,v 1.43 2007-05-08 23:47:03 jhoblitt Exp $
 
 package Nebulous::Server;
@@ -54,13 +54,13 @@
 
         $db->commit;
+        $log->debug("commit");
     };
     if ( $@ ) {
         $db->rollback if $db;
+        $log->debug("rollback");
         $log->logdie( "database error: $@" );
     }
 
     $log->debug( "connected to database: ", sub { $db->data_sources; } );
-
-    $log->debug( "leaving" );
 
     my $self = bless {}, ref $class || $class;
@@ -70,4 +70,6 @@
     $self->config($config);
 
+    $log->debug( "leaving" );
+    
     return $self;
 }
@@ -80,11 +82,19 @@
         return $self;
     }
-    
+
     my $log     = $self->log;
     my $sql     = $self->sql;
     my $config  = $self->config;
 
+    # if the dbh is still alive, return it
+    if (defined $self->{db} and $self->{db}->ping) {
+        $log->debug("db handle is still alive");
+        return $self->{db};
+    }
+    # otherwise create a new connection
+    $log->debug("db handle is dead");
+
     # if we're running under mod_perl & Apache::DBI is loaded we want to
-    # reconnect to the database everytime the dbh is request.  The rational is
+    # reconnect to the database everytime the dbh is requested.  The rational is
     # that if we're running under mod_perl this is probably a log running
     # processes and the database might have gone away on us.  Apache::DBI will
@@ -107,7 +117,9 @@
 
             $db->commit;
+            $log->debug("commit");
         };
         if ( $@ ) {
             $db->rollback if $db;
+            $log->debug("rollback");
             $log->logdie( "database error: $@" );
         }
@@ -145,5 +157,5 @@
     $log->debug( "entered - @_" );
 
-    my $ins_id;
+    my ($uri, $vol_id);
     eval {
         {
@@ -177,4 +189,5 @@
         }
 
+        my $ins_id;
         {
             # get instance ID
@@ -187,28 +200,15 @@
             $query->finish;
         }
-    };
-    if ($@) {
-        $db->rollback;
-        $log->logdie("database error: $@");
-    }
-
-    # Unfortunately, since we want to use the instance row's ID as part of the
-    # actual on disk file name we can't try to create the file until after
-    # we've create both a new storage_storage object and instance.
-
-    # TODO add some stuff here to retry if unsucessful
-    my ($uri, $vol_id);
-    eval {
+
+        # Unfortunately, since we want to use the instance row's ID as part of the
+        # actual on disk file name we can't try to create the file until after
+        # we've create both a new storage_storage object and instance.
+
+        # TODO add some stuff here to retry if unsucessful
         ($uri, $vol_id) = $self->_create_empty_instance_file($key, $ins_id, $vol_name);
-    };
-    if ($@) {
-        $db->rollback;
-        $log->logdie($@);
-    }
-
-    $log->debug("created $uri on volume ID: $vol_id");
-
-    eval {
-        {
+        $log->debug("created $uri on volume ID: $vol_id");
+
+        {
+            # update the instance with URI & vol_id that the file is on
             my $query = $db->prepare_cached( $sql->update_instance_uri );
             # vol_id, uri, ins_id
@@ -221,5 +221,6 @@
     if ($@) {
         $db->rollback;
-        $log->logdie("database error: $@");
+        $log->debug("rollback");
+        $log->logdie("error: $@");
     }
 
@@ -267,7 +268,9 @@
 
         $db->commit;
-    };
-    if ($@) {
-        $db->rollback;
+        $log->debug("commit");
+    };
+    if ($@) {
+        $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -315,4 +318,5 @@
                 $query->finish;
                 $db->rollback;
+                $log->debug("rollback");
                 $log->logdie( "storage object does not exist" );
             }
@@ -339,4 +343,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie( "database error: $@" );
     }
@@ -353,4 +358,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie($@);
     }
@@ -364,7 +370,9 @@
 
         $db->commit;
-    };
-    if ($@) {
-        $db->rollback;
+        $log->debug("commit");
+    };
+    if ($@) {
+        $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -423,4 +431,5 @@
         $query->finish;
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie( "database error: $@" );
     }
@@ -431,4 +440,5 @@
         if ( $write_lock ) {
             eval { $db->rollback; };
+            $log->debug("rollback");
             $log->logdie( "database error: $@" ) if $@;
 
@@ -438,4 +448,5 @@
         if ( $read_lock > 0 ) {
             eval { $db->rollback; };
+            $log->debug("rollback");
             $log->logdie( "database error: $@" ) if $@;
 
@@ -453,7 +464,9 @@
 
             $db->commit;
+            $log->debug("commit");
         };
         if ( $@ ) {
             $db->rollback;
+            $log->debug("rollback");
             $log->logdie( "database error: $@" );
         }
@@ -468,4 +481,5 @@
         if ( $write_lock ) {
             eval { $db->rollback; };
+            $log->debug("rollback");
             $log->logdie( "database error: $@" ) if $@;
 
@@ -483,7 +497,9 @@
 
             $db->commit;
+            $log->debug("commit");
         };
         if ( $@ ) {
             $db->rollback;
+            $log->debug("rollback");
             $log->logdie( "database error: $@" );
         }
@@ -546,4 +562,5 @@
         $query->finish;
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie( "database error: $@" );
     }
@@ -553,4 +570,5 @@
         if ( $read_lock ) {
             eval { $db->rollback; };
+            $log->debug("rollback");
             $log->logdie( "database error: $@" ) if $@;
            
@@ -559,4 +577,5 @@
         unless ( $write_lock ) {
             eval { $db->rollback; };
+            $log->debug("rollback");
             $log->logdie( "database error: $@" ) if $@;
 
@@ -574,7 +593,9 @@
 
             $db->commit;
+            $log->debug("commit");
         };
         if ( $@ ) {
             $db->rollback;
+            $log->debug("rollback");
             $log->logdie( "database error: $@" );
         }
@@ -590,4 +611,5 @@
         if ( $write_lock ) {
             eval { $db->rollback; };
+            $log->debug("rollback");
             $log->logdie( "database error: $@" ) if $@;
            
@@ -597,4 +619,5 @@
         if ( $read_lock == 0 ) {
             eval { $db->rollback; };
+            $log->debug("rollback");
             $log->logdie( "database error: $@" ) if $@;
            
@@ -613,7 +636,9 @@
 
             $db->commit;
+            $log->debug("commit");
         };
         if ( $@ ) {
             $db->rollback;
+            $log->debug("rollback");
             $log->logdie( "database error: $@" );
         }
@@ -686,4 +711,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -691,7 +717,9 @@
     eval { 
         $db->commit;
-    };
-    if ($@) {
-        $db->rollback;
+        $log->debug("commit");
+    };
+    if ($@) {
+        $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -738,4 +766,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -778,4 +807,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -827,4 +857,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -832,7 +863,9 @@
     eval { 
         $db->commit;
-    };
-    if ($@) {
-        $db->rollback;
+        $log->debug("commit");
+    };
+    if ($@) {
+        $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -1019,7 +1052,9 @@
 
         $db->commit;
+        $log->debug("commit");
     };
     if ( $@ ) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie( "database error: $@" );
     }
@@ -1064,4 +1099,5 @@
     if ( $@ ) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -1122,4 +1158,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie("database error: $@");
     }
@@ -1151,4 +1188,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie( "database error: $@" );
     }
@@ -1180,4 +1218,5 @@
     if ($@) {
         $db->rollback;
+        $log->debug("rollback");
         $log->logdie( "database error: $@" );
     }
