GearmanX-Worker

 view release on metacpan or  search on metacpan

t/01-server.t  view on Meta::CPAN


use constant WORKER_TIME => 5;

use_ok ('REST::Depend::Regex::Gearman');


my @urls      : shared = ();         # workers report back here
my @labels    : shared = ();        # workers report task labels here
my $work_cnt  : shared = 0;
my $work_drop : shared = 0;
my $alives    : shared = 0;



sub run_experiment {
    my $deps = shift;
    my $d = REST::Depend::Regex::Gearman->new ($deps);
    my %o = @_;
    $o{worker} ||= 'perfect';

    @urls = ();
    @labels = ();
    $work_cnt = 0;
    $work_drop = 0;

    warn "== MAIN: $o{nr_workers} =====================================================================================";
    my @workers = map { threads->new(\&Worker::run, "W$_", $o{worker}) } (1.. $o{nr_workers});
    map { $_->detach } @workers;
    $alives = scalar @workers;

    $d->evolve ($o{kick});

    my $start_time = time;
    my $end_time   = $start_time + $o{max_time}; # we plan to work at most some secs on that
    my @gearmandized;

  LOOP: {
    do {
      RESPONSE:

t/01-server.t  view on Meta::CPAN

	    if (my ($place) = $d->things ($url)) {
		next RESPONSE unless $place;                               # it can happen that we get reported a very old worker result
#		warn "MAIN: already got a place at $url: ".Dumper $place;
		$place->touch;
	    } else {
		warn "MAIN: STRANGE got $url in queue which is not known in Petri";
		next RESPONSE;
	    }
	    $d->evolve ($url);
	}
	warn "MAIN: sleeping a bit with alive $alives";
	sleep 1;

#	$d->evolve ('xxx') if time > $end_time - $loop_time + 2; # 2 secs after start we pretend something else happened

	@gearmandized = grep { $_->{gearmandized}->[0] } map { $d->things ($_) } $d->transitions;
	warn "still gearmandized: " . scalar @gearmandized;

#	warn "MAIN: now is ".time;
	my @lates = grep { $_->{gearmandized}->[1] + $_->{gearmandized}->[2] < time }   @gearmandized;
	warn "MAIN: lates are now ".Dumper [ map { $_->{label} } @lates ];



( run in 2.811 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )