Changeset 18451 for trunk/Nebulous-Server/lib/Nebulous/Server.pm
- Timestamp:
- Jul 9, 2008, 1:32:35 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/Nebulous-Server/lib/Nebulous/Server.pm (modified) (28 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Nebulous-Server/lib/Nebulous/Server.pm
r18400 r18451 1 1 # Copyright (c) 2004-2008 Joshua Hoblitt 2 2 # 3 # $Id: Server.pm,v 1. 79 2008-07-02 03:40:10jhoblitt Exp $3 # $Id: Server.pm,v 1.80 2008-07-09 23:32:35 jhoblitt Exp $ 4 4 5 5 package Nebulous::Server; … … 22 22 use Nebulous::Server::Log; 23 23 use Nebulous::Server::SQL; 24 use Nebulous::Keys qw( parse_neb_key );24 use Nebulous::Keys qw( parse_neb_key parse_neb_volume ); 25 25 use Params::Validate qw( validate_pos SCALAR SCALARREF UNDEF ); 26 26 use URI::file; … … 167 167 $log->debug( "entered - @_" ); 168 168 169 { 170 my $volume; 171 ($volume, $key) = parse_neb_key($key); 172 # vol_name overrides the key implied volume 173 $vol_name ||= $volume; 174 } 175 176 if (defined $vol_name and !$self->_is_valid_volume_name($vol_name)) { 177 die "$vol_name is not a valid volume name" 169 $key = parse_neb_key($key, $vol_name); 170 # vol_name overrides the key implied volume 171 $vol_name = $key->volume; 172 173 # the key isn't validiated on input for this method so we have to check it 174 # again after parsing the key 175 if (defined $vol_name and not $self->_is_valid_volume_name($vol_name)) { 176 $log->logdie("$vol_name is not a valid volume name"); 178 177 } 179 178 180 my ($vol_id, $vol_host, $vol_path, $vol_xattr) = $self->_get_storage_volume($vol_name); 179 if (defined $key->soft_volume) { 180 $vol_name = undef; 181 } 182 183 my ($vol_id, $vol_host, $vol_path, $vol_xattr) 184 = $self->_get_storage_volume($vol_name); 181 185 182 186 my $uri; … … 185 189 # create storage_object 186 190 my $query = $db->prepare_cached( $sql->new_object ); 187 $query->execute('NULL', $key );191 $query->execute('NULL', $key->path); 188 192 } 189 193 … … 231 235 232 236 # TODO add some stuff here to retry if unsucessful 233 $uri = $self->_create_empty_instance_file($key , $so_id, $ins_id, $vol_path, $vol_xattr);237 $uri = $self->_create_empty_instance_file($key->path, $so_id, $ins_id, $vol_path, $vol_xattr); 234 238 $log->debug("created $uri on volume ID: $vol_id"); 235 239 … … 289 293 my $query = $db->prepare_cached($sql->rename_object); 290 294 # this SQL statment takes the new key name as the first param 291 my $rows = $query->execute($newkey , $key);295 my $rows = $query->execute($newkey->path, $key->path); 292 296 293 297 # if we affected more then one row something very bad has happened. … … 351 355 $log->debug("entered - @_"); 352 356 353 { 354 my $volume; 355 ($volume, $key) = parse_neb_key($key); 356 # vol_name overrides the key implied volume 357 $vol_name ||= $volume; 357 $key = parse_neb_key($key, $vol_name); 358 # vol_name overrides the key implied volume 359 $vol_name = $key->volume; 360 361 if (defined $key->soft_volume) { 362 $vol_name = undef; 358 363 } 359 364 … … 377 382 # verify that at least one instance is currently available 378 383 my $query = $db->prepare_cached( $sql->get_object_instances ); 379 my $rows = $query->execute($key , 1);384 my $rows = $query->execute($key->path, 1); 380 385 381 386 unless ( $rows > 0 ) { … … 409 414 410 415 # TODO add some stuff here to retry if unsucessful 411 $uri = $self->_create_empty_instance_file($key , $so_id, $ins_id, $vol_path, $vol_xattr);416 $uri = $self->_create_empty_instance_file($key->path, $so_id, $ins_id, $vol_path, $vol_xattr); 412 417 413 418 { … … 467 472 # this will set update locks 468 473 my $query = $db->prepare_cached( $sql->get_object_locks ); 469 my $rows = $query->execute( $key );474 my $rows = $query->execute( $key->path ); 470 475 unless ( $rows == 1 ) { 471 476 $query->finish; … … 494 499 { 495 500 my $query = $db->prepare_cached( $sql->set_write_lock ); 496 my $rows = $query->execute($key );501 my $rows = $query->execute($key->path); 497 502 498 503 # if we affected more then one row something very bad has happened. … … 510 515 { 511 516 my $query = $db->prepare_cached( $sql->increment_read_lock ); 512 my $rows = $query->execute($key );517 my $rows = $query->execute($key->path); 513 518 514 519 # if we affected more then one row something very bad has happened. … … 569 574 # this will set update locks 570 575 my $query = $db->prepare_cached( $sql->get_object_locks ); 571 my $rows = $query->execute($key );576 my $rows = $query->execute($key->path); 572 577 unless ($rows == 1) { 573 578 $query->finish; … … 595 600 { 596 601 my $query = $db->prepare_cached( $sql->delete_write_lock ); 597 my $rows = $query->execute($key );602 my $rows = $query->execute($key->path); 598 603 599 604 # if we affected more then one row something very bad has happened. … … 615 620 { 616 621 my $query = $db->prepare_cached( $sql->decrement_read_lock ); 617 my $rows = $query->execute($key );622 my $rows = $query->execute($key->path); 618 623 619 624 # if we affected more then one row something very bad has happened. … … 684 689 685 690 # name, value, ext_id 686 my $rows = $query->execute($name, $value, $key );691 my $rows = $query->execute($name, $value, $key->path); 687 692 $query->finish; 688 693 … … 744 749 my $query = $db->prepare_cached( $sql->get_object_xattr ); 745 750 # ext_id, name 746 my $rows = $query->execute($key , $name);751 my $rows = $query->execute($key->path, $name); 747 752 748 753 # no rows returned means that the xattr does not exist … … 797 802 my $query = $db->prepare_cached( $sql->list_object_xattr ); 798 803 # ext_id 799 my $rows = $query->execute($key );804 my $rows = $query->execute($key->path); 800 805 801 806 while (my $row = $query->fetchrow_hashref) { … … 839 844 my $query = $db->prepare_cached( $sql->remove_object_xattr ); 840 845 # ext_id, name 841 my $rows = $query->execute($key , $name);846 my $rows = $query->execute($key->path, $name); 842 847 $query->finish; 843 848 … … 885 890 886 891 # attempt to strip off neb:// if it exists 887 if ($pattern =~ m|^neb:|) { 888 $pattern = parse_neb_key($pattern); 889 } 892 $pattern =~ s|^neb:||; 890 893 891 894 my @keys; … … 939 942 $log->debug("entered - @_"); 940 943 941 { 942 my $volume; 943 ($volume, $key) = parse_neb_key($key); 944 if (defined $volume) { 945 die "$volume is not a valid volume name" 946 unless $self->_is_valid_volume_name($volume); 947 } 948 $vol_name ||= $volume; 949 } 950 951 # handle :any volume 952 if ($vol_name eq ':any') { 944 $key = parse_neb_key($key, $vol_name); 945 # vol_name overrides the key implied volume 946 $vol_name = $key->volume; 947 948 # handle soft volumes 949 if (defined $key->soft_volume) { 953 950 $vol_name = undef; 954 951 } … … 960 957 $query = $db->prepare_cached( $sql->get_object_instances_by_vol_name ); 961 958 # ext_id, name, available 962 my $rows = $query->execute($key , $vol_name, 1);959 my $rows = $query->execute($key->path, $vol_name, 1); 963 960 unless ($rows > 0) { 964 961 $query->finish; … … 968 965 $query = $db->prepare_cached( $sql->get_object_instances ); 969 966 # ext_id, available 970 my $rows = $query->execute($key , 1);967 my $rows = $query->execute($key->path, 1); 971 968 unless ($rows > 0) { 972 969 $query->finish; … … 1102 1099 eval { 1103 1100 my $query = $db->prepare_cached( $sql->stat_object ); 1104 my $rows = $query->execute($key );1101 my $rows = $query->execute($key->path); 1105 1102 1106 1103 unless ($rows == 1) { … … 1228 1225 my $key = shift; 1229 1226 1230 my $volume; 1231 ($volume, $key) = parse_neb_key($key); 1227 $key = parse_neb_key($key); 1232 1228 1233 1229 my ($vol_id, $vol_host, $vol_path, $xattr); … … 1236 1232 my $query = $db->prepare_cached( $sql->get_replication_volume_for_ext_id ); 1237 1233 # ext_id, %free, avaiable, allocate 1238 $rows = $query->execute($key , 0.95, 1, 1);1234 $rows = $query->execute($key->path, 0.95, 1, 1); 1239 1235 # XXX destinguish between non-existant and unaviable 1240 1236 unless ($rows > 0) { … … 1271 1267 my $db =$self->db; 1272 1268 1273 my $volume; 1274 ($volume, $key) = parse_neb_key($key); 1269 $key = parse_neb_key($key); 1275 1270 1276 1271 my $ext_id; 1277 1272 eval { 1278 1273 my $query = $db->prepare_cached( $sql->get_object ); 1279 $query->execute($key );1274 $query->execute($key->path); 1280 1275 ($ext_id) = $query->fetchrow_array; 1281 1276 $query->finish; … … 1303 1298 my $db =$self->db; 1304 1299 1305 # handle ":any" volume 1306 if ($vol_name eq ':any') { 1300 my $volume_info = parse_neb_volume($vol_name); 1301 1302 $vol_name = $volume_info->{volume}; 1303 1304 # handle "any" volume 1305 if ($vol_name eq 'any') { 1307 1306 return 1; 1308 1307 }
Note:
See TracChangeset
for help on using the changeset viewer.
