package Magus::Lock; # # Copyright (c) 2007,2008 Chris Reinhardt. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # # 1. Redistributions of source code must retain the above copyright notice # this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY # AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # # MAINTAINER= ctriv@MidnightBSD.org # use base qw(Magus::DBI); use strict; use warnings; __PACKAGE__->table('locks'); __PACKAGE__->columns(Essential => qw(id port machine)); __PACKAGE__->sequence('locks_id_seq'); __PACKAGE__->has_a(machine => "Magus::Machine"); __PACKAGE__->has_a(port => "Magus::Port"); __PACKAGE__->set_sql(by_run => <<'END_OF_SQL'); SELECT locks.* FROM locks,ports WHERE port=ports.id AND ports.run=? END_OF_SQL sub get_ready_lock { my ($class, $run) = @_; my $lock; my $port; while (!defined $lock) { my $port = Magus::Port->get_ready_port($run); if (!$port) { # we ran thru all the ports... return; } $lock = $class->_get_lock($port); } return $lock; } sub _get_lock { my ($class, $port) = @_; my $lock; eval { $lock = $class->insert({ port => $port, machine => $Magus::Machine, }); }; if ($@) { if ($@ =~ m/duplicate/i) { return; } else { die $@; } } return $lock; } # # depreacted method # use Carp qw(cluck); sub arch { my ($self) = @_; cluck("Use of deprecated method: " . ref $self . "->arch. Use ->machine->arch instead."); return $self->machine->arch; } 1; __END__