[svn:p5ee] r11722 - p5ee/trunk/App-WorkQueue/lib/App
[email protected] Mon, 1 Sep 2008 19:10:31 -0700 (PDT)
| Newsgroups | perl.cvs.p5ee |
|---|---|
| Message-ID | <[email protected]> |
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}};