IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 13311


Ignore:
Timestamp:
May 8, 2007, 2:45:21 PM (19 years ago)
Author:
jhoblitt
Message:

refactor unlock_object() to use a single eval {} block

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Nebulous-Server/lib/Nebulous/Server.pm

    r13310 r13311  
    11# Copyright (c) 2004  Joshua Hoblitt
    22#
    3 # $Id: Server.pm,v 1.44 2007-05-09 00:27:03 jhoblitt Exp $
     3# $Id: Server.pm,v 1.45 2007-05-09 00:45:21 jhoblitt Exp $
    44
    55package Nebulous::Server;
     
    501501
    502502    eval {
    503         # this will set update locks
    504         $query = $db->prepare_cached( $sql->get_object_locks );
    505         my $rows = $query->execute( $key );
    506         unless ( $rows == 1 ) {
    507             $log->logdie( "storage object does not exist" );
    508         }
    509 
    510         my $row = $query->fetchrow_hashref;
    511         $query->finish;
    512 
    513         $so_id      = $row->{ 'so_id' };
    514         $read_lock  = $row->{ 'read_lock' };
    515         $write_lock = $row->{ 'write_lock' };
    516     };
    517     if ( $@ ) {
    518         $query->finish;
    519         $db->rollback;
    520         $log->debug("rollback");
    521         $log->logdie( "database error: $@" );
    522     }
    523 
    524     if ( $type eq 'write' ) {
    525         # can't remove a write lock if it doesn't exist
    526         if ( $read_lock ) {
    527             eval { $db->rollback; };
    528             $log->debug("rollback");
    529             $log->logdie( "database error: $@" ) if $@;
    530            
    531             $log->logdie( "can not have a write lock under a read lock" );
    532         }
    533         unless ( $write_lock ) {
    534             eval { $db->rollback; };
    535             $log->debug("rollback");
    536             $log->logdie( "database error: $@" ) if $@;
    537 
    538             $log->logdie( "can not remove non-existant write lock" );
    539         }
    540 
    541         eval {
    542             my $query = $db->prepare_cached( $sql->delete_write_lock );
    543             my $rows = $query->execute( $key );
    544        
    545             # if we affected more then one row something very bad has happened.
    546             unless ( $rows == 1 ) {
    547                 $log->logdie( "affected row count is $rows instead of 1" );
    548             }
    549 
    550             $db->commit;
    551             $log->debug("commit");
    552         };
    553         if ( $@ ) {
    554             $db->rollback;
    555             $log->debug("rollback");
    556             $log->logdie( "database error: $@" );
    557         }
    558 
    559         $log->debug( "leaving" );
    560 
    561         return 1;
    562     }
    563 
    564     if ( $type eq 'read' ) {
    565         # can't remove a read lock if there's a write lock and
    566         # can't remove a read lock if there aren't any
    567         if ( $write_lock ) {
    568             eval { $db->rollback; };
    569             $log->debug("rollback");
    570             $log->logdie( "database error: $@" ) if $@;
    571            
    572             $log->logdie( "can not have a read lock under a write lock" );
    573         }
    574            
    575         if ( $read_lock == 0 ) {
    576             eval { $db->rollback; };
    577             $log->debug("rollback");
    578             $log->logdie( "database error: $@" ) if $@;
    579            
    580             $log->logdie( "can not remove non-existant read lock" );
    581         }
    582 
    583         eval {
    584             my $query = $db->prepare_cached( $sql->decrement_read_lock );
    585             my $rows = $query->execute( $key );
    586        
    587             # if we affected more then one row something very bad has happened.
    588             unless ( $rows == 1 ) {
    589 
    590                 $log->logdie( "affected row count is $rows instead of 1" );
    591             }
    592 
    593             $db->commit;
    594             $log->debug("commit");
    595         };
    596         if ( $@ ) {
    597             $db->rollback;
    598             $log->debug("rollback");
    599             $log->logdie( "database error: $@" );
    600         }
    601 
    602         $log->debug( "leaving" );
    603 
    604         return 1;
    605     }
    606 
    607     # never reached
    608     $log->logdie( "this should never happen" );
     503        {
     504            # this will set update locks
     505            $query = $db->prepare_cached( $sql->get_object_locks );
     506            my $rows = $query->execute($key);
     507            unless ($rows == 1) {
     508                $log->logdie("storage object does not exist");
     509            }
     510
     511            my $row = $query->fetchrow_hashref;
     512            $query->finish;
     513
     514            $so_id      = $row->{ 'so_id' };
     515            $read_lock  = $row->{ 'read_lock' };
     516            $write_lock = $row->{ 'write_lock' };
     517        }
     518
     519        if ($type eq 'write') {
     520            # can't remove a write lock if it doesn't exist
     521            if ($read_lock) {
     522                $log->logdie("can not have a write lock under a read lock");
     523            }
     524
     525            unless ($write_lock) {
     526                $log->logdie("can not remove non-existant write lock");
     527            }
     528
     529            {
     530                my $query = $db->prepare_cached( $sql->delete_write_lock );
     531                my $rows = $query->execute($key);
     532           
     533                # if we affected more then one row something very bad has happened.
     534                unless ($rows == 1) {
     535                    $log->logdie("affected row count is $rows instead of 1");
     536                }
     537            }
     538        } elsif ($type eq 'read') {
     539            # can't remove a read lock if there's a write lock and
     540            # can't remove a read lock if there aren't any
     541            if ($write_lock) {
     542                $log->logdie("can not have a read lock under a write lock");
     543            }
     544               
     545            if ($read_lock == 0) {
     546                $log->logdie("can not remove non-existant read lock");
     547            }
     548
     549            {
     550                my $query = $db->prepare_cached( $sql->decrement_read_lock );
     551                my $rows = $query->execute($key);
     552           
     553                # if we affected more then one row something very bad has happened.
     554                unless ($rows == 1) {
     555                    $log->logdie("affected row count is $rows instead of 1");
     556                }
     557
     558            }
     559        }
     560        $db->commit;
     561        $log->debug("commit");
     562    };
     563    if ($@) {
     564        $db->rollback;
     565        $log->debug("rollback");
     566        $log->logdie("error: $@");
     567    }
     568
     569    $log->debug( "leaving" );
     570
     571    return 1;
    609572}
    610573
  • trunk/Nebulous/lib/Nebulous/Server.pm

    r13310 r13311  
    11# Copyright (c) 2004  Joshua Hoblitt
    22#
    3 # $Id: Server.pm,v 1.44 2007-05-09 00:27:03 jhoblitt Exp $
     3# $Id: Server.pm,v 1.45 2007-05-09 00:45:21 jhoblitt Exp $
    44
    55package Nebulous::Server;
     
    501501
    502502    eval {
    503         # this will set update locks
    504         $query = $db->prepare_cached( $sql->get_object_locks );
    505         my $rows = $query->execute( $key );
    506         unless ( $rows == 1 ) {
    507             $log->logdie( "storage object does not exist" );
    508         }
    509 
    510         my $row = $query->fetchrow_hashref;
    511         $query->finish;
    512 
    513         $so_id      = $row->{ 'so_id' };
    514         $read_lock  = $row->{ 'read_lock' };
    515         $write_lock = $row->{ 'write_lock' };
    516     };
    517     if ( $@ ) {
    518         $query->finish;
    519         $db->rollback;
    520         $log->debug("rollback");
    521         $log->logdie( "database error: $@" );
    522     }
    523 
    524     if ( $type eq 'write' ) {
    525         # can't remove a write lock if it doesn't exist
    526         if ( $read_lock ) {
    527             eval { $db->rollback; };
    528             $log->debug("rollback");
    529             $log->logdie( "database error: $@" ) if $@;
    530            
    531             $log->logdie( "can not have a write lock under a read lock" );
    532         }
    533         unless ( $write_lock ) {
    534             eval { $db->rollback; };
    535             $log->debug("rollback");
    536             $log->logdie( "database error: $@" ) if $@;
    537 
    538             $log->logdie( "can not remove non-existant write lock" );
    539         }
    540 
    541         eval {
    542             my $query = $db->prepare_cached( $sql->delete_write_lock );
    543             my $rows = $query->execute( $key );
    544        
    545             # if we affected more then one row something very bad has happened.
    546             unless ( $rows == 1 ) {
    547                 $log->logdie( "affected row count is $rows instead of 1" );
    548             }
    549 
    550             $db->commit;
    551             $log->debug("commit");
    552         };
    553         if ( $@ ) {
    554             $db->rollback;
    555             $log->debug("rollback");
    556             $log->logdie( "database error: $@" );
    557         }
    558 
    559         $log->debug( "leaving" );
    560 
    561         return 1;
    562     }
    563 
    564     if ( $type eq 'read' ) {
    565         # can't remove a read lock if there's a write lock and
    566         # can't remove a read lock if there aren't any
    567         if ( $write_lock ) {
    568             eval { $db->rollback; };
    569             $log->debug("rollback");
    570             $log->logdie( "database error: $@" ) if $@;
    571            
    572             $log->logdie( "can not have a read lock under a write lock" );
    573         }
    574            
    575         if ( $read_lock == 0 ) {
    576             eval { $db->rollback; };
    577             $log->debug("rollback");
    578             $log->logdie( "database error: $@" ) if $@;
    579            
    580             $log->logdie( "can not remove non-existant read lock" );
    581         }
    582 
    583         eval {
    584             my $query = $db->prepare_cached( $sql->decrement_read_lock );
    585             my $rows = $query->execute( $key );
    586        
    587             # if we affected more then one row something very bad has happened.
    588             unless ( $rows == 1 ) {
    589 
    590                 $log->logdie( "affected row count is $rows instead of 1" );
    591             }
    592 
    593             $db->commit;
    594             $log->debug("commit");
    595         };
    596         if ( $@ ) {
    597             $db->rollback;
    598             $log->debug("rollback");
    599             $log->logdie( "database error: $@" );
    600         }
    601 
    602         $log->debug( "leaving" );
    603 
    604         return 1;
    605     }
    606 
    607     # never reached
    608     $log->logdie( "this should never happen" );
     503        {
     504            # this will set update locks
     505            $query = $db->prepare_cached( $sql->get_object_locks );
     506            my $rows = $query->execute($key);
     507            unless ($rows == 1) {
     508                $log->logdie("storage object does not exist");
     509            }
     510
     511            my $row = $query->fetchrow_hashref;
     512            $query->finish;
     513
     514            $so_id      = $row->{ 'so_id' };
     515            $read_lock  = $row->{ 'read_lock' };
     516            $write_lock = $row->{ 'write_lock' };
     517        }
     518
     519        if ($type eq 'write') {
     520            # can't remove a write lock if it doesn't exist
     521            if ($read_lock) {
     522                $log->logdie("can not have a write lock under a read lock");
     523            }
     524
     525            unless ($write_lock) {
     526                $log->logdie("can not remove non-existant write lock");
     527            }
     528
     529            {
     530                my $query = $db->prepare_cached( $sql->delete_write_lock );
     531                my $rows = $query->execute($key);
     532           
     533                # if we affected more then one row something very bad has happened.
     534                unless ($rows == 1) {
     535                    $log->logdie("affected row count is $rows instead of 1");
     536                }
     537            }
     538        } elsif ($type eq 'read') {
     539            # can't remove a read lock if there's a write lock and
     540            # can't remove a read lock if there aren't any
     541            if ($write_lock) {
     542                $log->logdie("can not have a read lock under a write lock");
     543            }
     544               
     545            if ($read_lock == 0) {
     546                $log->logdie("can not remove non-existant read lock");
     547            }
     548
     549            {
     550                my $query = $db->prepare_cached( $sql->decrement_read_lock );
     551                my $rows = $query->execute($key);
     552           
     553                # if we affected more then one row something very bad has happened.
     554                unless ($rows == 1) {
     555                    $log->logdie("affected row count is $rows instead of 1");
     556                }
     557
     558            }
     559        }
     560        $db->commit;
     561        $log->debug("commit");
     562    };
     563    if ($@) {
     564        $db->rollback;
     565        $log->debug("rollback");
     566        $log->logdie("error: $@");
     567    }
     568
     569    $log->debug( "leaving" );
     570
     571    return 1;
    609572}
    610573
Note: See TracChangeset for help on using the changeset viewer.