# See copyright, etc in below POD section. ###################################################################### package Schedule::Load::Hold; require 5.004; use Schedule::Load; use Sys::Hostname; use strict; use vars qw($VERSION $AUTOLOAD); use Carp; ###################################################################### #### Configuration Section $VERSION = '3.062'; ###################################################################### #### Creators sub new { my $proto = shift; my $class = ref($proto) || $proto; my $self = { req_hostname=>hostname(),# Host making the request req_pid=>$$, # Process ID making the request req_time=>time(), # When the request was issued req_user=>$ENV{USER}, # User name req_pri=>0, # Request priority, maybe negative for better hold_key=>undef, # Key for looking up the request hold_load=>1, # Load to apply to the host hold_time=>70, # Seconds to hold for comment=>"", # Information for printing allocated=>undef, # If set, chooser allocated this hold @_,}; bless $self, $class; $self->hold_key or carp "%Warning: No hold_key specified,"; return $self; } sub set_fields { my $self = shift; my %params = (@_); foreach my $key (keys %{$self}) { $self->{$key} = $params{$key} if exists $params{$key}; } } ###################################################################### #### Special accessors sub req_age { return (time() - $_[0]->req_time); } sub compare_pri_time { # Sort comparison for ordering requests # This must return a consistent order, thus the hold_key is required as part of the compare. # For speed this doesn't use accessors - generally don't do this. return ($_[0]->{req_pri} <=> $_[1]->{req_pri} || $_[0]->{req_time} <=> $_[1]->{req_time} || $_[0]->{hold_key} cmp $_[1]->{hold_key}); } ###################################################################### #### Accessors sub AUTOLOAD { my $self = shift; my $type = ref($self) or croak "$self is not an ".__PACKAGE__." object"; (my $field = $AUTOLOAD) =~ s/.*://; # Remove package if (exists ($self->{$field})) { eval "sub $field { return \$_[0]->{$field}; }"; return $self->{$field}; } else { croak "$type->$field: Unknown ".__PACKAGE__." field $field"; } } sub DESTROY {} ###################################################################### ###################################################################### 1; __END__ =pod =head1 NAME Schedule::Load::Hold - Return hold/wait information =head1 SYNOPSIS See Schedule::Load::Schedule =head1 DESCRIPTION This package provides accessors for information about a specific request that is either waiting for a host, or has obtained a host and is holding it temporarily. =head1 ACCESSORS =over 4 =item allocated Set by scheduler to indicate this hold has been scheduled resources, versus a hold that is awaiting further resources to complete. For informational printing, not set by user requests. =item comment Text comment for printing in reports. =item hold_key Key for generating and removing the request via Schedule::Load::Schedule. =item hold_load Number of loads to apply, for Schedule::Load::Schedule applications. Negative will request all resources on that host. =item hold_time Number of seconds the hold should apply before deletion. =item req_age Computed number of seconds since request was issued. =item req_hostname Host the request for holding was issued from. =item req_pid Pid the request for holding was issued by. =item req_pri Priority of the request, defaults to zero. Lower is higher priority. =item req_time Time the request for holding was issued. The chooser may move this time back to correspond to the very first request if the new hold's key matches a hold issued earlier. Due to this, hold_keys should be different with each unique request. =back =head1 DISTRIBUTION The latest version is available from CPAN and from L. Copyright 1998-2009 by Wilson Snyder. This package is free software; you can redistribute it and/or modify it under the terms of either the GNU Lesser General Public License Version 3 or the Perl Artistic License Version 2.0. =head1 AUTHORS Wilson Snyder =head1 SEE ALSO L, L, L =cut