2
0
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:
chenglch 2017-07-28 13:53:34 +08:00
parent 8dc51bcf38
commit fdaeb5d761

View File

@ -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