execute LDAP and CRM jobs in parallel as single task
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 13 Mar 2011 17:22:02 +0000 (18:22 +0100)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 13 Mar 2011 17:22:02 +0000 (18:22 +0100)
lib/APKPM.pm

index 3b2517a..8f9c992 100644 (file)
@@ -9,6 +9,7 @@ use Data::Dump qw(dump);
 our $VERSION = '0.00';
 
 with 'APKPM::Gearman';
+with 'APKPM::Gearman::Client';
 
 sub prefix { '' }
 
@@ -18,9 +19,22 @@ sub process_name {
        return "$orig ($job_name)";
 }
 
-sub poll : Job : MinProcesses(1) : MaxProcesses(5) : Encode(e_json) : Decode(d_json) {
+sub poll : Job : MinProcesses(1) : MaxProcesses(5) : Encode(e_json) {
        my ( $self, $job, $workload ) = @_;
        warn "# poll $job ", dump($workload);
+
+       my $res = { workload => $workload };
+
+       my $taskset = $self->gc->new_task_set;
+       $taskset->add_task('LDAP_search', $workload, {
+               on_complete => sub { $res->{ldap} = $self->d_json( ${$_[0]} ) }
+       });
+       $taskset->add_task('CRM_username', $workload, {
+               on_complete => sub { $res->{crm} = $self->d_json( ${$_[0]} ) }
+       });
+       warn "# wait";
+       $taskset->wait;
+       return $res;
 }
 
 1;