mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-05-30 09:36:41 +00:00
Retry 3 times if database connection can not be established
As connection may fail due to the limit or error from database side, this patch add retry mechanism to reduce probability of failure. fix-issue: #2529
This commit is contained in:
parent
8dc51bcf38
commit
fdaeb5d761
@ -844,12 +844,28 @@ sub new
|
||||
}
|
||||
|
||||
my $oldumask = umask 0077;
|
||||
unless ($::XCAT_DBHS->{ $self->{connstring}, $self->{dbuser}, $self->{dbpass}, $self->{realautocommit} }) { #= $self->{tabname};
|
||||
$::XCAT_DBHS->{ $self->{connstring}, $self->{dbuser}, $self->{dbpass}, $self->{realautocommit} } =
|
||||
DBI->connect($self->{connstring}, $self->{dbuser}, $self->{dbpass}, { AutoCommit => $self->{realautocommit} });
|
||||
my $retry = 0;
|
||||
while (!$::XCAT_DBHS->{ $self->{connstring}, $self->{dbuser}, $self->{dbpass}, $self->{realautocommit} }) {
|
||||
eval {
|
||||
local $SIG{__WARN__} = sub {
|
||||
my $message = shift;
|
||||
if ($retry == 3 && $message) {
|
||||
xCAT::MsgUtils->message("S", "Failed to connect to ".$self->{tabname}." table after retrying $retry times: $message");
|
||||
}
|
||||
};
|
||||
$::XCAT_DBHS->{ $self->{connstring}, $self->{dbuser}, $self->{dbpass}, $self->{realautocommit} } =
|
||||
DBI->connect($self->{connstring}, $self->{dbuser}, $self->{dbpass}, { AutoCommit => $self->{realautocommit} });
|
||||
};
|
||||
if ($::XCAT_DBHS->{ $self->{connstring}, $self->{dbuser}, $self->{dbpass}, $self->{realautocommit} }) {
|
||||
last;
|
||||
} elsif ($retry == 3) {
|
||||
last;
|
||||
} else {
|
||||
sleep (2**$retry);
|
||||
}
|
||||
$retry++;
|
||||
}
|
||||
umask $oldumask;
|
||||
|
||||
$self->{dbh} = $::XCAT_DBHS->{ $self->{connstring}, $self->{dbuser}, $self->{dbpass}, $self->{realautocommit} };
|
||||
|
||||
#Store the Table object reference as afflicted by changes to the DBH
|
||||
|
Loading…
x
Reference in New Issue
Block a user