Francois Gouget : testbot: Better wrap the database backend code.
Module: tools Branch: master Commit: 5eae1aa1c9875e783a52603c42d1e5d61a0d46bb URL: https://source.winehq.org/git/tools.git/?a=commit;h=5eae1aa1c9875e783a52603c... Author: Francois Gouget <fgouget(a)codeweavers.com> Date: Wed Jan 31 21:14:45 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(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- testbot/bin/Engine.pl | 4 ++-- testbot/lib/ObjectModel/BackEnd.pm | 33 +++++++++++++++++++++++++-- testbot/lib/ObjectModel/DBIBackEnd.pm | 16 ++++++------- testbot/lib/WineTestBot/VMs.pm | 4 ++-- testbot/lib/WineTestBot/WineTestBotObjects.pm | 4 ++-- 5 files changed, 45 insertions(+), 16 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); -(a)EXPORT = qw(%ActiveBackEnds); +(a)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..b5bb485 100644 --- a/testbot/lib/ObjectModel/DBIBackEnd.pm +++ b/testbot/lib/ObjectModel/DBIBackEnd.pm @@ -18,9 +18,6 @@ use strict; -use DBI; -use ObjectModel::BackEnd; - package ObjectModel::DBIBackEnd; =head1 NAME @@ -33,8 +30,11 @@ ObjectModel::BackEnd =cut +use DBI; use Time::Local; +use ObjectModel::BackEnd; + use vars qw(@ISA @EXPORT); require Exporter; @@ -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;
participants (1)
-
Alexandre Julliard