Skip to content
Snippets Groups Projects
Commit eaae1c26 authored by Leo Gordon's avatar Leo Gordon
Browse files

bugfix: make sure last roles are finalized whatever the caller to register_worker_death

parent 0e197426
No related branches found
No related tags found
No related merge requests found
...@@ -325,12 +325,17 @@ sub register_worker_death { ...@@ -325,12 +325,17 @@ sub register_worker_death {
return unless($worker); return unless($worker);
my $current_role = $worker->current_role;
my $worker_id = $worker->dbID; my $worker_id = $worker->dbID;
my $work_done = $worker->work_done; my $work_done = $worker->work_done;
my $cause_of_death = $worker->cause_of_death || 'UNKNOWN'; # make sure we do not attempt to insert a void my $cause_of_death = $worker->cause_of_death || 'UNKNOWN'; # make sure we do not attempt to insert a void
my $worker_died = $worker->died; my $worker_died = $worker->died;
my $current_role = $worker->current_role;
unless( $current_role ) {
$worker->current_role( $current_role = $self->db->get_RoleAdaptor->fetch_last_by_worker_id( $worker_id ) );
}
if( $current_role ) { if( $current_role ) {
$current_role->when_finished( $worker_died ); $current_role->when_finished( $worker_died );
$self->db->get_RoleAdaptor->finalize_role( $current_role ); $self->db->get_RoleAdaptor->finalize_role( $current_role );
...@@ -409,8 +414,6 @@ sub check_for_dead_workers { # scans the whole Valley for lost Workers (but i ...@@ -409,8 +414,6 @@ sub check_for_dead_workers { # scans the whole Valley for lost Workers (but i
warn "GarbageCollector:\t[$meadow_type Meadow:]\t".join(', ', map { "$_:$worker_status_counts{$meadow_type}{$_}" } keys %{$worker_status_counts{$meadow_type}})."\n\n"; warn "GarbageCollector:\t[$meadow_type Meadow:]\t".join(', ', map { "$_:$worker_status_counts{$meadow_type}{$_}" } keys %{$worker_status_counts{$meadow_type}})."\n\n";
} }
my $role_adaptor = $self->db->get_RoleAdaptor;
while(my ($meadow_type, $pid_to_lost_worker) = each %mt_and_pid_to_lost_worker) { while(my ($meadow_type, $pid_to_lost_worker) = each %mt_and_pid_to_lost_worker) {
my $this_meadow = $valley->available_meadow_hash->{$meadow_type}; my $this_meadow = $valley->available_meadow_hash->{$meadow_type};
...@@ -434,7 +437,6 @@ sub check_for_dead_workers { # scans the whole Valley for lost Workers (but i ...@@ -434,7 +437,6 @@ sub check_for_dead_workers { # scans the whole Valley for lost Workers (but i
while(my ($process_id, $worker) = each %$pid_to_lost_worker) { while(my ($process_id, $worker) = each %$pid_to_lost_worker) {
$worker->died( $report_entries->{$process_id}{'died'} ); $worker->died( $report_entries->{$process_id}{'died'} );
$worker->cause_of_death( $report_entries->{$process_id}{'cause_of_death'} ); $worker->cause_of_death( $report_entries->{$process_id}{'cause_of_death'} );
$worker->current_role( $role_adaptor->fetch_last_by_worker_id( $worker->dbID ) );
$self->register_worker_death( $worker ); $self->register_worker_death( $worker );
} }
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment