Show
Ignore:
Timestamp:
08/22/09 20:38:53 (5 years ago)
Author:
jesus
Message:

nodes appear to work

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/perl/lib/Cornea/RecallTable.pm

    r8 r9  
    99  my $config = Cornea::Config->new(); 
    1010  my $dbh; 
     11  my $failed_err = undef; 
    1112  my $dsns = $config->get_list("DB::dsn"); 
    1213  Cornea::Utils::shuffle($dsns); 
     
    1920                         ); 
    2021    }; 
    21     last unless ($@); 
     22    die "$dsn: $@\n" if $@; 
     23    last unless $@; 
    2224  } 
    23   $self->{dbh} = shift; 
     25  print STDERR "$failed_err\n" if $failed_err; 
     26  $self->{dbh} = $dbh; 
    2427} 
    2528sub __reconnect { 
     
    3235  my $self = bless { }, $class; 
    3336  $self->__connect; 
     37  $self; 
    3438} 
    3539 
     
    4650  }; 
    4751  if ($@) { 
    48     unless ($tried++) { $self->{dbh}->__reconnect();  goto again; } 
     52    unless ($tried++) { $self->__reconnect();  goto again; } 
    4953    die $@ if $@; 
    5054  } 
     
    6872  }; 
    6973  if ($@) { 
    70     unless ($tried++) { $self->{dbh}->__reconnect();  goto again; } 
     74    unless ($tried++) { $self->__reconnect();  goto again; } 
    7175    die $@ if $@; 
    7276  } 
     
    9094  }; 
    9195  if ($@) { 
    92     unless ($tried++) { $self->{dbh}->__reconnect();  goto again; } 
     96    unless ($tried++) { $self->__reconnect();  goto again; } 
    9397    die $@ if $@; 
    9498  } 
    9599  return $snl; 
     100} 
     101 
     102sub updateNode { 
     103  my $self = shift; 
     104  my $fqdn = shift; 
     105  my $attr = shift; 
     106  die "bad state" 
     107    unless $attr->{state} =~ /^(?:open|closed|offline|decommissioned)$/; 
     108  die "storage must be a number" 
     109    unless $attr->{total_storage} =~ /^[1-9]\d*$/ and 
     110           $attr->{used_storage} =~ /^[1-9]\d*$/; 
     111  die "locaion must be dc/cage/row/rack/pdu" 
     112    unless !defined($attr->{location}) or 
     113           $attr->{location} =~ /^[^\/]+(?:\/[^\/]+){4}$/; 
     114 
     115  my $tried = 0; 
     116 again: 
     117  eval { 
     118    my $sth = $self->{dbh}->prepare("select storeCorneaNode(?,?,?,?,?)"); 
     119    $sth->execute($attr->{state}, 
     120                  $attr->{total_storage}, $attr->{used_storage}, 
     121                  $attr->{location}, $fqdn); 
     122    $sth->finish(); 
     123  }; 
     124  if ($@) { 
     125    die "location must be specified for first-time update\n" 
     126      if $@ =~ /null value in column "location"/; 
     127    unless ($tried++) { $self->__reconnect();  goto again; } 
     128    die $@ if $@; 
     129  } 
     130  return 0; 
    96131} 
    97132 
     
    109144  }; 
    110145  if ($@) { 
    111     unless ($tried++) { $self->{dbh}->__reconnect();  goto again; } 
     146    unless ($tried++) { $self->__reconnect();  goto again; } 
    112147    die $@ if $@; 
    113148  } 
     
    131166  }; 
    132167  if ($@) { 
    133     unless ($tried++) { $self->{dbh}->__reconnect();  goto again; } 
     168    unless ($tried++) { $self->__reconnect();  goto again; } 
    134169    die $@ if $@; 
    135170  }