mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-08-10 21:40:14 +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:
@@ -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
|
||||
|
Reference in New Issue
Block a user