IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 13173


Ignore:
Timestamp:
May 2, 2007, 3:44:24 PM (19 years ago)
Author:
jhoblitt
Message:

better paramter checking
overhaul instance table
add ->_is_valid_object_key() method
change ->find_instances() to check it's params and only return instances on mounted & available volumes

Location:
trunk
Files:
2 added
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/Nebulous-Server/Changes

    r13132 r13173  
    22
    330.05
     4    - better paramter checking
     5    - overhaul instance table
     6    - add ->_is_valid_object_key() method
     7    - change ->find_instances() to check it's params and only return instances
     8      on mounted & available volumes
    49    - add volume.available field and logic to use it
    510    - add volume.allocate field and logic to use it
  • trunk/Nebulous-Server/MANIFEST

    r13092 r13173  
    8787t/09_server_stat_object.t
    8888t/10_server_is_valid_volume_name.t
     89t/11_server_is_valid_object_key.t
    8990t/12_server_find_objects.t
    9091t/13_server_rename_object.t
  • trunk/Nebulous-Server/lib/Nebulous/Server.pm

    r13131 r13173  
    11# Copyright (c) 2004  Joshua Hoblitt
    22#
    3 # $Id: Server.pm,v 1.31 2007-05-02 20:53:42 jhoblitt Exp $
     3# $Id: Server.pm,v 1.32 2007-05-03 01:44:23 jhoblitt Exp $
    44
    55package Nebulous::Server;
     
    283283    my $self = shift;
    284284
    285     my ($key, $volume) = validate_pos(@_,
    286         {
    287             type        => SCALAR,
    288         },
    289         {
    290             type        => SCALAR,
     285    my ($key, $vol_name) = validate_pos(@_,
     286        {
     287            type        => SCALAR,
     288            callbacks   => {
     289                'is valid object key' => sub { $self->_is_valid_object_key($_[0]) },
     290            },
     291        },
     292        {
     293            type        => SCALAR,
     294            callbacks   => {
     295                # check that the volume name requested is valid
     296                'is valid volume name' => sub { $self->_is_valid_volume_name($_[0]) },
     297            },
    291298            optional    => 1,
    292299        },
     
    301308    my ($vol_id, $vol_path);
    302309    eval {
    303         ($vol_id, $vol_path) = $self->_get_storage_volume($volume);
     310        ($vol_id, $vol_path) = $self->_get_storage_volume($vol_name);
    304311    };
    305312    if ($@) {
     
    312319        {
    313320            my $query = $db->prepare_cached( $sql->get_object_instances );
    314             my $rows = $query->execute( $key );
     321            my $rows = $query->execute($key, 1);
    315322
    316323            unless ( $rows > 0 ) {
     
    866873    my $self = shift;
    867874
    868     my ( $key, $volume ) = validate_pos( @_,
    869         {
    870             type        => SCALAR,
    871         },
    872         {
    873             type        => SCALAR,
     875    my ($key, $vol_name) = validate_pos(@_,
     876        {
     877            type        => SCALAR,
     878            callbacks   => {
     879                'is valid object key' => sub { $self->_is_valid_object_key($_[0]) },
     880            },
     881        },
     882        {
     883            type        => SCALAR,
     884            callbacks   => {
     885                # check that the volume name requested is valid
     886                'is valid volume name' => sub { $self->_is_valid_volume_name($_[0]) },
     887            },
    874888            optional    => 1,
    875889        },
     
    880894    my $db  =$self->db;
    881895
    882     $log->debug( "entered - @_" );
    883 
    884     # TODO restrict search to a volume
     896    $log->debug("entered - @_");
    885897
    886898    my $query;
    887 
    888     eval {
    889         $query = $db->prepare_cached( $sql->get_object_instances );
    890         $query->execute( $key );
    891     };
    892     $log->logdie( "database error: $@" ) if $@;
     899    eval {
     900        {
     901            # ask the db to generate the table of mounted Nebulous volume
     902            my $query = $db->prepare_cached("call getmountedvol()");
     903            $query->execute();
     904        }
     905
     906        if ($vol_name) {
     907            $query = $db->prepare_cached( $sql->get_object_instances_by_vol_name );
     908            # ext_id, name, available
     909            my $rows = $query->execute($key, $vol_name, 1);
     910            unless ($rows > 0) {
     911                $query->finish;
     912                $log->logdie("no instances on storage volume: $vol_name or volume is not available");
     913            }
     914        } else {
     915            $query = $db->prepare_cached( $sql->get_object_instances );
     916            # ext_id, available
     917            my $rows = $query->execute($key, 1);
     918            unless ($rows > 0) {
     919                $query->finish;
     920                $log->logdie("no instances available");
     921            }
     922        }
     923    };
     924    $log->logdie("database error: $@") if $@;
    893925
    894926    my @locations;
    895927
    896     while ( my $row = $query->fetchrow_hashref ) {
     928    while (my $row = $query->fetchrow_hashref) {
    897929        my $instance = $row->{ 'uri' };
    898930        push @locations, $instance if $instance;
    899931    }
    900932
    901     $log->logdie( "no instances found" ) unless ( scalar @locations );
    902 
    903     $log->debug( "leaving" );
     933    # XXX remove this?
     934    $log->logdie("no instances found") unless (scalar @locations);
     935
     936    $log->debug("leaving");
    904937
    905938    return \@locations;
     
    10891122}
    10901123
     1124sub _is_valid_object_key  {
     1125    my ($self, $key) = @_;
     1126
     1127    my $log = $self->log;
     1128    my $sql = $self->sql;
     1129    my $db  =$self->db;
     1130
     1131    my $ext_id;
     1132    eval {
     1133        my $query = $db->prepare_cached( $sql->get_object );
     1134        $query->execute($key);
     1135        ($ext_id) = $query->fetchrow_array;
     1136        $query->finish;
     1137    };
     1138    if ($@) {
     1139        $db->rollback;
     1140        $log->logdie( "database error: $@" );
     1141    }
     1142
     1143    if (defined $ext_id) {
     1144        return 1;
     1145    }
     1146
     1147    return;
     1148}
     1149
    10911150sub _is_valid_volume_name  {
    10921151    my ($self, $vol_name) = @_;
  • trunk/Nebulous-Server/lib/Nebulous/Server/SQL.pm

    r13131 r13173  
    11# Copyright (c) 2004  Joshua Hoblitt
    22#
    3 # $Id: SQL.pm,v 1.33 2007-05-02 20:53:42 jhoblitt Exp $
     3# $Id: SQL.pm,v 1.34 2007-05-03 01:44:24 jhoblitt Exp $
    44
    55package Nebulous::Server::SQL;
     
    144144        WHERE so_id = ?
    145145    },
    146     get_object_instances        => qq{
    147         SELECT storage_object.so_id,
    148             uri, assigned_location
    149         FROM storage_object
    150         LEFT JOIN instance
    151         USING (so_id)
    152         WHERE ext_id = ?
     146    get_object_instances    => qq{
     147        SELECT
     148            storage_object.so_id,
     149            uri,
     150            assigned_vol_id
     151        FROM storage_object
     152        JOIN instance
     153            USING (so_id)
     154        JOIN mountedvol
     155            USING(vol_id)
     156        WHERE ext_id = ?
     157            AND available = ?
     158    },
     159    get_object_instances_by_vol_name => qq{
     160        SELECT
     161            storage_object.so_id,
     162            uri,
     163            assigned_vol_id
     164        FROM storage_object
     165        JOIN instance
     166            USING (so_id)
     167        JOIN mountedvol
     168            USING(vol_id)
     169        WHERE ext_id = ?
     170            AND name = ?
     171            AND available = ?
    153172    },
    154173    get_storage_volume_byname   => qq{
     
    284303    uri VARCHAR(255) NOT NULL,
    285304    sha1sum CHAR(40) ASCII,
    286     assigned_location BOOL,
     305    assigned_vol_id INT,
    287306    epoch TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    288307    mtime TIMESTAMP,
  • trunk/Nebulous-Server/t/04_server_replicate_object.t

    r12960 r13173  
    33# Copryight (C) 2004-2005  Joshua Hoblitt
    44#
    5 # $Id: 04_server_replicate_object.t,v 1.7 2007-04-23 20:42:29 jhoblitt Exp $
     5# $Id: 04_server_replicate_object.t,v 1.8 2007-05-03 01:44:24 jhoblitt Exp $
    66
    77use strict;
    88use warnings FATAL => qw( all );
    99
    10 use Test::More tests => 11;
     10use Test::More tests => 12;
    1111
    1212use lib qw( ./t ./lib );
     
    7272
    7373eval {
    74     $neb->replicate_object("foo");
     74    $neb->replicate_object('foo');
    7575};
    76 like($@, qr/storage object does not exist/, "storage object does not exist");
     76like($@, qr/is valid object key/, 'storage object does not exist');
     77
     78Test::Nebulous->setup;
     79
     80eval {
     81    $neb->create_object('foo');
     82    $neb->replicate_object('foo', 'bar');
     83};
     84like($@, qr/is valid volume name/, 'storage volume does not exist');
    7785
    7886Test::Nebulous->setup;
     
    8189    $neb->replicate_object();
    8290};
    83 like($@, qr/1 - 2 were expected/, "no params");
     91like($@, qr/1 - 2 were expected/, 'no params');
    8492
    8593Test::Nebulous->setup;
    8694
    8795eval {
    88     $neb->replicate_object(1, 2, 3);
     96    $neb->create_object('foo');
     97    $neb->replicate_object('foo', 'node01', 3);
    8998};
    90 like($@, qr/1 - 2 were expected/, "too many params");
     99like($@, qr/1 - 2 were expected/, 'too many params');
    91100
    92101Test::Nebulous->cleanup;
  • trunk/Nebulous-Server/t/07_server_find_instances.t

    r12643 r13173  
    33# Copryight (C) 2004-2005  Joshua Hoblitt
    44#
    5 # $Id: 07_server_find_instances.t,v 1.7 2007-03-28 21:48:24 jhoblitt Exp $
     5# $Id: 07_server_find_instances.t,v 1.8 2007-05-03 01:44:24 jhoblitt Exp $
    66
    77use strict;
    88use warnings FATAL => qw( all );
    99
    10 use Test::More tests => 13;
     10use Test::More tests => 15;
    1111
    1212use lib qw( ./t ./lib );
     
    5353{
    5454    # key, volume
    55     my $uri = $neb->create_object("foo");
     55    my $uri = $neb->create_object('foo', 'node01');
    5656
    57     my $locations = $neb->find_instances("foo", "node01");
     57    my $locations = $neb->find_instances('foo', 'node01');
    5858
    5959    uri_scheme_ok($locations->[0], 'file');
     
    7575}
    7676
     77# object exists but instance is on a different volume
     78Test::Nebulous->setup;
     79
     80eval {
     81    # key, volume
     82    my $uri = $neb->create_object('foo', 'node01');
     83
     84    my $locations = $neb->find_instances('foo', 'node02');
     85};
     86like($@, qr/no instances on storage volume/, 'instances on a different volume');
     87
    7788
    7889Test::Nebulous->setup;
    7990
    8091eval {
    81     $neb->find_instances("foo");
     92    $neb->find_instances('foo');
    8293};
    83 like($@, qr/no instances found/, "storage object does not exist");
     94like($@, qr/is valid object key/, "storage object does not exist");
     95
     96Test::Nebulous->setup;
     97
     98eval {
     99    $neb->create_object('foo');
     100    $neb->find_instances('foo', 'bar');
     101};
     102like($@, qr/is valid volume name/, "storage volume does not exist");
    84103
    85104Test::Nebulous->setup;
     
    93112
    94113eval {
    95     $neb->find_instances("foo", 'read', 3);
     114    $neb->create_object('foo');
     115    $neb->find_instances('foo', 'node01', 3);
    96116};
    97117like($@, qr/1 - 2 were expected/, "too many params");
  • trunk/Nebulous-Server/t/08_server_delete_instance.t

    r12644 r13173  
    33# Copryight (C) 2004-2005  Joshua Hoblitt
    44#
    5 # $Id: 08_server_delete_instance.t,v 1.7 2007-03-28 21:50:26 jhoblitt Exp $
     5# $Id: 08_server_delete_instance.t,v 1.8 2007-05-03 01:44:24 jhoblitt Exp $
    66
    77use strict;
     
    4747        $neb->find_instances("foo");
    4848    };
    49     like($@, qr/no instances found/, "storage object was deleted");
     49    like($@, qr/is valid object key/, "storage object was deleted");
    5050}
    5151
  • trunk/Nebulous/Changes

    r13132 r13173  
    22
    330.05
     4    - better paramter checking
     5    - overhaul instance table
     6    - add ->_is_valid_object_key() method
     7    - change ->find_instances() to check it's params and only return instances
     8      on mounted & available volumes
    49    - add volume.available field and logic to use it
    510    - add volume.allocate field and logic to use it
  • trunk/Nebulous/MANIFEST

    r13092 r13173  
    8787t/09_server_stat_object.t
    8888t/10_server_is_valid_volume_name.t
     89t/11_server_is_valid_object_key.t
    8990t/12_server_find_objects.t
    9091t/13_server_rename_object.t
  • trunk/Nebulous/lib/Nebulous/Server.pm

    r13131 r13173  
    11# Copyright (c) 2004  Joshua Hoblitt
    22#
    3 # $Id: Server.pm,v 1.31 2007-05-02 20:53:42 jhoblitt Exp $
     3# $Id: Server.pm,v 1.32 2007-05-03 01:44:23 jhoblitt Exp $
    44
    55package Nebulous::Server;
     
    283283    my $self = shift;
    284284
    285     my ($key, $volume) = validate_pos(@_,
    286         {
    287             type        => SCALAR,
    288         },
    289         {
    290             type        => SCALAR,
     285    my ($key, $vol_name) = validate_pos(@_,
     286        {
     287            type        => SCALAR,
     288            callbacks   => {
     289                'is valid object key' => sub { $self->_is_valid_object_key($_[0]) },
     290            },
     291        },
     292        {
     293            type        => SCALAR,
     294            callbacks   => {
     295                # check that the volume name requested is valid
     296                'is valid volume name' => sub { $self->_is_valid_volume_name($_[0]) },
     297            },
    291298            optional    => 1,
    292299        },
     
    301308    my ($vol_id, $vol_path);
    302309    eval {
    303         ($vol_id, $vol_path) = $self->_get_storage_volume($volume);
     310        ($vol_id, $vol_path) = $self->_get_storage_volume($vol_name);
    304311    };
    305312    if ($@) {
     
    312319        {
    313320            my $query = $db->prepare_cached( $sql->get_object_instances );
    314             my $rows = $query->execute( $key );
     321            my $rows = $query->execute($key, 1);
    315322
    316323            unless ( $rows > 0 ) {
     
    866873    my $self = shift;
    867874
    868     my ( $key, $volume ) = validate_pos( @_,
    869         {
    870             type        => SCALAR,
    871         },
    872         {
    873             type        => SCALAR,
     875    my ($key, $vol_name) = validate_pos(@_,
     876        {
     877            type        => SCALAR,
     878            callbacks   => {
     879                'is valid object key' => sub { $self->_is_valid_object_key($_[0]) },
     880            },
     881        },
     882        {
     883            type        => SCALAR,
     884            callbacks   => {
     885                # check that the volume name requested is valid
     886                'is valid volume name' => sub { $self->_is_valid_volume_name($_[0]) },
     887            },
    874888            optional    => 1,
    875889        },
     
    880894    my $db  =$self->db;
    881895
    882     $log->debug( "entered - @_" );
    883 
    884     # TODO restrict search to a volume
     896    $log->debug("entered - @_");
    885897
    886898    my $query;
    887 
    888     eval {
    889         $query = $db->prepare_cached( $sql->get_object_instances );
    890         $query->execute( $key );
    891     };
    892     $log->logdie( "database error: $@" ) if $@;
     899    eval {
     900        {
     901            # ask the db to generate the table of mounted Nebulous volume
     902            my $query = $db->prepare_cached("call getmountedvol()");
     903            $query->execute();
     904        }
     905
     906        if ($vol_name) {
     907            $query = $db->prepare_cached( $sql->get_object_instances_by_vol_name );
     908            # ext_id, name, available
     909            my $rows = $query->execute($key, $vol_name, 1);
     910            unless ($rows > 0) {
     911                $query->finish;
     912                $log->logdie("no instances on storage volume: $vol_name or volume is not available");
     913            }
     914        } else {
     915            $query = $db->prepare_cached( $sql->get_object_instances );
     916            # ext_id, available
     917            my $rows = $query->execute($key, 1);
     918            unless ($rows > 0) {
     919                $query->finish;
     920                $log->logdie("no instances available");
     921            }
     922        }
     923    };
     924    $log->logdie("database error: $@") if $@;
    893925
    894926    my @locations;
    895927
    896     while ( my $row = $query->fetchrow_hashref ) {
     928    while (my $row = $query->fetchrow_hashref) {
    897929        my $instance = $row->{ 'uri' };
    898930        push @locations, $instance if $instance;
    899931    }
    900932
    901     $log->logdie( "no instances found" ) unless ( scalar @locations );
    902 
    903     $log->debug( "leaving" );
     933    # XXX remove this?
     934    $log->logdie("no instances found") unless (scalar @locations);
     935
     936    $log->debug("leaving");
    904937
    905938    return \@locations;
     
    10891122}
    10901123
     1124sub _is_valid_object_key  {
     1125    my ($self, $key) = @_;
     1126
     1127    my $log = $self->log;
     1128    my $sql = $self->sql;
     1129    my $db  =$self->db;
     1130
     1131    my $ext_id;
     1132    eval {
     1133        my $query = $db->prepare_cached( $sql->get_object );
     1134        $query->execute($key);
     1135        ($ext_id) = $query->fetchrow_array;
     1136        $query->finish;
     1137    };
     1138    if ($@) {
     1139        $db->rollback;
     1140        $log->logdie( "database error: $@" );
     1141    }
     1142
     1143    if (defined $ext_id) {
     1144        return 1;
     1145    }
     1146
     1147    return;
     1148}
     1149
    10911150sub _is_valid_volume_name  {
    10921151    my ($self, $vol_name) = @_;
  • trunk/Nebulous/lib/Nebulous/Server/SQL.pm

    r13131 r13173  
    11# Copyright (c) 2004  Joshua Hoblitt
    22#
    3 # $Id: SQL.pm,v 1.33 2007-05-02 20:53:42 jhoblitt Exp $
     3# $Id: SQL.pm,v 1.34 2007-05-03 01:44:24 jhoblitt Exp $
    44
    55package Nebulous::Server::SQL;
     
    144144        WHERE so_id = ?
    145145    },
    146     get_object_instances        => qq{
    147         SELECT storage_object.so_id,
    148             uri, assigned_location
    149         FROM storage_object
    150         LEFT JOIN instance
    151         USING (so_id)
    152         WHERE ext_id = ?
     146    get_object_instances    => qq{
     147        SELECT
     148            storage_object.so_id,
     149            uri,
     150            assigned_vol_id
     151        FROM storage_object
     152        JOIN instance
     153            USING (so_id)
     154        JOIN mountedvol
     155            USING(vol_id)
     156        WHERE ext_id = ?
     157            AND available = ?
     158    },
     159    get_object_instances_by_vol_name => qq{
     160        SELECT
     161            storage_object.so_id,
     162            uri,
     163            assigned_vol_id
     164        FROM storage_object
     165        JOIN instance
     166            USING (so_id)
     167        JOIN mountedvol
     168            USING(vol_id)
     169        WHERE ext_id = ?
     170            AND name = ?
     171            AND available = ?
    153172    },
    154173    get_storage_volume_byname   => qq{
     
    284303    uri VARCHAR(255) NOT NULL,
    285304    sha1sum CHAR(40) ASCII,
    286     assigned_location BOOL,
     305    assigned_vol_id INT,
    287306    epoch TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    288307    mtime TIMESTAMP,
  • trunk/Nebulous/t/04_server_replicate_object.t

    r12960 r13173  
    33# Copryight (C) 2004-2005  Joshua Hoblitt
    44#
    5 # $Id: 04_server_replicate_object.t,v 1.7 2007-04-23 20:42:29 jhoblitt Exp $
     5# $Id: 04_server_replicate_object.t,v 1.8 2007-05-03 01:44:24 jhoblitt Exp $
    66
    77use strict;
    88use warnings FATAL => qw( all );
    99
    10 use Test::More tests => 11;
     10use Test::More tests => 12;
    1111
    1212use lib qw( ./t ./lib );
     
    7272
    7373eval {
    74     $neb->replicate_object("foo");
     74    $neb->replicate_object('foo');
    7575};
    76 like($@, qr/storage object does not exist/, "storage object does not exist");
     76like($@, qr/is valid object key/, 'storage object does not exist');
     77
     78Test::Nebulous->setup;
     79
     80eval {
     81    $neb->create_object('foo');
     82    $neb->replicate_object('foo', 'bar');
     83};
     84like($@, qr/is valid volume name/, 'storage volume does not exist');
    7785
    7886Test::Nebulous->setup;
     
    8189    $neb->replicate_object();
    8290};
    83 like($@, qr/1 - 2 were expected/, "no params");
     91like($@, qr/1 - 2 were expected/, 'no params');
    8492
    8593Test::Nebulous->setup;
    8694
    8795eval {
    88     $neb->replicate_object(1, 2, 3);
     96    $neb->create_object('foo');
     97    $neb->replicate_object('foo', 'node01', 3);
    8998};
    90 like($@, qr/1 - 2 were expected/, "too many params");
     99like($@, qr/1 - 2 were expected/, 'too many params');
    91100
    92101Test::Nebulous->cleanup;
  • trunk/Nebulous/t/07_server_find_instances.t

    r12643 r13173  
    33# Copryight (C) 2004-2005  Joshua Hoblitt
    44#
    5 # $Id: 07_server_find_instances.t,v 1.7 2007-03-28 21:48:24 jhoblitt Exp $
     5# $Id: 07_server_find_instances.t,v 1.8 2007-05-03 01:44:24 jhoblitt Exp $
    66
    77use strict;
    88use warnings FATAL => qw( all );
    99
    10 use Test::More tests => 13;
     10use Test::More tests => 15;
    1111
    1212use lib qw( ./t ./lib );
     
    5353{
    5454    # key, volume
    55     my $uri = $neb->create_object("foo");
     55    my $uri = $neb->create_object('foo', 'node01');
    5656
    57     my $locations = $neb->find_instances("foo", "node01");
     57    my $locations = $neb->find_instances('foo', 'node01');
    5858
    5959    uri_scheme_ok($locations->[0], 'file');
     
    7575}
    7676
     77# object exists but instance is on a different volume
     78Test::Nebulous->setup;
     79
     80eval {
     81    # key, volume
     82    my $uri = $neb->create_object('foo', 'node01');
     83
     84    my $locations = $neb->find_instances('foo', 'node02');
     85};
     86like($@, qr/no instances on storage volume/, 'instances on a different volume');
     87
    7788
    7889Test::Nebulous->setup;
    7990
    8091eval {
    81     $neb->find_instances("foo");
     92    $neb->find_instances('foo');
    8293};
    83 like($@, qr/no instances found/, "storage object does not exist");
     94like($@, qr/is valid object key/, "storage object does not exist");
     95
     96Test::Nebulous->setup;
     97
     98eval {
     99    $neb->create_object('foo');
     100    $neb->find_instances('foo', 'bar');
     101};
     102like($@, qr/is valid volume name/, "storage volume does not exist");
    84103
    85104Test::Nebulous->setup;
     
    93112
    94113eval {
    95     $neb->find_instances("foo", 'read', 3);
     114    $neb->create_object('foo');
     115    $neb->find_instances('foo', 'node01', 3);
    96116};
    97117like($@, qr/1 - 2 were expected/, "too many params");
  • trunk/Nebulous/t/08_server_delete_instance.t

    r12644 r13173  
    33# Copryight (C) 2004-2005  Joshua Hoblitt
    44#
    5 # $Id: 08_server_delete_instance.t,v 1.7 2007-03-28 21:50:26 jhoblitt Exp $
     5# $Id: 08_server_delete_instance.t,v 1.8 2007-05-03 01:44:24 jhoblitt Exp $
    66
    77use strict;
     
    4747        $neb->find_instances("foo");
    4848    };
    49     like($@, qr/no instances found/, "storage object was deleted");
     49    like($@, qr/is valid object key/, "storage object was deleted");
    5050}
    5151
  • trunk/Nebulous/t/53_client_cull.t

    r13059 r13173  
    33# Copryight (C) 2004-2005  Joshua Hoblitt
    44#
    5 # $Id: 53_client_cull.t,v 1.2 2007-04-27 21:36:20 jhoblitt Exp $
     5# $Id: 53_client_cull.t,v 1.3 2007-05-03 01:44:24 jhoblitt Exp $
    66
    77use strict;
     
    1414use lib qw( ./t ./lib );
    1515
    16 use Nebulous::Client;
     16use Nebulous::Client trace => 'debug';
    1717use Nebulous::Util qw( :standard );
    1818use Test::Nebulous;
     
    9696}
    9797
     98die;
    9899Test::Nebulous->setup;
    99100
Note: See TracChangeset for help on using the changeset viewer.