Changeset 13180
- Timestamp:
- May 2, 2007, 5:21:28 PM (19 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
-
Nebulous-Server/lib/Nebulous/Server.pm (modified) (2 diffs)
-
Nebulous-Server/lib/Nebulous/Server/SQL.pm (modified) (3 diffs)
-
Nebulous-Server/t/09_server_stat_object.t (modified) (6 diffs)
-
Nebulous/lib/Nebulous/Client.pm (modified) (4 diffs)
-
Nebulous/lib/Nebulous/Server.pm (modified) (2 diffs)
-
Nebulous/lib/Nebulous/Server/SQL.pm (modified) (3 diffs)
-
Nebulous/t/09_server_stat_object.t (modified) (6 diffs)
-
Nebulous/t/53_client_cull.t (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Nebulous-Server/lib/Nebulous/Server.pm
r13173 r13180 1 1 # Copyright (c) 2004 Joshua Hoblitt 2 2 # 3 # $Id: Server.pm,v 1.3 2 2007-05-03 01:44:23jhoblitt Exp $3 # $Id: Server.pm,v 1.33 2007-05-03 03:21:28 jhoblitt Exp $ 4 4 5 5 package Nebulous::Server; … … 1021 1021 my ( $key ) = validate_pos( @_, 1022 1022 { 1023 type => SCALAR, 1024 }, 1025 ); 1026 1027 my $log = $self->log; 1028 my $sql = $self->sql; 1029 my $db =$self->db; 1030 1031 $log->debug( "entered - @_" ); 1023 type => SCALAR, 1024 callbacks => { 1025 'is valid object key' => sub { $self->_is_valid_object_key($_[0]) }, 1026 }, 1027 }, 1028 ); 1029 1030 my $log = $self->log; 1031 my $sql = $self->sql; 1032 my $db =$self->db; 1033 1034 $log->debug("entered - @_"); 1032 1035 1033 1036 my $stat; 1034 1037 eval { 1035 my $query = $db->prepare_cached( $sql-> get_object );1036 my $rows = $query->execute( $key);1037 1038 unless ( $rows == 1) {1039 $log->logdie( "no storage object found");1038 my $query = $db->prepare_cached( $sql->stat_object ); 1039 my $rows = $query->execute($key); 1040 1041 unless ($rows == 1) { 1042 $log->logdie("no storage object found"); 1040 1043 } 1041 1044 1042 1045 $stat = $query->fetchrow_arrayref; 1043 1046 $query->finish; 1044 1045 $db->commit;1046 1047 }; 1047 1048 if ( $@ ) { 1048 1049 $db->rollback; 1049 $log->logdie( "database error: $@");1050 } 1051 1052 $log->debug( "leaving");1050 $log->logdie("database error: $@"); 1051 } 1052 1053 $log->debug("leaving"); 1053 1054 1054 1055 return $stat; -
trunk/Nebulous-Server/lib/Nebulous/Server/SQL.pm
r13177 r13180 1 1 # Copyright (c) 2004 Joshua Hoblitt 2 2 # 3 # $Id: SQL.pm,v 1.3 5 2007-05-03 01:49:55jhoblitt Exp $3 # $Id: SQL.pm,v 1.36 2007-05-03 03:21:28 jhoblitt Exp $ 4 4 5 5 package Nebulous::Server::SQL; … … 53 53 get_object => qq{ 54 54 SELECT 55 s torage_object.so_id,55 so_id, 56 56 ext_id, 57 57 read_lock, … … 63 63 USING (so_id) 64 64 WHERE ext_id = ? 65 }, 66 stat_object => qq{ 67 SELECT 68 storage_object.so_id, 69 storage_object.ext_id, 70 read_lock, 71 write_lock, 72 storage_object_attr.epoch, 73 storage_object_attr.mtime, 74 COUNT(instance.so_id) as instances 75 FROM storage_object 76 JOIN storage_object_attr 77 USING (so_id) 78 JOIN instance 79 USING (so_id) 80 WHERE ext_id = ? 81 GROUP BY storage_object.so_id 65 82 }, 66 83 # Note: this sets an update lock -
trunk/Nebulous-Server/t/09_server_stat_object.t
r13092 r13180 3 3 # Copryight (C) 2004-2005 Joshua Hoblitt 4 4 # 5 # $Id: 09_server_stat_object.t,v 1.1 0 2007-05-01 02:52:04jhoblitt Exp $5 # $Id: 09_server_stat_object.t,v 1.11 2007-05-03 03:21:28 jhoblitt Exp $ 6 6 7 7 use strict; 8 8 use warnings FATAL => qw( all ); 9 9 10 use Test::More tests => 1 1;10 use Test::More tests => 12; 11 11 12 12 use lib qw( ./t ./lib ); … … 23 23 24 24 Test::Nebulous->setup; 25 26 25 { 27 my $uri =$neb->create_object("foo");26 $neb->create_object("foo"); 28 27 29 28 my $info = $neb->stat_object("foo"); 30 29 31 is(scalar @$info, 6, "number of columns");30 is(scalar @$info, 7, "number of columns"); 32 31 } 33 32 … … 35 34 36 35 { 37 my $uri =$neb->create_object("foo", "node01");36 $neb->create_object("foo", "node01"); 38 37 39 38 my $info = $neb->stat_object("foo"); 40 39 41 is(scalar @$info, 6, "number of columns");40 is(scalar @$info, 7, "number of columns"); 42 41 is(@$info[0], 1, "so_id"); 43 42 is(@$info[1], "foo", "ext_id"); … … 46 45 like(@$info[4], qr/....-..-.. ..:..:../, "epoch"); 47 46 like(@$info[5], qr/....-..-.. ..:..:../, "mtime"); 47 is(@$info[6], 1, "instances"); 48 48 } 49 49 … … 53 53 $neb->stat_object("foo"); 54 54 }; 55 like($@, qr/ no storage object found/, "object does not exist");55 like($@, qr/is valid object key/, "object does not exist"); 56 56 57 57 Test::Nebulous->setup; … … 65 65 66 66 eval { 67 $neb->create_object("foo"); 67 68 $neb->stat_object("foo", 2); 68 69 }; -
trunk/Nebulous/lib/Nebulous/Client.pm
r13092 r13180 1 1 # Copyright (c) 2004 Joshua Hoblitt 2 2 # 3 # $Id: Client.pm,v 1. 29 2007-05-01 02:52:04jhoblitt Exp $3 # $Id: Client.pm,v 1.30 2007-05-03 03:21:28 jhoblitt Exp $ 4 4 5 5 package Nebulous::Client; … … 227 227 my $self = shift; 228 228 229 my ( $key, @params ) = validate_pos(@_,229 my ($key, $vol_name) = validate_pos(@_, 230 230 { 231 231 type => SCALAR, … … 240 240 $log->debug( "entered - @_" ); 241 241 242 # need some way to determine which is the best instance to remove 243 my $locations = $self->find_instances( $key, @params ); 244 unless ( $locations ) { 242 my $locations; 243 # if vol_name is specified we need to stat the file to find out how many 244 # instances there are on all volumes. Otherwise we wouldn't know if it's 245 # safe to remove the last instance on the specified volume. 246 # XXX We need some way to determine which is the best instance to remove 247 if (defined $vol_name) { 248 my @stats = $self->stat($key); 249 my $instances = $stats[6]; 250 if (defined $instances and $instances < 2) { 251 $log->debug("can not cull - not enough instances"); 252 $log->debug("leaving"); 253 254 return; 255 } 256 257 $locations = $self->find_instances($key, $vol_name); 258 unless (scalar @{ $locations }) { 245 259 $log->debug( "no instances" ); 246 260 $log->debug( "leaving" ); 247 261 248 return undef; 249 } 250 251 if ( scalar @{ $locations } < 2 ) { 252 $log->debug( "can not cull - not enough instances" ); 253 $log->debug( "leaving" ); 254 255 return undef; 256 } 257 258 my $uri = $self->delete_instance( $locations->[0] ); 259 260 $log->debug( "leaving" ); 262 return; 263 } 264 } else { 265 $locations = $self->find_instances($key); 266 unless ($locations) { 267 $log->debug("no instances"); 268 $log->debug("leaving"); 269 270 return; 271 } 272 273 if (scalar @{ $locations } < 2) { 274 $log->debug("can not cull - not enough instances"); 275 $log->debug("leaving"); 276 277 return; 278 } 279 } 280 281 my $uri = $self->delete_instance( @$locations[0] ); 282 283 $log->debug("leaving"); 261 284 262 285 return $uri; … … 638 661 my $self = shift; 639 662 640 my ( $uri ) = validate_pos(@_,663 my ($uri) = validate_pos(@_, 641 664 { 642 665 type => SCALAR, -
trunk/Nebulous/lib/Nebulous/Server.pm
r13173 r13180 1 1 # Copyright (c) 2004 Joshua Hoblitt 2 2 # 3 # $Id: Server.pm,v 1.3 2 2007-05-03 01:44:23jhoblitt Exp $3 # $Id: Server.pm,v 1.33 2007-05-03 03:21:28 jhoblitt Exp $ 4 4 5 5 package Nebulous::Server; … … 1021 1021 my ( $key ) = validate_pos( @_, 1022 1022 { 1023 type => SCALAR, 1024 }, 1025 ); 1026 1027 my $log = $self->log; 1028 my $sql = $self->sql; 1029 my $db =$self->db; 1030 1031 $log->debug( "entered - @_" ); 1023 type => SCALAR, 1024 callbacks => { 1025 'is valid object key' => sub { $self->_is_valid_object_key($_[0]) }, 1026 }, 1027 }, 1028 ); 1029 1030 my $log = $self->log; 1031 my $sql = $self->sql; 1032 my $db =$self->db; 1033 1034 $log->debug("entered - @_"); 1032 1035 1033 1036 my $stat; 1034 1037 eval { 1035 my $query = $db->prepare_cached( $sql-> get_object );1036 my $rows = $query->execute( $key);1037 1038 unless ( $rows == 1) {1039 $log->logdie( "no storage object found");1038 my $query = $db->prepare_cached( $sql->stat_object ); 1039 my $rows = $query->execute($key); 1040 1041 unless ($rows == 1) { 1042 $log->logdie("no storage object found"); 1040 1043 } 1041 1044 1042 1045 $stat = $query->fetchrow_arrayref; 1043 1046 $query->finish; 1044 1045 $db->commit;1046 1047 }; 1047 1048 if ( $@ ) { 1048 1049 $db->rollback; 1049 $log->logdie( "database error: $@");1050 } 1051 1052 $log->debug( "leaving");1050 $log->logdie("database error: $@"); 1051 } 1052 1053 $log->debug("leaving"); 1053 1054 1054 1055 return $stat; -
trunk/Nebulous/lib/Nebulous/Server/SQL.pm
r13177 r13180 1 1 # Copyright (c) 2004 Joshua Hoblitt 2 2 # 3 # $Id: SQL.pm,v 1.3 5 2007-05-03 01:49:55jhoblitt Exp $3 # $Id: SQL.pm,v 1.36 2007-05-03 03:21:28 jhoblitt Exp $ 4 4 5 5 package Nebulous::Server::SQL; … … 53 53 get_object => qq{ 54 54 SELECT 55 s torage_object.so_id,55 so_id, 56 56 ext_id, 57 57 read_lock, … … 63 63 USING (so_id) 64 64 WHERE ext_id = ? 65 }, 66 stat_object => qq{ 67 SELECT 68 storage_object.so_id, 69 storage_object.ext_id, 70 read_lock, 71 write_lock, 72 storage_object_attr.epoch, 73 storage_object_attr.mtime, 74 COUNT(instance.so_id) as instances 75 FROM storage_object 76 JOIN storage_object_attr 77 USING (so_id) 78 JOIN instance 79 USING (so_id) 80 WHERE ext_id = ? 81 GROUP BY storage_object.so_id 65 82 }, 66 83 # Note: this sets an update lock -
trunk/Nebulous/t/09_server_stat_object.t
r13092 r13180 3 3 # Copryight (C) 2004-2005 Joshua Hoblitt 4 4 # 5 # $Id: 09_server_stat_object.t,v 1.1 0 2007-05-01 02:52:04jhoblitt Exp $5 # $Id: 09_server_stat_object.t,v 1.11 2007-05-03 03:21:28 jhoblitt Exp $ 6 6 7 7 use strict; 8 8 use warnings FATAL => qw( all ); 9 9 10 use Test::More tests => 1 1;10 use Test::More tests => 12; 11 11 12 12 use lib qw( ./t ./lib ); … … 23 23 24 24 Test::Nebulous->setup; 25 26 25 { 27 my $uri =$neb->create_object("foo");26 $neb->create_object("foo"); 28 27 29 28 my $info = $neb->stat_object("foo"); 30 29 31 is(scalar @$info, 6, "number of columns");30 is(scalar @$info, 7, "number of columns"); 32 31 } 33 32 … … 35 34 36 35 { 37 my $uri =$neb->create_object("foo", "node01");36 $neb->create_object("foo", "node01"); 38 37 39 38 my $info = $neb->stat_object("foo"); 40 39 41 is(scalar @$info, 6, "number of columns");40 is(scalar @$info, 7, "number of columns"); 42 41 is(@$info[0], 1, "so_id"); 43 42 is(@$info[1], "foo", "ext_id"); … … 46 45 like(@$info[4], qr/....-..-.. ..:..:../, "epoch"); 47 46 like(@$info[5], qr/....-..-.. ..:..:../, "mtime"); 47 is(@$info[6], 1, "instances"); 48 48 } 49 49 … … 53 53 $neb->stat_object("foo"); 54 54 }; 55 like($@, qr/ no storage object found/, "object does not exist");55 like($@, qr/is valid object key/, "object does not exist"); 56 56 57 57 Test::Nebulous->setup; … … 65 65 66 66 eval { 67 $neb->create_object("foo"); 67 68 $neb->stat_object("foo", 2); 68 69 }; -
trunk/Nebulous/t/53_client_cull.t
r13178 r13180 3 3 # Copryight (C) 2004-2005 Joshua Hoblitt 4 4 # 5 # $Id: 53_client_cull.t,v 1. 4 2007-05-03 01:53:20jhoblitt Exp $5 # $Id: 53_client_cull.t,v 1.5 2007-05-03 03:21:28 jhoblitt Exp $ 6 6 7 7 use strict; … … 14 14 use lib qw( ./t ./lib ); 15 15 16 use Nebulous::Client trace => 'debug';16 use Nebulous::Client; 17 17 use Nebulous::Util qw( :standard ); 18 18 use Test::Nebulous; … … 27 27 proxy => "http://$hostport/nebulous", 28 28 ); 29 $neb->create( "foo");30 $neb->replicate( "foo");29 $neb->create("foo"); 30 $neb->replicate("foo"); 31 31 32 my $uri = $neb->cull( "foo");32 my $uri = $neb->cull("foo"); 33 33 34 ok( $uri, "good cull");35 ok( ! -e _get_file_path( $uri ), "file doesn't exist");34 ok($uri, "good cull"); 35 ok(! -e _get_file_path($uri), "file doesn't exist"); 36 36 } 37 37 … … 39 39 40 40 { 41 42 41 # key, $volume 43 42 my $neb = Nebulous::Client->new( 44 43 proxy => "http://$hostport/nebulous", 45 44 ); 46 $neb->create( "foo");47 $neb->replicate( "foo", "node01");45 $neb->create("foo"); 46 $neb->replicate("foo", "node01"); 48 47 49 my $uri = $neb->cull( "foo", "node01");48 my $uri = $neb->cull("foo", "node01"); 50 49 51 ok( $uri, "good cull");52 ok( ! -e _get_file_path( $uri ), "file exists");50 ok($uri, "good cull"); 51 ok(! -e _get_file_path($uri), "file exists"); 53 52 } 54 53 … … 60 59 proxy => "http://$hostport/nebulous", 61 60 ); 62 $neb->create( "foo");61 $neb->create("foo"); 63 62 64 $neb->replicate( "foo", "node01");65 $neb->replicate( "foo", "node02");63 $neb->replicate("foo", "node01"); 64 $neb->replicate("foo", "node02"); 66 65 67 my $uri1 = $neb->cull( "foo");68 my $uri2 = $neb->cull( "foo");66 my $uri1 = $neb->cull("foo"); 67 my $uri2 = $neb->cull("foo"); 69 68 70 ok( $uri1, "good cull");71 ok( $uri2, "good cull");72 ok( ! -e _get_file_path( $uri1 ), "file exists");73 ok( ! -e _get_file_path( $uri2 ), "file exists");69 ok($uri1, "good cull"); 70 ok($uri2, "good cull"); 71 ok(! -e _get_file_path($uri1), "file exists"); 72 ok(! -e _get_file_path($uri2), "file exists"); 74 73 } 75 74
Note:
See TracChangeset
for help on using the changeset viewer.
