[Midnightbsd-cvs] mports: lib/Magus: various bg fixes, you can now halt and resume the

ctriv at midnightbsd.org ctriv at midnightbsd.org
Mon Oct 29 13:07:48 EDT 2007


Log Message:
-----------
various bg fixes, you can now halt and resume the cluster.

Modified Files:
--------------
    mports/Tools/lib/Magus:
        Cluster.pm (r1.1 -> r1.2)
        Task.pm (r1.1 -> r1.2)
    mports/Tools/lib/Magus/Task:
        UpdateMports.pm (r1.1 -> r1.2)
        Wait.pm (r1.1 -> r1.2)

-------------- next part --------------
Index: Task.pm
===================================================================
RCS file: /home/cvs/mports/Tools/lib/Magus/Task.pm,v
retrieving revision 1.1
retrieving revision 1.2
diff -LTools/lib/Magus/Task.pm -LTools/lib/Magus/Task.pm -u -r1.1 -r1.2
--- Tools/lib/Magus/Task.pm
+++ Tools/lib/Magus/Task.pm
@@ -39,8 +39,8 @@
 use Magus::Task::UpdateMports ();
 
 
-__PACKAGE__->table('results');
-__PACKAGE__->columns(All => qw/machine type completed/);
+__PACKAGE__->table('tasks');
+__PACKAGE__->columns(All => qw/id type machine started completed/);
 
 __PACKAGE__->has_a(machine => 'Magus::Machine');
 
@@ -49,7 +49,9 @@
   
   my $self = $class->SUPER::construct(@args);
   
-  bless $self, ref $self . "::" . $self->type;
+  my $subclass = join('::', ref $self, $self->type);
+  
+  bless $self, $subclass;
   
   return $self;
 }
@@ -59,7 +61,7 @@
 sub set_callbacks {
   my ($class, %cbs) = @_;
   
-  $class->callbacks = \%cbs;
+  $class->callbacks(\%cbs);
 }
 
 sub is_complete {
Index: Cluster.pm
===================================================================
RCS file: /home/cvs/mports/Tools/lib/Magus/Cluster.pm,v
retrieving revision 1.1
retrieving revision 1.2
diff -LTools/lib/Magus/Cluster.pm -LTools/lib/Magus/Cluster.pm -u -r1.1 -r1.2
--- Tools/lib/Magus/Cluster.pm
+++ Tools/lib/Magus/Cluster.pm
@@ -40,7 +40,10 @@
 }
 
 sub resume {
-  $_->complete(1) for Magus::Tasks->search(type => wait);
+  foreach my $task (Magus::Task->search(type => 'Wait', started => 1)) {
+    $task->completed(1);
+    $task->update;
+  }
 }
 
 
@@ -53,20 +56,28 @@
   
   while ($running_count > 0) {
     $running_count = Magus::Task->search(type => $type, complete => 0)->count;  
+    sleep(5);
   }
 }
   
    
-sub _send_task {
+sub _send_tasks {
   my ($type) = @_;
+
+  my $count = 0;  
+  foreach my $machine (Magus::Machine->retrieve_all) {
+    next if $machine->id == $Magus::Machine->id;
   
-  foreach my $machine (Magus::Machine->retrive_all) {
-    next if $machine eq $Magus::Machine;
-    
     Magus::Task->insert({
       machine => $machine,
       type    => $type
     });
+    
+    $count++;
+  }
+  
+  while (Magus::Task->search(type => $type, started => 1)->count != $count) {
+    sleep(1);
   }
 }
 
Index: UpdateMports.pm
===================================================================
RCS file: /home/cvs/mports/Tools/lib/Magus/Task/UpdateMports.pm,v
retrieving revision 1.1
retrieving revision 1.2
diff -LTools/lib/Magus/Task/UpdateMports.pm -LTools/lib/Magus/Task/UpdateMports.pm -u -r1.1 -r1.2
--- Tools/lib/Magus/Task/UpdateMports.pm
+++ Tools/lib/Magus/Task/UpdateMports.pm
@@ -47,6 +47,8 @@
 
 sub exec {  
   my ($self) = @_;
+
+  $self->started(1); $self->update;
   
   $self->callbacks->{'log'}->('Updating mports tree');
   
Index: Wait.pm
===================================================================
RCS file: /home/cvs/mports/Tools/lib/Magus/Task/Wait.pm,v
retrieving revision 1.1
retrieving revision 1.2
diff -LTools/lib/Magus/Task/Wait.pm -LTools/lib/Magus/Task/Wait.pm -u -r1.1 -r1.2
--- Tools/lib/Magus/Task/Wait.pm
+++ Tools/lib/Magus/Task/Wait.pm
@@ -46,17 +46,29 @@
 =cut
 
 
-
 sub exec {
   my ($self) = @_;
   
+  $self->started(1); $self->update;
+
+  $self->callbacks->{'log'}->("Halted");
+  
   while (1) {
-    sleep(60);
+    sleep(1);
+    
+    #
+    # Run other tasks
+    #
+    if (my @torun = Magus::Task->retrieve_from_sql('machine=? AND id!=? AND started=0 AND completed=0', $Magus::Machine, $self->id)) {
+      $_->exec for @torun;
+    }
     
     if ($self->is_complete) {
       last;
     }
   }
+  
+  $self->delete;
 }
 
 


More information about the Midnightbsd-cvs mailing list