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}};

Reply via email to