From 6d6edeb309496513812fbf6bc69c89b3f8fdbc68 Mon Sep 17 00:00:00 2001 From: Leo Gordon <lg4@ebi.ac.uk> Date: Wed, 14 May 2014 20:18:30 +0100 Subject: [PATCH] use higher level API instead of direct SQL to create a new Worker --- modules/Bio/EnsEMBL/Hive/Queen.pm | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/modules/Bio/EnsEMBL/Hive/Queen.pm b/modules/Bio/EnsEMBL/Hive/Queen.pm index 7123e9e8c..d0d159687 100644 --- a/modules/Bio/EnsEMBL/Hive/Queen.pm +++ b/modules/Bio/EnsEMBL/Hive/Queen.pm @@ -131,23 +131,27 @@ sub create_new_worker { $self->register_worker_death( $prev_worker_incarnation ); } + my $resource_class; + if( defined($resource_class_name) ) { - my $rc = $self->db->get_ResourceClassAdaptor->fetch_by_name($resource_class_name) + $resource_class = $self->db->get_ResourceClassAdaptor->fetch_by_name($resource_class_name) or die "resource_class with name='$resource_class_name' could not be fetched from the database"; - - $resource_class_id = $rc->dbID; + } elsif( defined($resource_class_id) ) { + $resource_class = $self->db->get_ResourceClassAdaptor->fetch_by_dbID($resource_class_id) + or die "resource_class with dbID='$resource_class_id' could not be fetched from the database"; } - my $sql = q{INSERT INTO worker (born, last_check_in, meadow_type, meadow_name, host, process_id, resource_class_id) - VALUES (CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, ?, ?, ?, ?, ?)}; - - my $sth = $self->prepare($sql); - $sth->execute($meadow_type, $meadow_name, $exec_host, $process_id, $resource_class_id); - my $worker_id = $self->dbc->db_handle->last_insert_id(undef, undef, 'worker', 'worker_id') - or die "Could not insert a new worker"; - $sth->finish; + my $worker = Bio::EnsEMBL::Hive::Worker->new( + 'meadow_type' => $meadow_type, + 'meadow_name' => $meadow_name, + 'host' => $exec_host, + 'process_id' => $process_id, + 'resource_class' => $resource_class, + ); + $self->store( $worker ); + my $worker_id = $worker->dbID; - my $worker = $self->fetch_by_dbID($worker_id) + $worker = $self->fetch_by_dbID( $worker_id ) # refresh the object to get the fields initialized at SQL level (timestamps in this case) or die "Could not fetch worker with dbID=$worker_id"; if($hive_log_dir or $worker_log_dir) { @@ -727,8 +731,7 @@ sub interval_workers_with_unknown_usage { my $sql_times = qq{ SELECT meadow_type, meadow_name, min(born), max(died), count(*) FROM worker w - LEFT JOIN worker_resource_usage u - USING(worker_id) + LEFT JOIN worker_resource_usage u USING(worker_id) WHERE u.worker_id IS NULL GROUP BY meadow_type, meadow_name }; -- GitLab