Author: spadkins
Date: Fri Aug 11 10:41:56 2006
New Revision: 6782

Modified:
   p5ee/trunk/App-Context/lib/App/Context/ClusterController.pm
   p5ee/trunk/App-Context/lib/App/Context/Server.pm

Log:
improve assignment of async_events

Modified: p5ee/trunk/App-Context/lib/App/Context/ClusterController.pm
==============================================================================
--- p5ee/trunk/App-Context/lib/App/Context/ClusterController.pm (original)
+++ p5ee/trunk/App-Context/lib/App/Context/ClusterController.pm Fri Aug 11 
10:41:56 2006
@@ -118,7 +118,7 @@
 sub assign_event_destination {
     &App::sub_entry if ($App::trace);
     my ($self, $event) = @_;
-    my $assigned = 0;
+    my $assigned = undef;
     if ($self->{num_async_events} < $self->{max_async_events}) {
         # SPA 2006-07-01: I just commented this out. I shouldn't need it.
         # $event->{destination} = $self->{host};
@@ -138,7 +138,7 @@
     &App::sub_entry if ($App::trace);
     my ($self, $event) = @_;
     
-    my $assigned = 0;
+    my $assigned = undef;
     my $nodes = $self->{nodes};
     if ($#$nodes > -1) {
         my $node_idx = $self->{node}{ALL}{last_node_idx};

Modified: p5ee/trunk/App-Context/lib/App/Context/Server.pm
==============================================================================
--- p5ee/trunk/App-Context/lib/App/Context/Server.pm    (original)
+++ p5ee/trunk/App-Context/lib/App/Context/Server.pm    Fri Aug 11 10:41:56 2006
@@ -593,15 +593,22 @@
     my $pending_async_events = $self->{pending_async_events};
     my ($async_event, $assigned);
     my $events_occurred = 0;
-    while ($#$pending_async_events > -1) {
-        $assigned = 
$self->assign_event_destination($pending_async_events->[0][0]);
+    my $i = 0;
+    while ($i <= $#$pending_async_events) {
+        $async_event = $pending_async_events->[$i];
+        $assigned = $self->assign_event_destination($async_event->[0]);
         if ($assigned) {
             $async_event = shift(@$pending_async_events);
             $self->send_async_event_now(@$async_event);
             $events_occurred ++;
+            splice(@$pending_async_events, $i, 1);  # remove 
$pending_async_events->[$i]
+            # keep $i the same
         }
-        else {
-            last;
+        elsif (! defined $assigned) {   # [undef] no servers are eligible for 
assignment
+            last;   # there's no sense looking at the other pending async 
events
+        }
+        else {      # [0] this async_event is not eligible to run
+            $i++;   # look at the next one
         }
     }
     &App::sub_exit($events_occurred) if ($App::trace);
@@ -611,7 +618,7 @@
 sub assign_event_destination {
     &App::sub_entry if ($App::trace);
     my ($self, $event) = @_;
-    my $assigned = 0;
+    my $assigned = undef;
     if ($self->{num_procs} < $self->{max_procs} &&
         (!defined $self->{max_async_events} || $self->{num_async_events} < 
$self->{max_async_events})) {
         $event->{destination} = $self->{host};

Reply via email to