From 7e2f06f6600960e209c5bfe75153c505a69ed94e Mon Sep 17 00:00:00 2001 From: Leo Gordon <lg4@ebi.ac.uk> Date: Fri, 16 Nov 2012 13:44:01 +0000 Subject: [PATCH] pass complete valley-wide stats into schedule_workers without filtering --- modules/Bio/EnsEMBL/Hive/Queen.pm | 37 ++++++++++++++++--------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/modules/Bio/EnsEMBL/Hive/Queen.pm b/modules/Bio/EnsEMBL/Hive/Queen.pm index 9b77ba2e0..b78f92769 100644 --- a/modules/Bio/EnsEMBL/Hive/Queen.pm +++ b/modules/Bio/EnsEMBL/Hive/Queen.pm @@ -738,16 +738,19 @@ sub count_running_workers { =cut sub schedule_workers { - my ($self, $filter_analysis, $orig_pending_this_meadow_by_rc_name, $available_submit_limit) = @_; + my ($self, $filter_analysis, $submit_limit, $available_worker_slots_by_meadow_type, $pending_worker_counts_by_meadow_type_rc_name, $analysis_id2rc_name, $default_meadow_type) = @_; + + my $meadow_limit = $available_worker_slots_by_meadow_type->{ $default_meadow_type }; + my $orig_pending_this_meadow_by_rc_name = $pending_worker_counts_by_meadow_type_rc_name->{ $default_meadow_type }; + + my $available_submit_limit = ($submit_limit and $meadow_limit) + ? (($submit_limit<$meadow_limit) ? $submit_limit : $meadow_limit) + : (defined($submit_limit) ? $submit_limit : $meadow_limit); my @suitable_analyses = $filter_analysis ? ( $filter_analysis->stats ) : @{ $self->db->get_AnalysisStatsAdaptor->fetch_all_by_suitability_rc_id() }; - my $analysis_id2rc_id = $self->db->get_AnalysisAdaptor->fetch_HASHED_FROM_analysis_id_TO_resource_class_id(); - my $rc_id2name = $self->db->get_ResourceClassAdaptor->fetch_HASHED_FROM_resource_class_id_TO_name(); - # combined mapping - my %analysis_id2rc_name = map { $_ => $rc_id2name->{ $analysis_id2rc_id->{ $_ }} } keys %$analysis_id2rc_id; return {} unless(@suitable_analyses); @@ -789,7 +792,7 @@ sub schedule_workers { $available_load -= 1.0*$workers_this_analysis/$hive_capacity; } - my $curr_rc_name = $analysis_id2rc_name{ $analysis_stats->analysis_id }; + my $curr_rc_name = $analysis_id2rc_name->{ $analysis_stats->analysis_id }; if($pending_this_meadow_by_rc_name{ $curr_rc_name }) { # per-rc_name capping by pending processes, if available my $pending_this_analysis = ($pending_this_meadow_by_rc_name{ $curr_rc_name } < $workers_this_analysis) ? $pending_this_meadow_by_rc_name{ $curr_rc_name } : $workers_this_analysis; @@ -815,20 +818,18 @@ sub schedule_workers { sub schedule_workers_resync_if_necessary { my ($self, $valley, $analysis) = @_; - my $submit_limit = $valley->config_get('SubmitWorkersMax'); - my $meadow = $valley->get_current_meadow(); - - my $available_worker_slots_by_meadow_type = $valley->get_available_worker_slots_by_meadow_type(); - my $meadow_limit = $available_worker_slots_by_meadow_type->{ $meadow->type }; - + my $submit_limit = $valley->config_get('SubmitWorkersMax'); + my $available_worker_slots_by_meadow_type = $valley->get_available_worker_slots_by_meadow_type(); my ($pending_worker_counts_by_meadow_type_rc_name, $total_pending_all_meadows) = $valley->get_pending_worker_counts_by_meadow_type_rc_name(); - my $pending_this_meadow_by_rc_name = $pending_worker_counts_by_meadow_type_rc_name->{ $meadow->type }; - my $available_submit_limit = ($submit_limit and $meadow_limit) - ? (($submit_limit<$meadow_limit) ? $submit_limit : $meadow_limit) - : (defined($submit_limit) ? $submit_limit : $meadow_limit); + my $analysis_id2rc_id = $self->db->get_AnalysisAdaptor->fetch_HASHED_FROM_analysis_id_TO_resource_class_id(); + my $rc_id2name = $self->db->get_ResourceClassAdaptor->fetch_HASHED_FROM_resource_class_id_TO_name(); + # combined mapping: + my %analysis_id2rc_name = map { $_ => $rc_id2name->{ $analysis_id2rc_id->{ $_ }} } keys %$analysis_id2rc_id; + + my $default_meadow_type = $valley->get_current_meadow()->type; - my $workers_to_run_by_rc_name = $self->schedule_workers($analysis, $pending_this_meadow_by_rc_name, $available_submit_limit); + my $workers_to_run_by_rc_name = $self->schedule_workers($analysis, $submit_limit, $available_worker_slots_by_meadow_type, $pending_worker_counts_by_meadow_type_rc_name, \%analysis_id2rc_name, $default_meadow_type); unless( keys %$workers_to_run_by_rc_name or $self->get_hive_current_load() or $self->count_running_workers() ) { print "\nScheduler: nothing is running and nothing to do (according to analysis_stats) => executing garbage collection and sync\n" ; @@ -836,7 +837,7 @@ sub schedule_workers_resync_if_necessary { $self->check_for_dead_workers($valley, 1); $self->synchronize_hive($analysis); - $workers_to_run_by_rc_name = $self->schedule_workers($analysis, $pending_this_meadow_by_rc_name, $available_submit_limit); + $workers_to_run_by_rc_name = $self->schedule_workers($analysis, $submit_limit, $available_worker_slots_by_meadow_type, $pending_worker_counts_by_meadow_type_rc_name, \%analysis_id2rc_name, $default_meadow_type); } return $workers_to_run_by_rc_name; -- GitLab