Commit c95e0fa9 authored by Leo Gordon's avatar Leo Gordon
Browse files

perform worker counting centrally in the Queen

parent 31d8df4e
...@@ -136,19 +136,7 @@ sub refresh { ...@@ -136,19 +136,7 @@ sub refresh {
} }
sub get_running_worker_count { ################
my ($self, $stats) = @_;
my $sql = "SELECT count(*) FROM worker WHERE cause_of_death='' and analysis_id=?";
my $sth = $self->prepare($sql);
$sth->execute($stats->analysis_id);
my ($liveCount) = $sth->fetchrow_array();
$sth->finish;
return $liveCount;
}
# #
# STORE / UPDATE METHODS # STORE / UPDATE METHODS
# #
...@@ -209,7 +197,7 @@ sub update { ...@@ -209,7 +197,7 @@ sub update {
$sql .= ",failed_job_count=" . $stats->failed_job_count(); $sql .= ",failed_job_count=" . $stats->failed_job_count();
} }
$stats->num_running_workers( $self->get_running_worker_count($stats) ); $stats->num_running_workers( $self->db->get_Queen->count_running_workers( $stats->analysis_id() ) );
$sql .= ",num_running_workers=" . $stats->num_running_workers(); $sql .= ",num_running_workers=" . $stats->num_running_workers();
$sql .= ",num_required_workers=" . $stats->num_required_workers(); $sql .= ",num_required_workers=" . $stats->num_required_workers();
......
...@@ -528,7 +528,7 @@ sub synchronize_AnalysisStats { ...@@ -528,7 +528,7 @@ sub synchronize_AnalysisStats {
# adjust_stats_for_living_workers: # adjust_stats_for_living_workers:
if($hive_capacity > 0) { if($hive_capacity > 0) {
my $capacity_allows_to_add = $hive_capacity - $analysis_stats_adaptor->get_running_worker_count($analysisStats); my $capacity_allows_to_add = $hive_capacity - $self->count_running_workers( $analysisStats->analysis_id() );
if($capacity_allows_to_add < $required_workers ) { if($capacity_allows_to_add < $required_workers ) {
$required_workers = (0 < $capacity_allows_to_add) ? $capacity_allows_to_add : 0; $required_workers = (0 < $capacity_allows_to_add) ? $capacity_allows_to_add : 0;
...@@ -564,7 +564,7 @@ sub synchronize_AnalysisStats { ...@@ -564,7 +564,7 @@ sub synchronize_AnalysisStats {
# adjust_stats_for_living_workers: # adjust_stats_for_living_workers:
if($hive_capacity > 0) { if($hive_capacity > 0) {
my $capacity_allows_to_add = $hive_capacity - $analysis_stats_adaptor->get_running_worker_count($analysisStats); my $capacity_allows_to_add = $hive_capacity - $self->count_running_workers( $analysisStats->analysis_id() );
if($capacity_allows_to_add < $required_workers ) { if($capacity_allows_to_add < $required_workers ) {
$required_workers = (0 < $capacity_allows_to_add) ? $capacity_allows_to_add : 0; $required_workers = (0 < $capacity_allows_to_add) ? $capacity_allows_to_add : 0;
...@@ -639,18 +639,21 @@ sub get_hive_current_load { ...@@ -639,18 +639,21 @@ sub get_hive_current_load {
} }
sub get_num_running_workers { sub count_running_workers {
my $self = shift; my ($self, $analysis_id) = @_;
my $sql = "SELECT count(*) FROM worker WHERE cause_of_death =''";
my $sth = $self->prepare($sql); my $sql = "SELECT count(*) FROM worker WHERE cause_of_death =''"
$sth->execute(); . ($analysis_id ? " AND analysis_id='$analysis_id'" : '');
(my $runningCount)=$sth->fetchrow_array();
$sth->finish; my $sth = $self->prepare($sql);
$runningCount=0 unless($runningCount); $sth->execute();
print("current hive num_running_workers = $runningCount\n"); (my $running_workers_count)=$sth->fetchrow_array();
return $runningCount; $sth->finish();
return $running_workers_count || 0;
} }
sub enter_status { sub enter_status {
my ($self, $worker, $status) = @_; my ($self, $worker, $status) = @_;
...@@ -722,14 +725,13 @@ sub get_num_needed_workers { ...@@ -722,14 +725,13 @@ sub get_num_needed_workers {
return ($total_workers, \%rc2workers); return ($total_workers, \%rc2workers);
} }
sub get_needed_workers_resync_if_necessary { sub get_needed_workers_resync_if_necessary {
my ($self, $meadow, $analysis) = @_; my ($self, $meadow, $analysis) = @_;
my $load = $self->get_hive_current_load();
my $running_count = $self->get_num_running_workers();
my ($needed_count, $rc_hash) = $self->get_num_needed_workers($analysis); my ($needed_count, $rc_hash) = $self->get_num_needed_workers($analysis);
if($load==0 and $needed_count==0 and $running_count==0) { unless( $needed_count or $self->get_hive_current_load() or $self->count_running_workers() ) {
print "*** nothing is running and nothing to do (according to analysis_stats) => perform a hard resync\n" ; print "*** nothing is running and nothing to do (according to analysis_stats) => perform a hard resync\n" ;
$self->synchronize_hive($analysis); $self->synchronize_hive($analysis);
...@@ -741,6 +743,7 @@ sub get_needed_workers_resync_if_necessary { ...@@ -741,6 +743,7 @@ sub get_needed_workers_resync_if_necessary {
return ($needed_count, $rc_hash); return ($needed_count, $rc_hash);
} }
sub get_remaining_jobs_show_hive_progress { sub get_remaining_jobs_show_hive_progress {
my $self = shift; my $self = shift;
my $sql = "SELECT sum(done_job_count), sum(failed_job_count), sum(total_job_count), ". my $sql = "SELECT sum(done_job_count), sum(failed_job_count), sum(total_job_count), ".
......
Markdown is supported
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