IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 13130


Ignore:
Timestamp:
May 2, 2007, 10:14:46 AM (19 years ago)
Author:
jhoblitt
Message:

add volume.allocate field and logic to use it

Location:
trunk
Files:
7 edited

Legend:

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

    r13115 r13130  
    11# Copyright (c) 2004  Joshua Hoblitt
    22#
    3 # $Id: Server.pm,v 1.29 2007-05-02 01:00:10 jhoblitt Exp $
     3# $Id: Server.pm,v 1.30 2007-05-02 20:14:45 jhoblitt Exp $
    44
    55package Nebulous::Server;
     
    166166        {
    167167            # get object ID
    168             my $query = $db->prepare( $sql->last_insert_id );
     168            my $query = $db->prepare_cached( $sql->last_insert_id );
    169169            $query->execute;
    170170            ($object_id) = $query->fetchrow_array;
     171            # XXX finish seems to be required when using LAST_INSERT_ID() or we
     172            # get a warning about the stmt handling still be active the next
     173            # time LAST_INSERT_ID() is invoked
     174            $query->finish;
    171175        }
    172176
     
    185189        {
    186190            # get instance ID
    187             my $query = $db->prepare( $sql->last_insert_id );
     191            my $query = $db->prepare_cached( $sql->last_insert_id );
    188192            $query->execute;
    189193            ($ins_id) = $query->fetchrow_array;
     194            # XXX finish seems to be required when using LAST_INSERT_ID() or we
     195            # get a warning about the stmt handling still be active the next
     196            # time LAST_INSERT_ID() is invoked
     197            $query->finish;
    190198        }
    191199    };
     
    322330
    323331        {
    324             my $query = $db->prepare( $sql->last_insert_id );
     332            my $query = $db->prepare_cached( $sql->last_insert_id );
    325333            $query->execute();
    326 
    327334            ($ins_id) = $query->fetchrow_array;
     335            # XXX finish seems to be required when using LAST_INSERT_ID() or we
     336            # get a warning about the stmt handling still be active the next
     337            # time LAST_INSERT_ID() is invoked
     338            $query->finish;
    328339        }
    329340    };
     
    10411052            $query = $db->prepare_cached( $sql->get_storage_volume_byname );
    10421053            $rows = $query->execute(0.95, $name);
     1054            unless ($rows > 0) {
     1055                $query->finish;
     1056                $log->logdie("storage volume: $name is not available");
     1057            }
     1058            # when matching by name we shouldn't ever match more than once
     1059            if ($rows > 1) {
     1060                $query->finish;
     1061                $log->logdie("affected row count is $rows instead of 1");
     1062            }
    10431063        } else {
    10441064            $query = $db->prepare_cached( $sql->get_storage_volume );
    10451065            $rows = $query->execute(0.95);
    1046         }
    1047 
    1048         # there has to be atleast one storage volume
    1049         unless ($rows > 0) {
    1050             $log->logdie( "affected row count is $rows instead of > 0" );
     1066            # there has to be atleast one storage volume
     1067            unless ($rows > 0) {
     1068                $query->finish;
     1069                $log->logdie("no storage volume is available");
     1070            }
    10511071        }
    10521072
  • trunk/Nebulous-Server/lib/Nebulous/Server/SQL.pm

    r13115 r13130  
    11# Copyright (c) 2004  Joshua Hoblitt
    22#
    3 # $Id: SQL.pm,v 1.31 2007-05-02 01:00:10 jhoblitt Exp $
     3# $Id: SQL.pm,v 1.32 2007-05-02 20:14:46 jhoblitt Exp $
    44
    55package Nebulous::Server::SQL;
     
    176176    },
    177177    new_volume          => qq{
    178         INSERT INTO volume (name, path)
    179         VALUES (?, ?)
     178        INSERT INTO volume (name, path, allocate)
     179        VALUES (?, ?, TRUE)
    180180    },
    181181    get_volume_by_name => qq{
     
    303303    name VARCHAR(255) UNIQUE NOT NULL,
    304304    path VARCHAR(255) NOT NULL,
     305    allocate BOOLEAN DEFAULT FALSE,
    305306    PRIMARY KEY(vol_id),
    306     KEY(name(16))
     307    KEY(name(16)),
     308    KEY(allocate)
    307309) ENGINE=innodb;
    308310
     
    335337    DECLARE namevar VARCHAR(255);
    336338    DECLARE pathvar VARCHAR(255);
    337     DECLARE cur1 CURSOR FOR SELECT vol_id, name, path FROM volume;
     339    DECLARE cur1 CURSOR FOR SELECT vol_id, name, path FROM volume
     340        WHERE allocate = TRUE;
    338341    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE;
    339342
  • trunk/Nebulous-Server/t/03_server_create_object.t

    r13092 r13130  
    33# Copryight (C) 2004-2005  Joshua Hoblitt
    44#
    5 # $Id: 03_server_create_object.t,v 1.13 2007-05-01 02:52:04 jhoblitt Exp $
     5# $Id: 03_server_create_object.t,v 1.14 2007-05-02 20:14:46 jhoblitt Exp $
    66
    77use strict;
    88use warnings FATAL => qw( all );
    99
    10 use Test::More tests => 8;
     10use Test::More tests => 10;
    1111
    1212use lib qw( ./t ./lib );
     
    5757
    5858eval {
     59    $neb->create_object("foo", 'node03');
     60};
     61like($@, qr/node03 is not available/, "request volume with allocate = FALSE");
     62
     63Test::Nebulous->setup;
     64
     65eval {
     66    $neb->create_object("foo", 'node04');
     67};
     68like($@, qr/node04 is not available/, "request volume this is full");
     69
     70Test::Nebulous->setup;
     71
     72eval {
    5973    $neb->create_object("foo", 99);
    6074};
  • trunk/Nebulous/lib/Nebulous/Server.pm

    r13115 r13130  
    11# Copyright (c) 2004  Joshua Hoblitt
    22#
    3 # $Id: Server.pm,v 1.29 2007-05-02 01:00:10 jhoblitt Exp $
     3# $Id: Server.pm,v 1.30 2007-05-02 20:14:45 jhoblitt Exp $
    44
    55package Nebulous::Server;
     
    166166        {
    167167            # get object ID
    168             my $query = $db->prepare( $sql->last_insert_id );
     168            my $query = $db->prepare_cached( $sql->last_insert_id );
    169169            $query->execute;
    170170            ($object_id) = $query->fetchrow_array;
     171            # XXX finish seems to be required when using LAST_INSERT_ID() or we
     172            # get a warning about the stmt handling still be active the next
     173            # time LAST_INSERT_ID() is invoked
     174            $query->finish;
    171175        }
    172176
     
    185189        {
    186190            # get instance ID
    187             my $query = $db->prepare( $sql->last_insert_id );
     191            my $query = $db->prepare_cached( $sql->last_insert_id );
    188192            $query->execute;
    189193            ($ins_id) = $query->fetchrow_array;
     194            # XXX finish seems to be required when using LAST_INSERT_ID() or we
     195            # get a warning about the stmt handling still be active the next
     196            # time LAST_INSERT_ID() is invoked
     197            $query->finish;
    190198        }
    191199    };
     
    322330
    323331        {
    324             my $query = $db->prepare( $sql->last_insert_id );
     332            my $query = $db->prepare_cached( $sql->last_insert_id );
    325333            $query->execute();
    326 
    327334            ($ins_id) = $query->fetchrow_array;
     335            # XXX finish seems to be required when using LAST_INSERT_ID() or we
     336            # get a warning about the stmt handling still be active the next
     337            # time LAST_INSERT_ID() is invoked
     338            $query->finish;
    328339        }
    329340    };
     
    10411052            $query = $db->prepare_cached( $sql->get_storage_volume_byname );
    10421053            $rows = $query->execute(0.95, $name);
     1054            unless ($rows > 0) {
     1055                $query->finish;
     1056                $log->logdie("storage volume: $name is not available");
     1057            }
     1058            # when matching by name we shouldn't ever match more than once
     1059            if ($rows > 1) {
     1060                $query->finish;
     1061                $log->logdie("affected row count is $rows instead of 1");
     1062            }
    10431063        } else {
    10441064            $query = $db->prepare_cached( $sql->get_storage_volume );
    10451065            $rows = $query->execute(0.95);
    1046         }
    1047 
    1048         # there has to be atleast one storage volume
    1049         unless ($rows > 0) {
    1050             $log->logdie( "affected row count is $rows instead of > 0" );
     1066            # there has to be atleast one storage volume
     1067            unless ($rows > 0) {
     1068                $query->finish;
     1069                $log->logdie("no storage volume is available");
     1070            }
    10511071        }
    10521072
  • trunk/Nebulous/lib/Nebulous/Server/SQL.pm

    r13115 r13130  
    11# Copyright (c) 2004  Joshua Hoblitt
    22#
    3 # $Id: SQL.pm,v 1.31 2007-05-02 01:00:10 jhoblitt Exp $
     3# $Id: SQL.pm,v 1.32 2007-05-02 20:14:46 jhoblitt Exp $
    44
    55package Nebulous::Server::SQL;
     
    176176    },
    177177    new_volume          => qq{
    178         INSERT INTO volume (name, path)
    179         VALUES (?, ?)
     178        INSERT INTO volume (name, path, allocate)
     179        VALUES (?, ?, TRUE)
    180180    },
    181181    get_volume_by_name => qq{
     
    303303    name VARCHAR(255) UNIQUE NOT NULL,
    304304    path VARCHAR(255) NOT NULL,
     305    allocate BOOLEAN DEFAULT FALSE,
    305306    PRIMARY KEY(vol_id),
    306     KEY(name(16))
     307    KEY(name(16)),
     308    KEY(allocate)
    307309) ENGINE=innodb;
    308310
     
    335337    DECLARE namevar VARCHAR(255);
    336338    DECLARE pathvar VARCHAR(255);
    337     DECLARE cur1 CURSOR FOR SELECT vol_id, name, path FROM volume;
     339    DECLARE cur1 CURSOR FOR SELECT vol_id, name, path FROM volume
     340        WHERE allocate = TRUE;
    338341    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE;
    339342
  • trunk/Nebulous/t/03_server_create_object.t

    r13092 r13130  
    33# Copryight (C) 2004-2005  Joshua Hoblitt
    44#
    5 # $Id: 03_server_create_object.t,v 1.13 2007-05-01 02:52:04 jhoblitt Exp $
     5# $Id: 03_server_create_object.t,v 1.14 2007-05-02 20:14:46 jhoblitt Exp $
    66
    77use strict;
    88use warnings FATAL => qw( all );
    99
    10 use Test::More tests => 8;
     10use Test::More tests => 10;
    1111
    1212use lib qw( ./t ./lib );
     
    5757
    5858eval {
     59    $neb->create_object("foo", 'node03');
     60};
     61like($@, qr/node03 is not available/, "request volume with allocate = FALSE");
     62
     63Test::Nebulous->setup;
     64
     65eval {
     66    $neb->create_object("foo", 'node04');
     67};
     68like($@, qr/node04 is not available/, "request volume this is full");
     69
     70Test::Nebulous->setup;
     71
     72eval {
    5973    $neb->create_object("foo", 99);
    6074};
  • trunk/Nebulous/t/Test/Nebulous.pm

    r13114 r13130  
    11# Copyright (C) 2004  Joshua Hoblitt
    22#
    3 # $Id: Nebulous.pm,v 1.12 2007-05-02 00:59:33 jhoblitt Exp $
     3# $Id: Nebulous.pm,v 1.13 2007-05-02 20:14:46 jhoblitt Exp $
    44
    55package Test::Nebulous;
     
    2222my $dir1 = "";
    2323my $dir2 = "";
     24my $dir3 = "";
     25my $dir4 = "";
    2426
    2527sub setup {
     
    3133    $dir1 = tempdir( CLEANUP => 0 );
    3234    $dir2 = tempdir( CLEANUP => 0 );
     35    $dir3 = tempdir( CLEANUP => 0 );
     36    $dir4 = tempdir( CLEANUP => 0 );
    3337
    3438    foreach my $statement (@{ $sql->get_db_schema }) {
     
    3640    }
    3741
    38     # FIXME
    39     $dbh->do(qq{ INSERT INTO volume VALUES (1, 'node01',?) }, undef, $dir1);
     42    # node01/node02: allocate = TRUE
     43    $dbh->do(qq{ INSERT INTO volume (vol_id, name, path, allocate) VALUES (1, 'node01', ?, TRUE) }, undef, $dir1);
    4044    $dbh->do(qq{ INSERT INTO mount VALUES (?, 10e10, 10e7) }, undef, $dir1);
    4145
    42     $dbh->do(qq{ INSERT INTO volume VALUES (2,'node02',?) }, undef, $dir2);
     46    $dbh->do(qq{ INSERT INTO volume (vol_id, name, path, allocate) VALUES (2, 'node02', ?, TRUE) }, undef, $dir2);
    4347    $dbh->do(qq{ INSERT INTO mount VALUES (?, 10e10, 10e8) }, undef, $dir2);
     48
     49    # node03: allocate = FALSE
     50    $dbh->do(qq{ INSERT INTO volume (vol_id, name, path, allocate) VALUES (3, 'node03', ?, FALSE) }, undef, $dir3);
     51    $dbh->do(qq{ INSERT INTO mount VALUES (?, 10e10, 10e8) }, undef, $dir3);
     52
     53    # node04: allocate = TRUE, volume full
     54    $dbh->do(qq{ INSERT INTO volume (vol_id, name, path, allocate) VALUES (4, 'node04', ?, TRUE) }, undef, $dir4);
     55    $dbh->do(qq{ INSERT INTO mount VALUES (?, 10e10, 10e10) }, undef, $dir4);
    4456}
    4557
     
    5264    rmtree([$dir1], 0, 1) if -e $dir1;
    5365    rmtree([$dir2], 0, 1) if -e $dir2;
     66    rmtree([$dir3], 0, 1) if -e $dir3;
     67    rmtree([$dir4], 0, 1) if -e $dir4;
    5468}
    5569
Note: See TracChangeset for help on using the changeset viewer.