From b9041f87b25a0fdd0309a37309bb70071adc9469 Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Fri, 11 Aug 2023 13:28:28 +0100 Subject: [PATCH] fix bug with internal actions overriding job actions --- lib/App/Netdisco/Worker/Loader.pm | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/lib/App/Netdisco/Worker/Loader.pm b/lib/App/Netdisco/Worker/Loader.pm index b46e127e..74b10225 100644 --- a/lib/App/Netdisco/Worker/Loader.pm +++ b/lib/App/Netdisco/Worker/Loader.pm @@ -36,23 +36,38 @@ sub load_workers { Module::Load::load $plugin; } + my $workers = vars->{'workers'}->{$action} || {}; + + # need to merge in internal workers without overriding action workers + foreach my $phase (qw/check early main user store late/) { + next unless exists vars->{'workers'}->{'internal'} + and exists vars->{'workers'}->{'internal'}->{$phase}; + my $internal = vars->{'workers'}->{'internal'}; + + foreach my $namespace (keys %{ $internal->{$phase} }) { + foreach my $priority (keys %{ $internal->{$phase}->{$namespace} }) { + push @{ $workers->{$phase}->{$namespace}->{$priority} }, + @{ $internal->{$phase}->{$namespace}->{$priority} }; + } + } + } + + # use DDP; my $x = vars{'workers'}; p $x; p $workers; + # now vars->{workers} is populated, we set the dispatch order - my %workers = ( %{ vars->{'workers'}->{$action} || {} }, - %{ vars->{'workers'}->{'internal'} || {} } ); my $driverless_main = 0; - # use DDP; p vars{'workers'}; p %workers; foreach my $phase (qw/check early main user store late/) { my $pname = "workers_${phase}"; my @wset = (); - foreach my $namespace (sort keys %{ $workers{$phase} }) { + foreach my $namespace (sort keys %{ $workers->{$phase} }) { foreach my $priority (sort {$b <=> $a} - keys %{ $workers{$phase}->{$namespace} }) { + keys %{ $workers->{$phase}->{$namespace} }) { ++$driverless_main if $phase eq 'main' and ($priority == 0 or $priority == setting('driver_priority')->{'direct'}); - push @wset, @{ $workers{$phase}->{$namespace}->{$priority} }; + push @wset, @{ $workers->{$phase}->{$namespace}->{$priority} }; } }