IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Sep 11, 2008, 12:35:52 PM (18 years ago)
Author:
jhoblitt
Message:

invert soft volume semantics

File:
1 edited

Legend:

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

    r19473 r19493  
    11# Copyright (c) 2004-2008  Joshua Hoblitt
    22#
    3 # $Id: Server.pm,v 1.85 2008-09-10 23:55:54 bills Exp $
     3# $Id: Server.pm,v 1.86 2008-09-11 22:35:52 jhoblitt Exp $
    44
    55package Nebulous::Server;
     
    169169    # vol_name overrides the key implied volume
    170170    $key = parse_neb_key($key, $vol_name);
    171 
    172     if ($vol_name eq "99") {
    173         use Data::Dumper;
    174         print Dumper($key);
    175     }
     171    $vol_name = $key->volume;
    176172
    177173    # the key's volume can't be validiated on input for this method so we have
    178174    # to check it after parsing the key
    179     if (defined $key->volume
    180         and not $key->soft_volume
    181         and not $self->_is_valid_volume_name($key->volume)
    182     ) {
    183         $log->logdie("$vol_name is not a valid volume name");
     175    if (defined $vol_name
     176        and not $self->_is_valid_volume_name($key->volume)) {
     177        if ($key->soft_volume) {
     178            $log->warn( "$vol_name is not a known volume name" );
     179            $vol_name = undef;
     180        } else {
     181            die "$vol_name is not a valid volume name"
     182        }
    184183    }
    185184       
    186185    my ($vol_id, $vol_host, $vol_path, $vol_xattr)
    187         = $self->_get_storage_volume($key->volume, $key->soft_volume);
     186        = $self->_get_storage_volume($vol_name, $key->soft_volume);
    188187
    189188    my $uri;
     
    252251    };
    253252    if ($@) {
     253#        and not $key->soft_volume
    254254        $db->rollback;
    255255        $log->debug("rollback");
     
    358358    $log->debug("entered - @_");
    359359
     360    # vol_name overrides the key implied volume
    360361    $key = parse_neb_key($key, $vol_name);
    361     # vol_name overrides the key implied volume
    362362    $vol_name = $key->volume;
    363363
    364     if (defined $key->soft_volume) {
    365         $vol_name = undef;
    366     }
    367 
    368     if (defined $vol_name and !$self->_is_valid_volume_name($vol_name)) {
    369         die "$vol_name is not a valid volume name"
     364    if (defined $vol_name
     365        and not $self->_is_valid_volume_name($key->volume)) {
     366        if ($key->soft_volume) {
     367            $log->warn( "$vol_name is not a known volume name" );
     368            $vol_name = undef;
     369        } else {
     370            die "$vol_name is not a valid volume name"
     371        }
    370372    }
    371373       
     
    430432    if ($@) {
    431433        $db->rollback;
     434        # handle soft volumes
     435        if (defined $vol_name and defined $key->soft_volume) {
     436            $log->debug("retrying with 'any' volume");
     437            return $self->replicate_object($key->path, 'any');
     438        }
    432439        $log->debug("rollback");
    433440        $log->logdie("error: $@");
     
    928935        {
    929936            type        => SCALAR|UNDEF,
    930             callbacks   => {
    931                 # check that the volume name requested is valid
    932                 'is valid volume name' => sub {
    933                     return 1 if not defined $_[0];
    934                     $self->_is_valid_volume_name($_[0])
    935                 },
    936             },
     937#            callbacks   => {
     938#                # check that the volume name requested is valid
     939#                'is valid volume name' => sub {
     940#                    return 1 if not defined $_[0];
     941#                    $self->_is_valid_volume_name($_[0])
     942#                },
     943#            },
    937944            optional    => 1,
    938945        },
     
    945952    $log->debug("entered - @_");
    946953
     954    # vol_name overrides the key implied volume
    947955    $key = parse_neb_key($key, $vol_name);
    948     # vol_name overrides the key implied volume
    949956    $vol_name = $key->volume;
    950957
    951     # handle soft volumes
    952     if (defined $key->soft_volume) {
    953         $vol_name = undef;
     958    # the key's volume can't be validiated on input for this method so we have
     959    # to check it after parsing the key
     960    if (defined $vol_name
     961        and not $self->_is_valid_volume_name($key->volume)) {
     962        if ($key->soft_volume) {
     963            $log->warn( "$vol_name is not a known volume name" );
     964            $vol_name = undef;
     965        } else {
     966            die "$vol_name is not a valid volume name"
     967        }
    954968    }
    955969
     
    980994        }
    981995    };
    982     $log->logdie("database error: $@") if $@;
     996    if ($@) {
     997        $db->rollback;
     998        # handle soft volumes
     999        if (defined $vol_name and defined $key->soft_volume) {
     1000            $log->debug("retrying with 'any' volume");
     1001            return $self->find_instances($key->path, 'any');
     1002        }
     1003        $log->logdie("database error: $@");
     1004    }
    9831005
    9841006    # XXX remove this?
     
    11711193    my ($vol_id, $vol_host, $vol_path, $xattr);
    11721194    eval {
    1173         # TODO cache this?
    11741195        my $query;
    11751196        my $rows;
Note: See TracChangeset for help on using the changeset viewer.