Merge pull request #388 from cswingler/check_undefined_skip_check_slave_lag_schema_change

Check undefined skip check slave lag schema change

Contirbutor signed corporate SLA as stated in https://github.com/percona/percona-toolkit/pull/230#issuecomment-308564024
This commit is contained in:
Sveta Smirnova
2023-11-12 23:31:30 +03:00
committed by GitHub
5 changed files with 55 additions and 19 deletions

View File

@@ -8944,11 +8944,15 @@ sub main {
for my $slave (@$slaves) {
my $is_skip = 0;
for my $slave_to_skip (@$slaves_to_skip) {
if ($slave->{dsn}->{h} eq $slave_to_skip->{h} && $slave->{dsn}->{P} eq $slave_to_skip->{P}) {
print "Skipping slave " . $slave->description() . "\n";
$is_skip = 1;
$slave->{dbh}->disconnect();
last;
if ( $slave->{dsn}->{h} eq $slave_to_skip->{h} ) {
my $skip_slave_port = defined($slave_to_skip->{P})
? $slave_to_skip->{P} : '3306';
if ( ($slave->{dsn}->{P} eq $skip_slave_port) ) {
print "Skipping slave " . $slave->description() . "\n";
$is_skip = 1;
$slave->{dbh}->disconnect();
last;
}
}
}
if (!$is_skip) {

View File

@@ -10653,11 +10653,13 @@ sub main {
for my $slave_to_skip (@$slaves_to_skip) {
my $h_eq_h = $slave->{dsn}->{h} eq $slave_to_skip->{h};
my $p_eq_p;
if (defined($slave->{dsn}->{P}) || defined($slave_to_skip->{P})) {
$p_eq_p = $slave->{dsn}->{P} eq $slave_to_skip->{P};
} else {
if (!defined($slave->{dsn}->{P}) && !defined($slave_to_skip->{P}) ) {
PTDEBUG && _d("Both port DSNs are undefined, setting p_eq_p to true");
$p_eq_p = 1;
} else {
my $skip_slave_port = defined($slave_to_skip->{P})
? $slave_to_skip->{P} : '3306';
$p_eq_p = $slave->{dsn}->{P} eq $skip_slave_port;
}
if ($h_eq_h && $p_eq_p) {
$found=1;

View File

@@ -696,21 +696,30 @@ SKIP: {
qr/$skipping_str/s,
"--skip-check-slave-lag",
);
}
# Use the same data than the previous test
$master_dbh->do("DROP DATABASE IF EXISTS test");
# Test for skip-check-slave-lag and empty replica port
# Use the same data than the previous test
$master_dbh->do("DROP DATABASE IF EXISTS test");
$sb->load_file('master', "$sample/bug-1613915.sql");
$output = output(
sub { pt_online_schema_change::main(@args, "$master_dsn,D=test,t=o1",
'--execute',
'--alter', "ADD COLUMN c INT",
'--chunk-size', '10',
'--skip-check-slave-lag', "h=127.0.0.1,P=".$sb->port_for('slave1'),
$sb->load_file('master', "$sample/bug-1613915.sql");
$output = output(
sub { pt_online_schema_change::main(@args, "$master_dsn,D=test,t=o1",
'--execute',
'--alter', "ADD COLUMN c INT",
'--chunk-size', '10',
'--skip-check-slave-lag', "h=127.0.0.1",
),
},
);
stderr => 1,
);
unlike(
$output,
qr/Use of uninitialized value.*/,
'No syntax error if port is missed in --skip-check-slave-lag DSN',
) or diag($output);
}
# #############################################################################
# Done.

View File

@@ -40,9 +40,13 @@ my $master_dsn = 'h=127.0.0.1,P=12345,u=msandbox,p=msandbox';
my $slave_dsn1 = 'h=127.0.0.1,P=12346,u=msandbox,p=msandbox';
my $slave_dsn2 = 'h=127.0.0.1,P=12347,u=msandbox,p=msandbox';
my $sample = "t/pt-online-schema-change/samples";
my ($orig_master_info_repository) = $slave_dbh1->selectrow_array(q{SELECT @@master_info_repository});
my ($orig_relay_log_info_repository) = $slave_dbh1->selectrow_array(q{SELECT @@relay_log_info_repository});
$slave_dbh1->do("stop slave");
$slave_dbh1->do("reset slave all");
$slave_dbh1->do("SET GLOBAL master_info_repository='TABLE'");
$slave_dbh1->do("SET GLOBAL relay_log_info_repository='TABLE'");
$slave_dbh1->do("CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=12345, MASTER_USER = 'msandbox', MASTER_PASSWORD='msandbox' FOR CHANNEL 'channel1';");
$slave_dbh1->do("start slave");
@@ -74,6 +78,8 @@ like(
$slave_dbh1->do('STOP SLAVE');
$master_dbh->do("RESET MASTER");
$slave_dbh1->do('RESET SLAVE ALL');
$slave_dbh1->do("SET GLOBAL master_info_repository='${orig_master_info_repository}'");
$slave_dbh1->do("SET GLOBAL relay_log_info_repository='${orig_relay_log_info_repository}'");
$slave_dbh1->do("CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=12345, MASTER_USER = 'msandbox', MASTER_PASSWORD='msandbox';");
$slave_dbh1->do('START SLAVE');

View File

@@ -221,6 +221,21 @@ like(
qr/$skipping_str/s,
"--skip-check-slave-lag",
);
# Test for skip-check-slave-lag and empty replica port
$output = output(
sub { pt_table_checksum::main(@args,
'--skip-check-slave-lag', "h=127.0.0.1",
),
},
stderr => 1
);
unlike(
$output,
qr/Use of uninitialized value.*/,
'No syntax error if port is missed in --skip-check-slave-lag DSN',
) or diag($output);
}
# #############################################################################
# Illegal division by zero at pt-table-checksum line 7950