Project

General

Profile

action #154735

Updated by livdywan 3 months ago

https://progress.opensuse.org/issues/154735 

 [error in gru journal] DBIx::Class::Storage::DBI::select_single(): Query returned more than one row 

 ## Observation 

 In osd gru journal I can find several of those messages: 
 ``` 
 Jan 31 14:47:54 openqa openqa-gru[20400]: DBIx::Class::Storage::DBI::select_single(): Query returned more than one row.    SQL that returns multiple rows is DEPRECATED for ->find and ->single at /usr/share/openqa/script/../lib/OpenQA/Schema/Result/ScheduledProducts.pm line 707 
 ``` 
 The code is getting one row of the WORKER_CLASS settings from a job and its parent and then compares them: 
 https://github.com/os-autoinst/openQA/blob/master/lib/OpenQA/Schema/Result/ScheduledProducts.pm#L707-L711 
 ``` 
                 $worker_class = $job->settings->find({key => 'WORKER_CLASS'}); 
                 $worker_class = $worker_class ? $worker_class->value : ''; 
             } 
             my $parent_worker_class 
               = $schema->resultset('JobSettings')->find({job_id => $parent, key => 'WORKER_CLASS'}); 
 ``` 
 Not sure how that's supposed to work as the WORKER_CLASSes are in multiple rows. I assume it "works" because the first row is usually consistent because postgres orders by id by default? 

 ## Suggestions 
 * Read documentation about DBIx::Class on https://metacpan.org/pod/DBIx::Class::ResultSet#METHODS about find/single/search. Understand what is going wrong here and adjust the database queries to return only one row or change to search and select one row afterwards. 
 * Adjust in https://github.com/os-autoinst/openQA/blob/master/lib/OpenQA/Schema/Result/ScheduledProducts.pm#L707-L711 
 * `$schema->resultset('JobSettings')->search({...}, {rows => 1})->first`

Back