fix bug with internal actions overriding job actions

This commit is contained in:
Oliver Gorwits
2023-08-11 13:28:28 +01:00
parent 3e1d6a1505
commit b9041f87b2

View File

@@ -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} };
}
}