Changeset 9

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

nodes appear to work

Files:

Legend:

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

    r6 r9  
    11package Cornea::Config; 
    22use strict; 
    3  
    4 use strict; 
     3use YAML; 
    54use POSIX qw/uname/; 
     5use Carp; 
    66 
    77sub default_config_file { '/etc/cornea${host}.conf' } 
     
    1414    $_g_Config{$key}; 
    1515  } 
    16   sub _g_Config_unset { delete $_g_Config{shift}; } 
    17   sub _g_Config_isset { exists $_g_Config{shift}; } 
     16  sub _g_Config_unset { my $key = shift; delete $_g_Config{$key}; } 
     17  sub _g_Config_isset { my $key = shift; exists $_g_Config{$key}; } 
    1818} 
    1919 
     
    4949sub read_config { 
    5050    my ($class, $file) = @_; 
    51     open(CONF, "<$file") || die "Could not read config file: $file"; 
     51    open(CONF, "<$file") || confess "Could not read config file: $file"; 
    5252    while(<CONF>) { 
    5353        next if /^\s*[;#]/; 
    54         if(/^\s*([^\s=]+)\s*=\s*\[(.*)\]\s*$/) { 
     54        if(/^\s*([^\s=]+)\s*=\s*\[\s*(.*)\]\s*$/) { 
    5555          my $key = lc($1); 
    5656          (my $val = $2) =~ s/\s+$//; 
  • trunk/perl/lib/Cornea/Queue.pm

    r6 r9  
    88  my $self = shift; 
    99  my $config = Cornea::Config->new(); 
     10  my $stomp; 
     11 
    1012  if($self->{stomp}) { 
    1113    eval { $self->{stomp}->disconnect(); }; 
     
    1315  } 
    1416  my $stomphosts = $config->get_list("MQ::hostname"); 
    15   foreach my $hostname ( @$stomphosts ) { 
     17  foreach my $location ( @$stomphosts ) { 
     18    my ($hostname, $port) = split /:/, $location; 
     19    $port ||= 61613; 
    1620    eval { 
    17       my $stomp = Net::Stomp->new( { hostname => $hostame, 
    18                                      port => $config->get("MQ::port") }); 
     21      $stomp = Net::Stomp->new( { hostname => $hostname, 
     22                                     port => $port }); 
    1923      $stomp->connect( { login => $config->get("MQ::login"), 
    2024                         passcode => $config->get("MQ::passcode") } ) ||  
  • 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  } 
  • trunk/perl/lib/Cornea/StorageNodeList.pm

    r3 r9  
    1616  my $self = shift; 
    1717  my $node = shift; 
    18   delete $self->{$node->name()}; 
     18  delete $self->{$node->fqdn()}; 
    1919} 
    2020 
     
    2222  my $self = shift; 
    2323  my $node = shift; 
    24   $self->{$node->name()} = $node; 
     24  $self->{$node->fqdn()} = $node; 
    2525} 
    2626 
  • trunk/perl/lib/Cornea/Utils.pm

    r6 r9  
    22 
    33use strict; 
     4use Carp; 
     5use Switch; 
     6require "sys/syscall.ph"; 
    47 
    58sub shuffle { 
     
    1316} 
    1417 
     18my %__units; 
     19BEGIN { 
     20  %__units = ( 
     21    'k' => 1024, 
     22    'm' => 1024*1024, 
     23    'g' => 1024*1024*1024, 
     24    't' => 1024*1024*1024*1024, 
     25  ); 
     26} 
     27sub units { 
     28  my $u = lc(shift); 
     29  confess "bad unit: $u" unless exists($__units{$u}); 
     30  return $__units{$u}; 
     31} 
     32 
     33my $little; 
     34BEGIN { $little = unpack "C", pack "S", 1; } 
     35 
     36sub unpack64 { 
     37  my $str = shift; 
     38  my $full; 
     39  if ( not eval { $full = unpack( "Q", $str ); 1; } ) { 
     40    my ($l,$h) = unpack "LL", $str; 
     41    ($h,$l) = ($l,$h) unless $little; 
     42    $full = $l + $h * (1 + ~0); 
     43    die "number too large for perl!" if ($full+1 == $full); 
     44  } 
     45  return $full; 
     46} 
     47sub fsinfo { 
     48  my $path = shift; 
     49  switch($^O) { 
     50    case 'darwin' { 
     51      my $buf = '\0' x 4096; 
     52      syscall(&SYS_statfs64, $path, $buf) == 0 or die "$!"; 
     53      my ($bsize, $iosize) = unpack "Ll", $buf; 
     54      my $blocks = unpack64(substr($buf, 8, 8)); 
     55      my $bfree = unpack64(substr($buf, 16, 8)); 
     56      my $bavail = unpack64(substr($buf, 24, 8)); 
     57      my $files = unpack64(substr($buf, 32, 8)); 
     58      my $ffree = unpack64(substr($buf, 80, 8)); 
     59      my $bfactor = $bsize / 1024; 
     60      return int($blocks * $bfactor), int(($blocks - $bavail) * $bfactor); 
     61    } 
     62    else { die "Unsupported platform '$^O'.  Add support." }; 
     63  } 
     64} 
     65 
    15661;