further work on retval handling from workers
This commit is contained in:
@@ -4,9 +4,9 @@ use Dancer ':syntax';
|
|||||||
use Dancer::Plugin;
|
use Dancer::Plugin;
|
||||||
use Dancer::Factory::Hook;
|
use Dancer::Factory::Hook;
|
||||||
|
|
||||||
use App::Netdisco::Util::Permission qw/check_acl_no check_acl_only/;
|
|
||||||
use Scope::Guard;
|
use Scope::Guard;
|
||||||
use Try::Tiny;
|
use aliased 'App::Netdisco::Worker::Status';
|
||||||
|
use App::Netdisco::Util::Permission qw/check_acl_no check_acl_only/;
|
||||||
|
|
||||||
# track the phases seen so we can recall them in order
|
# track the phases seen so we can recall them in order
|
||||||
set( '_nd2worker_hooks' => [] );
|
set( '_nd2worker_hooks' => [] );
|
||||||
@@ -31,7 +31,7 @@ register 'register_worker' => sub {
|
|||||||
$workerconf->{primary} = $workerconf->{primary};
|
$workerconf->{primary} = $workerconf->{primary};
|
||||||
|
|
||||||
my $worker = sub {
|
my $worker = sub {
|
||||||
my $job = shift or return false;
|
my $job = shift or return Status->error('missing job param');
|
||||||
|
|
||||||
my $no = (exists $workerconf->{no} ? $workerconf->{no} : undef);
|
my $no = (exists $workerconf->{no} ? $workerconf->{no} : undef);
|
||||||
my $only = (exists $workerconf->{only} ? $workerconf->{only} : undef);
|
my $only = (exists $workerconf->{only} ? $workerconf->{only} : undef);
|
||||||
@@ -51,18 +51,11 @@ register 'register_worker' => sub {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# back up and restore device_auth
|
# back up and restore device_auth
|
||||||
return false unless scalar @newuserconf;
|
|
||||||
my $guard = guard { set(device_auth => \@userconf) };
|
my $guard = guard { set(device_auth => \@userconf) };
|
||||||
set(device_auth => \@newuserconf);
|
set(device_auth => \@newuserconf);
|
||||||
|
|
||||||
# run worker
|
# run worker
|
||||||
my $happy = false;
|
return $code->($job, $workerconf);
|
||||||
try {
|
|
||||||
$code->($job, $workerconf);
|
|
||||||
$happy = true;
|
|
||||||
}
|
|
||||||
catch { debug $_ };
|
|
||||||
return $happy;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
my $primary = ($workerconf->{primary} ? '_primary' : '');
|
my $primary = ($workerconf->{primary} ? '_primary' : '');
|
||||||
|
|||||||
@@ -16,7 +16,8 @@ sub run {
|
|||||||
die 'bad job to run()' unless ref $job eq 'App::Netdisco::Backend::Job';
|
die 'bad job to run()' unless ref $job eq 'App::Netdisco::Backend::Job';
|
||||||
|
|
||||||
my $action = $job->action;
|
my $action = $job->action;
|
||||||
my @phase_hooks = @{ (setting('_nd2worker_hooks') || []) };
|
my @phase_hooks = grep { m/^nd2worker_${action}_/ }
|
||||||
|
@{ (setting('_nd2worker_hooks') || []) };
|
||||||
|
|
||||||
# run 00init primary
|
# run 00init primary
|
||||||
my $status = _run_first("nd2worker_${action}_00init_primary", $job);
|
my $status = _run_first("nd2worker_${action}_00init_primary", $job);
|
||||||
@@ -26,12 +27,10 @@ sub run {
|
|||||||
_run_all("nd2worker_${action}_00init", $job);
|
_run_all("nd2worker_${action}_00init", $job);
|
||||||
|
|
||||||
# run primary
|
# run primary
|
||||||
_run_first($_.'_primary', $job)
|
_run_first($_.'_primary', $job) for (@phase_hooks);
|
||||||
for (grep { m/^nd2worker_${action}_/ } @phase_hooks);
|
|
||||||
|
|
||||||
# run each worker
|
# run each worker
|
||||||
_run_all($_, $job)
|
_run_all($_, $job) for (@phase_hooks);
|
||||||
for (grep { m/^nd2worker_${action}_/ } @phase_hooks);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -45,8 +44,16 @@ sub _run_first {
|
|||||||
or return Status->error("no such hook: $hook");
|
or return Status->error("no such hook: $hook");
|
||||||
|
|
||||||
foreach my $worker (@{ $store->get_hooks_for($hook) }) {
|
foreach my $worker (@{ $store->get_hooks_for($hook) }) {
|
||||||
my $status = $worker->($job);
|
my $retval = false;
|
||||||
return $status if $status->ok;
|
try {
|
||||||
|
$retval = $worker->($job);
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
$retval = Status->error($_);
|
||||||
|
};
|
||||||
|
|
||||||
|
$retval ||= Status->done('no status supplied');
|
||||||
|
return $retval if $retval->ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Status->error('no worker was successful');
|
return Status->error('no worker was successful');
|
||||||
|
|||||||
Reference in New Issue
Block a user