Module: tools Branch: master Commit: 831aa5ce66000626f963c50ba37f1ddabb642d3c URL: https://source.winehq.org/git/tools.git/?a=commit;h=831aa5ce66000626f963c50b...
Author: Francois Gouget fgouget@codeweavers.com Date: Wed Jan 31 03:44:58 2018 +0100
testbot: Better wrap the database backend code.
ObjectModel::BackEnd no longer exposes its global active backends variable. Also provide a way to close all database connections so the code does not have to assume we only have the 'WineTestBot' one which would defeat the point of the BackEnd module.
Signed-off-by: Francois Gouget fgouget@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
testbot/bin/Engine.pl | 4 ++-- testbot/lib/ObjectModel/BackEnd.pm | 33 +++++++++++++++++++++++++-- testbot/lib/ObjectModel/DBIBackEnd.pm | 10 ++++---- testbot/lib/WineTestBot/VMs.pm | 4 ++-- testbot/lib/WineTestBot/WineTestBotObjects.pm | 4 ++-- 5 files changed, 42 insertions(+), 13 deletions(-)
diff --git a/testbot/bin/Engine.pl b/testbot/bin/Engine.pl index 827879c..d637564 100755 --- a/testbot/bin/Engine.pl +++ b/testbot/bin/Engine.pl @@ -309,8 +309,8 @@ sub HandleJobStatusChange($$$)
if ($OldStatus eq "running" && $NewStatus ne "running") { - # Make sure the child process does not inherit the database connection - $ActiveBackEnds{'WineTestBot'}->Close(); + # Make sure the child process does not inherit the database connections + CloseAllDBBackEnds();
my $Pid = fork; if (!defined $Pid) diff --git a/testbot/lib/ObjectModel/BackEnd.pm b/testbot/lib/ObjectModel/BackEnd.pm index 6c5c813..0bb48cf 100644 --- a/testbot/lib/ObjectModel/BackEnd.pm +++ b/testbot/lib/ObjectModel/BackEnd.pm @@ -30,11 +30,11 @@ should provide.
=cut
-use vars qw(@ISA @EXPORT %ActiveBackEnds); +use vars qw(@ISA @EXPORT);
require Exporter; @ISA = qw(Exporter); -@EXPORT = qw(%ActiveBackEnds); +@EXPORT = qw(&AddDBBackEnd &GetDBBackEnd &RemoveDBBackEnd &CloseAllDBBackEnds);
sub new($@) { @@ -51,4 +51,33 @@ sub _initialize($) #my ($self) = @_; }
+ +my %_ActiveBackEnds; + +sub AddDBBackEnd($$) +{ + my ($Name, $BackEnd) = @_; + $_ActiveBackEnds{$Name} = $BackEnd; +} + +sub GetDBBackEnd($) +{ + my ($Name) = @_; + return $_ActiveBackEnds{$Name}; +} + +sub RemoveDBBackEnd($) +{ + my ($Name) = @_; + delete $_ActiveBackEnds{$Name}; +} + +sub CloseAllDBBackEnds() +{ + foreach my $BackEnd (values %_ActiveBackEnds) + { + $BackEnd->Close(); + } +} + 1; diff --git a/testbot/lib/ObjectModel/DBIBackEnd.pm b/testbot/lib/ObjectModel/DBIBackEnd.pm index 565d4a8..d4b0777 100644 --- a/testbot/lib/ObjectModel/DBIBackEnd.pm +++ b/testbot/lib/ObjectModel/DBIBackEnd.pm @@ -604,12 +604,12 @@ sub Close($) } }
-sub UseDBIBackEnd($$@) +sub UseDBIBackEnd($$$$$$) { - my $class = shift; - my $DbSelector = shift; + my ($class, $DbSelector, $DbSource, $DbUser, $DbPassword, $DbArgs) = @_;
- $ObjectModel::BackEnd::ActiveBackEnds{$DbSelector} = $class->new(); - $ObjectModel::BackEnd::ActiveBackEnds{$DbSelector}->{ConnectArgs} = @_; + my $BackEnd = $class->new(); + $BackEnd->{ConnectArgs} = [$DbSource, $DbUser, $DbPassword, $DbArgs]; + AddDBBackEnd($DbSelector, $BackEnd); } 1; diff --git a/testbot/lib/WineTestBot/VMs.pm b/testbot/lib/WineTestBot/VMs.pm index 2ba6b4b..bb9a832 100644 --- a/testbot/lib/WineTestBot/VMs.pm +++ b/testbot/lib/WineTestBot/VMs.pm @@ -344,8 +344,8 @@ sub Run($$$$$) # So set ChildPid in the parent and synchronize with the child so it only # starts once this is done.
- # Make sure the child process will use its own database connection - $self->GetBackEnd()->Close(); + # Make sure the child process will use its own database connections + CloseAllDBBackEnds();
use Fcntl; my ($fd_read, $fd_write); diff --git a/testbot/lib/WineTestBot/WineTestBotObjects.pm b/testbot/lib/WineTestBot/WineTestBotObjects.pm index b46fa41..20ff6b1 100644 --- a/testbot/lib/WineTestBot/WineTestBotObjects.pm +++ b/testbot/lib/WineTestBot/WineTestBotObjects.pm @@ -37,7 +37,7 @@ require Exporter; sub GetBackEnd($) { #my ($self) = @_; - return $ActiveBackEnds{'WineTestBot'}; + return GetDBBackEnd('WineTestBot'); }
@@ -61,7 +61,7 @@ require Exporter; sub GetBackEnd($) { #my ($self) = @_; - return $ActiveBackEnds{'WineTestBot'}; + return GetDBBackEnd('WineTestBot'); }
1;