my ($self, $db_registered_workers_from_all_meadows_deemed_alive) = @_;
my %reconciled_worker_statuses = ();
foreach my $meadow (@{ $self->get_available_meadow_list }) { # only go through the available meadows
my $db_registered_workers_this_meadow = $db_registered_workers_from_all_meadows_deemed_alive->{$meadow->type}{$meadow->cached_name};
my $involved_users = [keys %$db_registered_workers_this_meadow];
next unless @$involved_users;
my %meadow_seen_worker_status = map { ( $_->[0] => $_->[2] ) } @{ $meadow->status_of_all_our_workers( $involved_users ) };
my $worker_statuses_of_this_meadow = $reconciled_worker_statuses{ $meadow->signature } = {}; # manually vivify every Meadow's subhash
while(my ($meadow_user, $db_user_subhash) = each %$db_registered_workers_this_meadow) { # start the reconciliation from the DB view and check it against Meadow view
while(my ($worker_pid, $db_worker_status) = each %$db_user_subhash) {
my $combined_status = $meadow_seen_worker_status{$worker_pid}
// ( ($db_worker_status=~/^(?:SUBMITTED|DEAD)$/) ? $db_worker_status : 'LOST' );
push @{ $worker_statuses_of_this_meadow->{ $combined_status } }, $worker_pid;
}
}
}
return \%reconciled_worker_statuses;
}