make scheduler start automatic based on housekeeping setting existing

This commit is contained in:
Oliver Gorwits
2013-03-24 20:22:11 +00:00
parent 0acbe8abd3
commit cb25216f40
3 changed files with 12 additions and 13 deletions

View File

@@ -46,8 +46,12 @@ sub build_tasks_list {
user_begin => worker_factory('Manager'), user_begin => worker_factory('Manager'),
}]; }];
set(daemon_schedulers => 1) $has_scheduler = (setting('housekeeping') ? 1 : 0);
if !defined setting('daemon_schedulers'); push @$tasks, {
max_workers => 1,
user_begin => worker_factory('Scheduler'),
} if $has_scheduler;
set(daemon_pollers => 2) set(daemon_pollers => 2)
if !defined setting('daemon_pollers'); if !defined setting('daemon_pollers');
set(daemon_interactives => 2) set(daemon_interactives => 2)
@@ -55,11 +59,6 @@ sub build_tasks_list {
# XXX MCE does not like max_workers => 0 # XXX MCE does not like max_workers => 0
push @$tasks, {
max_workers => setting('daemon_schedulers'),
user_begin => worker_factory('Scheduler'),
} if setting('daemon_schedulers');
push @$tasks, { push @$tasks, {
max_workers => setting('daemon_pollers'), max_workers => setting('daemon_pollers'),
user_begin => worker_factory('Poller'), user_begin => worker_factory('Poller'),
@@ -71,8 +70,7 @@ sub build_tasks_list {
} if setting('daemon_interactives'); } if setting('daemon_interactives');
info sprintf "MCE will load %s tasks: 1 Manager, %s Scheduler, %s Poller, %s Interactive", info sprintf "MCE will load %s tasks: 1 Manager, %s Scheduler, %s Poller, %s Interactive",
(1+ scalar @$tasks), (1+ scalar @$tasks), $has_scheduler,
(setting('daemon_schedulers') || 0),
(setting('daemon_pollers') || 0), (setting('daemon_pollers') || 0),
(setting('daemon_interactives') || 0); (setting('daemon_interactives') || 0);
return $tasks; return $tasks;

View File

@@ -26,9 +26,9 @@ sub worker_begin {
debug "entering Scheduler ($wid) worker_begin()"; debug "entering Scheduler ($wid) worker_begin()";
foreach my $a (keys %$jobactions) { foreach my $a (keys %$jobactions) {
next unless setting('job_schedule') next unless setting('housekeeping')
and exists setting('job_schedule')->{$a}; and exists setting('housekeeping')->{$a};
my $config = setting('job_schedule')->{$a}; my $config = setting('housekeeping')->{$a};
# accept either single crontab format, or individual time fields # accept either single crontab format, or individual time fields
my $cron = Algorithm::Cron->new(@{ my $cron = Algorithm::Cron->new(@{
@@ -62,6 +62,8 @@ sub worker_body {
if ($sched->{when}->next_time($win_start) < $win_end) { if ($sched->{when}->next_time($win_start) < $win_end) {
# queue it! # queue it!
# due to a table constraint, this will fail if a similar job is
# already queued.
try { try {
debug "scheduler ($wid): queueing $a job"; debug "scheduler ($wid): queueing $a job";
schema('netdisco')->resultset('Admin')->create({ schema('netdisco')->resultset('Admin')->create({

View File

@@ -72,7 +72,6 @@ daemon_sleep_time: 5
# how many daemon processes # how many daemon processes
# NB one worker will always be a Queue Manager # NB one worker will always be a Queue Manager
daemon_schedulers: 1
daemon_interactives: 2 daemon_interactives: 2
daemon_pollers: 0 daemon_pollers: 0