[#209] AUTO broken in tasks specification
This commit is contained in:
@@ -5,6 +5,10 @@
|
|||||||
* Update development doc to mention cpanm installdeps
|
* Update development doc to mention cpanm installdeps
|
||||||
* Update troubleshooting doc to mention four key actions
|
* Update troubleshooting doc to mention four key actions
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* [#209] AUTO broken in tasks specification
|
||||||
|
|
||||||
2.032001 - 2015-03-24
|
2.032001 - 2015-03-24
|
||||||
|
|
||||||
[NEW FEATURES]
|
[NEW FEATURES]
|
||||||
|
|||||||
@@ -63,9 +63,13 @@ my $queue = MCE::Queue->new;
|
|||||||
setting('workers')->{'no_manager'} = 1
|
setting('workers')->{'no_manager'} = 1
|
||||||
if setting('workers')->{tasks} eq '0';
|
if setting('workers')->{tasks} eq '0';
|
||||||
|
|
||||||
|
# MCE::Util has a limit of ncpu if AUTO is used in max_workers,
|
||||||
|
# so we parse the field ourselves.
|
||||||
|
my $max_workers = parse_max_workers( setting('workers')->{tasks} ) || 0;
|
||||||
|
|
||||||
mce_flow {
|
mce_flow {
|
||||||
task_name => [qw/ scheduler manager poller /],
|
task_name => [qw/ scheduler manager poller /],
|
||||||
max_workers => [ 1, 1, setting('workers')->{tasks} ],
|
max_workers => [ 1, 1, $max_workers ],
|
||||||
tmp_dir => $tmp_dir,
|
tmp_dir => $tmp_dir,
|
||||||
on_post_exit => sub { MCE->restart_worker },
|
on_post_exit => sub { MCE->restart_worker },
|
||||||
}, _mk_wkr('Scheduler'), _mk_wkr('Manager'), _mk_wkr('Poller');
|
}, _mk_wkr('Scheduler'), _mk_wkr('Manager'), _mk_wkr('Poller');
|
||||||
|
|||||||
@@ -44,8 +44,7 @@ sub worker_body {
|
|||||||
prctl sprintf 'netdisco-daemon: worker #%s manager: gathering', $wid;
|
prctl sprintf 'netdisco-daemon: worker #%s manager: gathering', $wid;
|
||||||
my $num_slots = 0;
|
my $num_slots = 0;
|
||||||
|
|
||||||
$num_slots =
|
$num_slots = parse_max_workers( setting('workers')->{tasks} )
|
||||||
MCE::Util::_parse_max_workers( setting('workers')->{tasks} )
|
|
||||||
- $self->{queue}->pending();
|
- $self->{queue}->pending();
|
||||||
debug "mgr ($wid): getting potential jobs for $num_slots workers (HP)";
|
debug "mgr ($wid): getting potential jobs for $num_slots workers (HP)";
|
||||||
|
|
||||||
@@ -62,8 +61,7 @@ sub worker_body {
|
|||||||
$self->{queue}->enqueuep(100, $job);
|
$self->{queue}->enqueuep(100, $job);
|
||||||
}
|
}
|
||||||
|
|
||||||
$num_slots =
|
$num_slots = parse_max_workers( setting('workers')->{tasks} )
|
||||||
MCE::Util::_parse_max_workers( setting('workers')->{tasks} )
|
|
||||||
- $self->{queue}->pending();
|
- $self->{queue}->pending();
|
||||||
debug "mgr ($wid): getting potential jobs for $num_slots workers (NP)";
|
debug "mgr ($wid): getting potential jobs for $num_slots workers (NP)";
|
||||||
|
|
||||||
|
|||||||
@@ -3,11 +3,13 @@ package App::Netdisco::Util::Daemon;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
|
use MCE::Util ();
|
||||||
|
|
||||||
# make sure this is already done elsewhere
|
# make sure this is already done elsewhere
|
||||||
use if $^O eq 'linux', 'Sys::Proctitle';
|
use if $^O eq 'linux', 'Sys::Proctitle';
|
||||||
|
|
||||||
use base 'Exporter';
|
use base 'Exporter';
|
||||||
our @EXPORT = 'prctl';
|
our @EXPORT = qw/prctl parse_max_workers/;
|
||||||
|
|
||||||
sub prctl {
|
sub prctl {
|
||||||
if ($^O eq 'linux') {
|
if ($^O eq 'linux') {
|
||||||
@@ -18,4 +20,19 @@ sub prctl {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub parse_max_workers {
|
||||||
|
my $max = shift;
|
||||||
|
return 0 if !defined $max;
|
||||||
|
|
||||||
|
if ($max =~ /^auto(?:$|\s*([\-\+\/\*])\s*(.+)$)/i) {
|
||||||
|
my $ncpu = MCE::Util::get_ncpu() || 0;
|
||||||
|
|
||||||
|
if ($1 and $2) {
|
||||||
|
local $@; $max = eval "int($ncpu $1 $2 + 0.5)";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $max || 0;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|||||||
Reference in New Issue
Block a user