IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jul 9, 2008, 1:32:35 PM (18 years ago)
Author:
jhoblitt
Message:

create a Nebulous::Keys object to represent a parsed neb key and impliment other changes to abstract out the handling of keys in order to support "soft" volume requests and the "any" volume

File:
1 edited

Legend:

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

    r18400 r18451  
    11# Copyright (c) 2004-2008  Joshua Hoblitt
    22#
    3 # $Id: Server.pm,v 1.79 2008-07-02 03:40:10 jhoblitt Exp $
     3# $Id: Server.pm,v 1.80 2008-07-09 23:32:35 jhoblitt Exp $
    44
    55package Nebulous::Server;
     
    2222use Nebulous::Server::Log;
    2323use Nebulous::Server::SQL;
    24 use Nebulous::Keys qw( parse_neb_key );
     24use Nebulous::Keys qw( parse_neb_key parse_neb_volume );
    2525use Params::Validate qw( validate_pos SCALAR SCALARREF UNDEF );
    2626use URI::file;
     
    167167    $log->debug( "entered - @_" );
    168168
    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");
    178177    }
    179178       
    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);
    181185
    182186    my $uri;
     
    185189            # create storage_object
    186190            my $query = $db->prepare_cached( $sql->new_object );
    187             $query->execute('NULL', $key);
     191            $query->execute('NULL', $key->path);
    188192        }
    189193
     
    231235
    232236        # 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);
    234238        $log->debug("created $uri on volume ID: $vol_id");
    235239
     
    289293        my $query = $db->prepare_cached($sql->rename_object);
    290294        # 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);
    292296
    293297        # if we affected more then one row something very bad has happened.
     
    351355    $log->debug("entered - @_");
    352356
    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;
    358363    }
    359364
     
    377382            # verify that at least one instance is currently available
    378383            my $query = $db->prepare_cached( $sql->get_object_instances );
    379             my $rows = $query->execute($key, 1);
     384            my $rows = $query->execute($key->path, 1);
    380385
    381386            unless ( $rows > 0 ) {
     
    409414
    410415        # 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);
    412417
    413418        {
     
    467472            # this will set update locks
    468473            my $query = $db->prepare_cached( $sql->get_object_locks );
    469             my $rows = $query->execute( $key );
     474            my $rows = $query->execute( $key->path );
    470475            unless ( $rows == 1 ) {
    471476                $query->finish;
     
    494499            {
    495500                my $query = $db->prepare_cached( $sql->set_write_lock );
    496                 my $rows = $query->execute($key);
     501                my $rows = $query->execute($key->path);
    497502           
    498503                # if we affected more then one row something very bad has happened.
     
    510515            {
    511516                my $query = $db->prepare_cached( $sql->increment_read_lock );
    512                 my $rows = $query->execute($key);
     517                my $rows = $query->execute($key->path);
    513518           
    514519                # if we affected more then one row something very bad has happened.
     
    569574            # this will set update locks
    570575            my $query = $db->prepare_cached( $sql->get_object_locks );
    571             my $rows = $query->execute($key);
     576            my $rows = $query->execute($key->path);
    572577            unless ($rows == 1) {
    573578                $query->finish;
     
    595600            {
    596601                my $query = $db->prepare_cached( $sql->delete_write_lock );
    597                 my $rows = $query->execute($key);
     602                my $rows = $query->execute($key->path);
    598603           
    599604                # if we affected more then one row something very bad has happened.
     
    615620            {
    616621                my $query = $db->prepare_cached( $sql->decrement_read_lock );
    617                 my $rows = $query->execute($key);
     622                my $rows = $query->execute($key->path);
    618623           
    619624                # if we affected more then one row something very bad has happened.
     
    684689
    685690        # name, value, ext_id
    686         my $rows = $query->execute($name, $value, $key);
     691        my $rows = $query->execute($name, $value, $key->path);
    687692        $query->finish;
    688693
     
    744749        my $query = $db->prepare_cached( $sql->get_object_xattr );
    745750        # ext_id, name
    746         my $rows = $query->execute($key, $name);
     751        my $rows = $query->execute($key->path, $name);
    747752
    748753        # no rows returned means that the xattr does not exist
     
    797802        my $query = $db->prepare_cached( $sql->list_object_xattr );
    798803        # ext_id
    799         my $rows = $query->execute($key);
     804        my $rows = $query->execute($key->path);
    800805
    801806        while (my $row = $query->fetchrow_hashref) {
     
    839844        my $query = $db->prepare_cached( $sql->remove_object_xattr );
    840845        # ext_id, name
    841         my $rows = $query->execute($key, $name);
     846        my $rows = $query->execute($key->path, $name);
    842847        $query->finish;
    843848
     
    885890
    886891    # attempt to strip off neb:// if it exists
    887     if ($pattern =~ m|^neb:|) {
    888         $pattern = parse_neb_key($pattern);       
    889     }
     892    $pattern =~ s|^neb:||;
    890893
    891894    my @keys;
     
    939942    $log->debug("entered - @_");
    940943
    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) {
    953950        $vol_name = undef;
    954951    }
     
    960957            $query = $db->prepare_cached( $sql->get_object_instances_by_vol_name );
    961958            # ext_id, name, available
    962             my $rows = $query->execute($key, $vol_name, 1);
     959            my $rows = $query->execute($key->path, $vol_name, 1);
    963960            unless ($rows > 0) {
    964961                $query->finish;
     
    968965            $query = $db->prepare_cached( $sql->get_object_instances );
    969966            # ext_id, available
    970             my $rows = $query->execute($key, 1);
     967            my $rows = $query->execute($key->path, 1);
    971968            unless ($rows > 0) {
    972969                $query->finish;
     
    11021099    eval {
    11031100        my $query = $db->prepare_cached( $sql->stat_object );
    1104         my $rows = $query->execute($key);
     1101        my $rows = $query->execute($key->path);
    11051102
    11061103        unless ($rows == 1) {
     
    12281225    my $key = shift;
    12291226
    1230     my $volume;
    1231     ($volume, $key) = parse_neb_key($key);
     1227    $key = parse_neb_key($key);
    12321228
    12331229    my ($vol_id, $vol_host, $vol_path, $xattr);
     
    12361232        my $query = $db->prepare_cached( $sql->get_replication_volume_for_ext_id );
    12371233        # ext_id, %free, avaiable, allocate
    1238         $rows = $query->execute($key, 0.95, 1, 1);
     1234        $rows = $query->execute($key->path, 0.95, 1, 1);
    12391235        # XXX destinguish between non-existant and unaviable
    12401236        unless ($rows > 0) {
     
    12711267    my $db  =$self->db;
    12721268
    1273     my $volume;
    1274     ($volume, $key) = parse_neb_key($key);
     1269    $key = parse_neb_key($key);
    12751270
    12761271    my $ext_id;
    12771272    eval {
    12781273        my $query = $db->prepare_cached( $sql->get_object );
    1279         $query->execute($key);
     1274        $query->execute($key->path);
    12801275        ($ext_id) = $query->fetchrow_array;
    12811276        $query->finish;
     
    13031298    my $db  =$self->db;
    13041299
    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') {
    13071306        return 1;
    13081307    }
Note: See TracChangeset for help on using the changeset viewer.