AC-MrGamoo

 view release on metacpan or  search on metacpan

lib/AC/MrGamoo/Job/Util.pm  view on Meta::CPAN

# -*- perl -*-

# Copyright (c) 2010 AdCopy
# Author: Jeff Weisberg
# Created: 2010-Jan-21 11:57 (EST)
# Function: misc
#
# $Id: Util.pm,v 1.2 2011/01/18 18:02:52 jaw Exp $

package AC::MrGamoo::Job;
use strict;

our %REGISTRY;
our $MAXFILE;
our $MAXLOAD;

sub _find {
    my $me = shift;
    return $me if ref $me;

    my %p = @_;
    my $jobid = $p{jobid};
    $me = $REGISTRY{$jobid};

    return $me;
}

################################################################

sub _send_request {
    my $me     = shift;
    my $server = shift;

    my($addr, $port) = get_peer_addr_from_id( $server );
    unless( $addr ){
        verbose("cannot locate server $server");
        return;
    }

    my $x = AC::MrGamoo::API::Client->new( $addr, $port, @_ );
    return $x;
}

################################################################

# do we have sufficient resources to take on more work?
sub _ok_to_do_more_p {
    my $me = shift;

    my $io = AC::DC::IO->underway();
    return if $io >= $MAXFILE / 2;

    if( loadave() >= $MAXLOAD ){
        return if rand() >= ( 1 - loadave() ) / 5;
    }

    # RSN - check ave/max load of all other servers
    my $MAX = $MAXLOAD * 1000;

    my $servers = get_peer_list();
    for my $s (@$servers){
        next unless $me->{server_info}{$s};
        return if $s->{metric} > $MAX;
    }


    return 1;
}


1;



( run in 3.180 seconds using v1.01-cache-2.11-cpan-d8267643d1d )