Author: spadkins
Date: Mon Jun 19 13:30:07 2006
New Revision: 6552

Modified:
   p5ee/trunk/App-WorkQueue/lib/App/WorkQueue.pm
   p5ee/trunk/App-WorkQueue/lib/App/WorkQueue/Repository.pm

Log:
fix _refill_buffer()

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 Jun 19 13:30:07 2006
@@ -1730,35 +1730,48 @@
     $op ||= "";
     my $BUFFER_SIZE = $self->{BUFFER_SIZE};
 
-    my $resource_key = $self->_resource_key($entry);
-    my $resource_counts = $self->_resource_counts();
-
-    if ($op eq "push") {
-        $resource_counts->{total}{$resource_key}++;
-        if ($resource_counts->{buffer}{$resource_key} < $BUFFER_SIZE) {
+    if ($entry) {
+        my $resource_key = $self->_resource_key($entry);
+        my $resource_counts = $self->_resource_counts();
+
+        if ($op eq "push") {
+            $resource_counts->{total}{$resource_key}++;
+            if ($resource_counts->{buffer}{$resource_key} < $BUFFER_SIZE) {
+                $resource_counts->{buffer}{$resource_key}++;
+                $self->_push_in_mem($entry);
+            }
+            else {
+                $self->_push_in_mem($entry,1); # release lowest
+            }
+        }
+        elsif ($op eq "acquire") {
+            $resource_counts->{total}{$resource_key}--;
+            $resource_counts->{buffer}{$resource_key}--;
+        }
+        elsif ($op eq "release") {
+            $self->_release_in_mem($entry, $columns, $values);
+        }
+        elsif ($op eq "unacquire") {
+            $resource_counts->{total}{$resource_key}++;
             $resource_counts->{buffer}{$resource_key}++;
-            $self->_push_in_mem($entry);
         }
-        else {
-            $self->_push_in_mem($entry,1); # release lowest
+        my $num_total       = $resource_counts->{total}{$resource_key};
+        my $num_in_buffer   = $resource_counts->{buffer}{$resource_key};
+        if ($num_total > $num_in_buffer && $num_in_buffer < $BUFFER_SIZE) {
+            my $num_added = $self->_refill_buffer($resource_key);
+            $resource_counts->{buffer}{$resource_key} += $num_added;
         }
     }
-    elsif ($op eq "acquire") {
-        $resource_counts->{total}{$resource_key}--;
-        $resource_counts->{buffer}{$resource_key}--;
-    }
-    elsif ($op eq "release") {
-        $self->_release_in_mem($entry, $columns, $values);
-    }
-    elsif ($op eq "unacquire") {
-        $resource_counts->{total}{$resource_key}++;
-        $resource_counts->{buffer}{$resource_key}++;
-    }
-    my $num_total       = $resource_counts->{total}{$resource_key};
-    my $num_in_buffer   = $resource_counts->{buffer}{$resource_key};
-    if ($num_total > $num_in_buffer && $num_in_buffer < $BUFFER_SIZE) {
-        my $num_added = $self->_refill_buffer($resource_key);
-        $resource_counts->{buffer}{$resource_key} += $num_added;
+    else {
+        my $resource_counts = $self->_resource_counts();
+        foreach my $resource_key (keys %{$resource_counts->{total}}) {
+            my $num_total       = $resource_counts->{total}{$resource_key};
+            my $num_in_buffer   = $resource_counts->{buffer}{$resource_key};
+            if ($num_total > $num_in_buffer && $num_in_buffer < $BUFFER_SIZE) {
+                my $num_added = $self->_refill_buffer($resource_key);
+                $resource_counts->{buffer}{$resource_key} += $num_added;
+            }
+        }
     }
 
     &App::sub_exit() if ($App::trace);

Modified: p5ee/trunk/App-WorkQueue/lib/App/WorkQueue/Repository.pm
==============================================================================
--- p5ee/trunk/App-WorkQueue/lib/App/WorkQueue/Repository.pm    (original)
+++ p5ee/trunk/App-WorkQueue/lib/App/WorkQueue/Repository.pm    Mon Jun 19 
13:30:07 2006
@@ -144,15 +144,23 @@
             $params->{$param} = $base_params->{$param};
         }
     }
+
     my (@resource_cols, $value, $resource_key);
+    # find the @resource_cols
+    if ($self->{constraints}) {
+        foreach my $c (@{$self->{constraints}}) {
+            push(@resource_cols, $c->[2]);
+        }
+    }
+
     my $rows = $db->get_rows($self->{table}, $params, [ @resource_cols, 
$count_expr ], { group_by => [ @resource_cols ] });
     foreach my $row (@$rows) {
         $value = pop(@$row);
-        $resource_key = join(":", @$row);
+        $resource_key = ($#$row > -1) ? join(":", @$row) : "";
         $counts{$resource_key} = $value;
     }
-    # --------------
     $self->{resource_counts}{total} = \%counts;
+
     &App::sub_exit() if ($App::trace);
 }
 

Reply via email to