Author: spadkins
Date: Mon Sep 1 19:10:30 2008
New Revision: 11722
Modified:
p5ee/trunk/App-WorkQueue/lib/App/WorkQueue.pm
Log:
update to _acquire_in_mem to prevent it from scanning through the entire list
of ->{data} for each acquisition if a particular resource key is unacquirable
Modified: p5ee/trunk/App-WorkQueue/lib/App/WorkQueue.pm
==============================================================================
--- p5ee/trunk/App-WorkQueue/lib/App/WorkQueue.pm (original)
+++ p5ee/trunk/App-WorkQueue/lib/App/WorkQueue.pm Mon Sep 1 19:10:30 2008
@@ -513,34 +513,42 @@
}
}
else {
- my ($acquired);
+ my ($acquired, %unacquirable, $resource_key);
foreach my $e (@$entries) {
next if ($e->{$status_attrib} ne $STATUS_UNACQUIRED);
if (!$e || !%$e) {
$context->log({level=>1}, "$self->{name} : Empty entry
[$e]\n");
}
- elsif ($self->_acquire_resources($e)) {
- my $dump_entry = "";
- $dump_entry .= "e (pristine) : " . Dumper($e);
- $entry = $e;
- $acquired = $self->_acquire_entry($entry);
- $dump_entry .= "entry (after _acquire_entry) : " .
Dumper($entry);
- $dump_entry .= "acquired[$acquired]\n";
- if ($acquired) {
- $context->log({level=>3}, "$self->{name} :
_acquire_in_mem: [" . join("|", $e->{shop_request_id}, $e->{subrequest_id}).
"]\n");
- last;
- }
- else {
- ### THIS SHOULD NEVER HAPPEN, SOMEDAY FIGURE OUT WHY
- $self->_release_resources($entry);
- $dump_entry .= "entry (after _release_resources) : " .
Dumper($entry);
- if ($self->can("_db")) {
- ### TODO: this is a debugging hack that shouldn't
stay in it
- my $db = $self->_db();
- $dump_entry .= "last sql stmt[$db->{sql}]\n";
- #$context->log({level=>5}, "$self->{name} :
Acquisition failed : $dump_entry\n");
+ else {
+ $resource_key = $self->_resource_key($e);
+ if (!$unacquirable{$resource_key}) {
+ if ($self->_acquire_resources($e)) {
+ #my $dump_entry = "";
+ #$dump_entry .= "e (pristine) : " . Dumper($e);
+ $entry = $e;
+ $acquired = $self->_acquire_entry($entry);
+ #$dump_entry .= "entry (after _acquire_entry) : "
. Dumper($entry);
+ #$dump_entry .= "acquired[$acquired]\n";
+ if ($acquired) {
+ $context->log({level=>3}, "$self->{name} :
_acquire_in_mem: [" . join("|", $e->{shop_request_id}, $e->{subrequest_id}).
"]\n");
+ last;
+ }
+ else {
+ ### THIS SHOULD NEVER HAPPEN, SOMEDAY FIGURE
OUT WHY
+ $self->_release_resources($entry);
+ #$dump_entry .= "entry (after
_release_resources) : " . Dumper($entry);
+ #if ($self->can("_db")) {
+ # ### TODO: this is a debugging hack that
shouldn't stay in it
+ # my $db = $self->_db();
+ # #$dump_entry .= "last sql
stmt[$db->{sql}]\n";
+ # #$context->log({level=>5}, "$self->{name}
: Acquisition failed : $dump_entry\n");
+ #}
+ $entry = undef;
+ }
+ }
+ else {
+ $unacquirable{$resource_key} = 1;
}
- $entry = undef;
}
}
}
@@ -997,6 +1005,7 @@
my ($entry, %event);
while ($num_events < $max_events) {
$entry = $self->acquire();
+ ### TODO: is there a chance that this fails?, and should we bail
if it does?
last if (!$entry);
$num_events++;
%event = %{$self->{acquisition_event}};