Changeset 13311
- Timestamp:
- May 8, 2007, 2:45:21 PM (19 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
-
Nebulous-Server/lib/Nebulous/Server.pm (modified) (2 diffs)
-
Nebulous/lib/Nebulous/Server.pm (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Nebulous-Server/lib/Nebulous/Server.pm
r13310 r13311 1 1 # Copyright (c) 2004 Joshua Hoblitt 2 2 # 3 # $Id: Server.pm,v 1.4 4 2007-05-09 00:27:03jhoblitt Exp $3 # $Id: Server.pm,v 1.45 2007-05-09 00:45:21 jhoblitt Exp $ 4 4 5 5 package Nebulous::Server; … … 501 501 502 502 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; 609 572 } 610 573 -
trunk/Nebulous/lib/Nebulous/Server.pm
r13310 r13311 1 1 # Copyright (c) 2004 Joshua Hoblitt 2 2 # 3 # $Id: Server.pm,v 1.4 4 2007-05-09 00:27:03jhoblitt Exp $3 # $Id: Server.pm,v 1.45 2007-05-09 00:45:21 jhoblitt Exp $ 4 4 5 5 package Nebulous::Server; … … 501 501 502 502 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; 609 572 } 610 573
Note:
See TracChangeset
for help on using the changeset viewer.
