Merge pull request #1012 from nilnandan/PT-2014-pt-config-diff_does_not_honor_case_insensitivity_flag

PT-2014 - Updated MySQLConfigComparer.pm so now it can honor case insensitivity…
This commit is contained in:
Sveta Smirnova
2025-09-10 18:16:33 +03:00
committed by GitHub
5 changed files with 56 additions and 16 deletions

View File

@@ -3515,12 +3515,12 @@ use English qw(-no_match_vars);
use constant PTDEBUG => $ENV{PTDEBUG} || 0;
my %alt_val_for = (
ON => 1,
YES => 1,
TRUE => 1,
OFF => 0,
NO => 0,
FALSE => 0,
ON => 1,
YES => 1,
TRUE => 1,
OFF => 0,
NO => 0,
FALSE => 0,
);
sub new {
@@ -3637,7 +3637,8 @@ sub diff {
next CONFIG if $val0 == $valN;
}
else {
next CONFIG if $ignore_case
next CONFIG if $ignore_case
? lc($val0) eq lc($valN)
: $val0 eq $valN;
@@ -3699,7 +3700,7 @@ sub _normalize_value {
my ($val, $is_dir, $base_path) = @args{qw(value is_directory base_path)};
$val = defined $val ? $val : '';
$val = $alt_val_for{$val} if exists $alt_val_for{$val};
$val = $alt_val_for{uc($val)} if exists $alt_val_for{uc($val)};
if ( $val =~ m/,/ && !$is_dir && !$base_path) {
$val = join(',', sort(split(',', $val)));

View File

@@ -31,12 +31,12 @@ use constant PTDEBUG => $ENV{PTDEBUG} || 0;
# in SHOW VARS as var=TRUE. I.e. there's several synonyms for basic
# true (1) and false (0), so we normalize them to make comparisons easier.
my %alt_val_for = (
ON => 1,
YES => 1,
TRUE => 1,
OFF => 0,
NO => 0,
FALSE => 0,
ON => 1,
YES => 1,
TRUE => 1,
OFF => 0,
NO => 0,
FALSE => 0,
);
# Sub: new
@@ -202,7 +202,8 @@ sub diff {
next CONFIG if $val0 == $valN;
}
else {
next CONFIG if $ignore_case
next CONFIG if $ignore_case
? lc($val0) eq lc($valN)
: $val0 eq $valN;
@@ -293,7 +294,7 @@ sub _normalize_value {
my ($val, $is_dir, $base_path) = @args{qw(value is_directory base_path)};
$val = defined $val ? $val : '';
$val = $alt_val_for{$val} if exists $alt_val_for{$val};
$val = $alt_val_for{uc($val)} if exists $alt_val_for{uc($val)};
if ( $val =~ m/,/ && !$is_dir && !$base_path) {
$val = join(',', sort(split(',', $val)));

View File

@@ -449,6 +449,30 @@ is_deeply(
"..but can be turned off"
);
# ############################################################################
# https://perconadev.atlassian.net/browse/PT-2014
# pt-config-diff does not honor case insensitivity flag for boolean values
# ############################################################################
$c1 = new MySQLConfig(
file => "$trunk/$sample/pt-2014-1.txt",
TextResultSetParser => $trp,
);
$c2 = new MySQLConfig(
file => "$trunk/$sample/pt-2014-2.txt",
TextResultSetParser => $trp,
);
{
my $diff = $cc->diff(
configs => [$c1, $c2],
);
is_deeply(
$diff,
undef,
"Boolean values are the same regardless of the case"
) or diag(Dumper($diff));
}
# #############################################################################
# Done.
# #############################################################################

View File

@@ -0,0 +1,7 @@
[mysqld]
log_bin=1
gtid_mode=on
read_only=off
autocommit=no
binlog_format=mixed
skip_name_resolve=true

View File

@@ -0,0 +1,7 @@
[mysqld]
log_bin=on
gtid_mode=True
read_only=FALSE
autocommit=0
binlog_format=MIXED
skip_name_resolve=TRUE