Commit 4d5e3624 authored by Byron Jones's avatar Byron Jones

Bug 962424: jobqueue's worker process should process messages in batches

r=?,a=?
parent 617eeba5
...@@ -30,6 +30,10 @@ use constant JOB_MAP => { ...@@ -30,6 +30,10 @@ use constant JOB_MAP => {
# across requests. # across requests.
use constant DRIVER_CACHE_TIME => 300; # 5 minutes use constant DRIVER_CACHE_TIME => 300; # 5 minutes
# To avoid memory leak/fragmentation, a worker process won't process more than
# MAX_MESSAGES messages.
use constant MAX_MESSAGES => 1000;
sub job_map { sub job_map {
if (!defined(Bugzilla->request_cache->{job_map})) { if (!defined(Bugzilla->request_cache->{job_map})) {
my $job_map = JOB_MAP; my $job_map = JOB_MAP;
...@@ -155,6 +159,16 @@ sub work_once { ...@@ -155,6 +159,16 @@ sub work_once {
return $self->SUPER::work_once(@_); return $self->SUPER::work_once(@_);
} }
# Never process more than MAX_MESSAGES in one batch, to avoid memory
# leak/fragmentation issues.
sub work_until_done {
my $self = shift;
my $count = 0;
while ($count++ < MAX_MESSAGES) {
$self->work_once or last;
}
}
1; 1;
__END__ __END__
......
...@@ -45,7 +45,7 @@ jobqueue.pl - Runs jobs in the background for Bugzilla. ...@@ -45,7 +45,7 @@ jobqueue.pl - Runs jobs in the background for Bugzilla.
restart Stops a running jobqueue if one is running, and then restart Stops a running jobqueue if one is running, and then
starts a new one. starts a new one.
once Checks the job queue once, executes the first item found (if once Checks the job queue once, executes the first item found (if
any) and then exits any, up to a limit of 1000 items) and then exits
onepass Checks the job queue, executes all items found, and then exits onepass Checks the job queue, executes all items found, and then exits
check Report the current status of the daemon. check Report the current status of the daemon.
install On some *nix systems, this automatically installs and install On some *nix systems, this automatically installs and
......
...@@ -30,7 +30,7 @@ use constant DEFAULT_WHITELIST => qr/^(?:new|new_from_list|check|run_create_vali ...@@ -30,7 +30,7 @@ use constant DEFAULT_WHITELIST => qr/^(?:new|new_from_list|check|run_create_vali
use constant SUB_WHITELIST => ( use constant SUB_WHITELIST => (
'Bugzilla::Flag' => qr/^(?:(force_)?retarget|force_cleanup)$/, 'Bugzilla::Flag' => qr/^(?:(force_)?retarget|force_cleanup)$/,
'Bugzilla::FlagType' => qr/^sqlify_criteria$/, 'Bugzilla::FlagType' => qr/^sqlify_criteria$/,
'Bugzilla::JobQueue' => qr/(?:^work_once|subprocess_worker)$/, 'Bugzilla::JobQueue' => qr/(?:^work_once|work_until_done|subprocess_worker)$/,
'Bugzilla::Search' => qr/^SPECIAL_PARSING$/, 'Bugzilla::Search' => qr/^SPECIAL_PARSING$/,
); );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment