PT-2340 - Support MySQL 8.4

- Implemented functions get_replica_name and get_source_name in lib/MasterSlave.pm I did not implement similar functions in other places, because they set other variables as well, not only replica_name or source_name.
This commit is contained in:
Sveta Smirnova
2024-11-13 02:04:39 +03:00
parent a1093ff12c
commit bb66ab0845
14 changed files with 281 additions and 620 deletions

View File

@@ -3999,13 +3999,8 @@ sub get_connected_replicas {
sub is_source_of {
my ( $self, $source, $replica ) = @_;
my $replica_version = VersionParser->new($replica);
my $source_name = 'source';
my $source_port = 'source_port';
if ( $replica_version lt '8.1' || $replica_version->flavor() =~ m/maria/ ) {
$source_name = 'master';
$source_port = 'master_port';
}
my $source_name = get_source_name($replica);
my $source_port = "${source_name}_port";
my $source_status = $self->get_source_status($source)
or die "The server specified as a source is not a source";
@@ -4064,11 +4059,7 @@ sub get_source_dsn {
sub get_replica_status {
my ( $self, $dbh ) = @_;
my $server_version = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $server_version lt '8.1' || $server_version->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
if ( !$self->{not_a_replica}->{$dbh} ) {
my $sth = $self->{sths}->{$dbh}->{REPLICA_STATUS}
@@ -4179,11 +4170,8 @@ sub wait_for_source {
error =>'Wait for source: this is a multi-source replica but "channel" was not specified on the command line',
};
}
my $source_name = get_source_name($replica_dbh);
my $vp = VersionParser->new($replica_dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $channel_sql = $vp > '5.6' && $self->{channel} ? ", '$self->{channel}'" : '';
my $sql = "SELECT ${source_name}_POS_WAIT('$source_status->{file}', $source_status->{position}, $timeout $channel_sql)";
PTDEBUG && _d($replica_dbh, $sql);
@@ -4207,11 +4195,8 @@ sub wait_for_source {
sub stop_replica {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sth = $self->{sths}->{$dbh}->{STOP_REPLICA}
||= $dbh->prepare("STOP ${replica_name}");
PTDEBUG && _d($dbh, $sth->{Statement});
@@ -4221,13 +4206,8 @@ sub stop_replica {
sub start_replica {
my ( $self, $dbh, $pos ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
$replica_name = 'slave';
}
my $source_name = get_source_name($dbh);
my $replica_name = get_replica_name($dbh);
if ( $pos ) {
my $sql = "START ${replica_name} UNTIL ${source_name}_LOG_FILE='$pos->{file}', "
@@ -4271,11 +4251,7 @@ sub catchup_to_source {
if ( !defined $result->{result} ) {
$replica_status = $self->get_replica_status($replica);
my $vp = VersionParser->new($replica);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($replica);
if ( !$self->replica_is_running($replica_status, $replica_name) ) {
PTDEBUG && _d('Source position:',
@@ -4320,17 +4296,9 @@ sub catchup_to_same_pos {
$s1_pos = $self->repl_posn($s1_status);
$s2_pos = $self->repl_posn($s2_status);
my $vp1 = VersionParser->new($s1_dbh);
my $replica1_name = 'replica';
if ( $vp1 lt '8.1' || $vp1->flavor() =~ m/maria/ ) {
$replica1_name = 'slave';
}
my $replica1_name = get_replica_name($s1_dbh);
my $vp2 = VersionParser->new($s2_dbh);
my $replica2_name = 'replica';
if ( $vp2 lt '8.1' || $vp2->flavor() =~ m/maria/ ) {
$replica2_name = 'slave';
}
my $replica2_name = get_replica_name($s2_dbh);
if ( $self->replica_is_running($s1_status, $replica1_name)
|| $self->replica_is_running($s2_status, $replica2_name)
@@ -4349,11 +4317,7 @@ sub replica_is_running {
sub has_replica_updates {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sql = qq{SHOW VARIABLES LIKE 'log_${replica_name}_updates'};
PTDEBUG && _d($dbh, $sql);
@@ -4386,11 +4350,7 @@ sub repl_posn {
sub get_replica_lag {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $source_name = get_source_name($dbh);
my $stat = $self->get_replica_status($dbh);
return unless $stat; # server is not a replica
@@ -4490,11 +4450,7 @@ sub get_replication_filters {
}
my ($dbh) = @args{@required_args};
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my %filters = ();
@@ -4604,6 +4560,18 @@ sub get_cxn_from_dsn_table {
return \@cxn;
}
sub get_source_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'master' : 'source';
}
sub get_replica_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'slave' : 'replica';
}
sub _d {
my ($package, undef, $line) = caller 0;
@_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; }

View File

@@ -460,13 +460,8 @@ sub get_connected_replicas {
sub is_source_of {
my ( $self, $source, $replica ) = @_;
my $replica_version = VersionParser->new($replica);
my $source_name = 'source';
my $source_port = 'source_port';
if ( $replica_version lt '8.1' || $replica_version->flavor() =~ m/maria/ ) {
$source_name = 'master';
$source_port = 'master_port';
}
my $source_name = get_source_name($replica);
my $source_port = "${source_name}_port";
my $source_status = $self->get_source_status($source)
or die "The server specified as a source is not a source";
@@ -525,11 +520,7 @@ sub get_source_dsn {
sub get_replica_status {
my ( $self, $dbh ) = @_;
my $server_version = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $server_version lt '8.1' || $server_version->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
if ( !$self->{not_a_replica}->{$dbh} ) {
my $sth = $self->{sths}->{$dbh}->{REPLICA_STATUS}
@@ -640,11 +631,8 @@ sub wait_for_source {
error =>'Wait for source: this is a multi-source replica but "channel" was not specified on the command line',
};
}
my $source_name = get_source_name($replica_dbh);
my $vp = VersionParser->new($replica_dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $channel_sql = $vp > '5.6' && $self->{channel} ? ", '$self->{channel}'" : '';
my $sql = "SELECT ${source_name}_POS_WAIT('$source_status->{file}', $source_status->{position}, $timeout $channel_sql)";
PTDEBUG && _d($replica_dbh, $sql);
@@ -668,11 +656,8 @@ sub wait_for_source {
sub stop_replica {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sth = $self->{sths}->{$dbh}->{STOP_REPLICA}
||= $dbh->prepare("STOP ${replica_name}");
PTDEBUG && _d($dbh, $sth->{Statement});
@@ -682,13 +667,8 @@ sub stop_replica {
sub start_replica {
my ( $self, $dbh, $pos ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
$replica_name = 'slave';
}
my $source_name = get_source_name($dbh);
my $replica_name = get_replica_name($dbh);
if ( $pos ) {
my $sql = "START ${replica_name} UNTIL ${source_name}_LOG_FILE='$pos->{file}', "
@@ -732,11 +712,7 @@ sub catchup_to_source {
if ( !defined $result->{result} ) {
$replica_status = $self->get_replica_status($replica);
my $vp = VersionParser->new($replica);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($replica);
if ( !$self->replica_is_running($replica_status, $replica_name) ) {
PTDEBUG && _d('Source position:',
@@ -781,17 +757,9 @@ sub catchup_to_same_pos {
$s1_pos = $self->repl_posn($s1_status);
$s2_pos = $self->repl_posn($s2_status);
my $vp1 = VersionParser->new($s1_dbh);
my $replica1_name = 'replica';
if ( $vp1 lt '8.1' || $vp1->flavor() =~ m/maria/ ) {
$replica1_name = 'slave';
}
my $replica1_name = get_replica_name($s1_dbh);
my $vp2 = VersionParser->new($s2_dbh);
my $replica2_name = 'replica';
if ( $vp2 lt '8.1' || $vp2->flavor() =~ m/maria/ ) {
$replica2_name = 'slave';
}
my $replica2_name = get_replica_name($s2_dbh);
if ( $self->replica_is_running($s1_status, $replica1_name)
|| $self->replica_is_running($s2_status, $replica2_name)
@@ -810,11 +778,7 @@ sub replica_is_running {
sub has_replica_updates {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sql = qq{SHOW VARIABLES LIKE 'log_${replica_name}_updates'};
PTDEBUG && _d($dbh, $sql);
@@ -847,11 +811,7 @@ sub repl_posn {
sub get_replica_lag {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $source_name = get_source_name($dbh);
my $stat = $self->get_replica_status($dbh);
return unless $stat; # server is not a replica
@@ -951,11 +911,7 @@ sub get_replication_filters {
}
my ($dbh) = @args{@required_args};
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my %filters = ();
@@ -1065,6 +1021,18 @@ sub get_cxn_from_dsn_table {
return \@cxn;
}
sub get_source_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'master' : 'source';
}
sub get_replica_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'slave' : 'replica';
}
sub _d {
my ($package, undef, $line) = caller 0;
@_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; }

View File

@@ -4276,13 +4276,8 @@ sub get_connected_replicas {
sub is_source_of {
my ( $self, $source, $replica ) = @_;
my $replica_version = VersionParser->new($replica);
my $source_name = 'source';
my $source_port = 'source_port';
if ( $replica_version lt '8.1' || $replica_version->flavor() =~ m/maria/ ) {
$source_name = 'master';
$source_port = 'master_port';
}
my $source_name = get_source_name($replica);
my $source_port = "${source_name}_port";
my $source_status = $self->get_source_status($source)
or die "The server specified as a source is not a source";
@@ -4341,11 +4336,7 @@ sub get_source_dsn {
sub get_replica_status {
my ( $self, $dbh ) = @_;
my $server_version = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $server_version lt '8.1' || $server_version->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
if ( !$self->{not_a_replica}->{$dbh} ) {
my $sth = $self->{sths}->{$dbh}->{REPLICA_STATUS}
@@ -4456,11 +4447,8 @@ sub wait_for_source {
error =>'Wait for source: this is a multi-source replica but "channel" was not specified on the command line',
};
}
my $source_name = get_source_name($replica_dbh);
my $vp = VersionParser->new($replica_dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $channel_sql = $vp > '5.6' && $self->{channel} ? ", '$self->{channel}'" : '';
my $sql = "SELECT ${source_name}_POS_WAIT('$source_status->{file}', $source_status->{position}, $timeout $channel_sql)";
PTDEBUG && _d($replica_dbh, $sql);
@@ -4484,11 +4472,8 @@ sub wait_for_source {
sub stop_replica {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sth = $self->{sths}->{$dbh}->{STOP_REPLICA}
||= $dbh->prepare("STOP ${replica_name}");
PTDEBUG && _d($dbh, $sth->{Statement});
@@ -4498,13 +4483,8 @@ sub stop_replica {
sub start_replica {
my ( $self, $dbh, $pos ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
$replica_name = 'slave';
}
my $source_name = get_source_name($dbh);
my $replica_name = get_replica_name($dbh);
if ( $pos ) {
my $sql = "START ${replica_name} UNTIL ${source_name}_LOG_FILE='$pos->{file}', "
@@ -4548,11 +4528,7 @@ sub catchup_to_source {
if ( !defined $result->{result} ) {
$replica_status = $self->get_replica_status($replica);
my $vp = VersionParser->new($replica);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($replica);
if ( !$self->replica_is_running($replica_status, $replica_name) ) {
PTDEBUG && _d('Source position:',
@@ -4597,17 +4573,9 @@ sub catchup_to_same_pos {
$s1_pos = $self->repl_posn($s1_status);
$s2_pos = $self->repl_posn($s2_status);
my $vp1 = VersionParser->new($s1_dbh);
my $replica1_name = 'replica';
if ( $vp1 lt '8.1' || $vp1->flavor() =~ m/maria/ ) {
$replica1_name = 'slave';
}
my $replica1_name = get_replica_name($s1_dbh);
my $vp2 = VersionParser->new($s2_dbh);
my $replica2_name = 'replica';
if ( $vp2 lt '8.1' || $vp2->flavor() =~ m/maria/ ) {
$replica2_name = 'slave';
}
my $replica2_name = get_replica_name($s2_dbh);
if ( $self->replica_is_running($s1_status, $replica1_name)
|| $self->replica_is_running($s2_status, $replica2_name)
@@ -4626,11 +4594,7 @@ sub replica_is_running {
sub has_replica_updates {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sql = qq{SHOW VARIABLES LIKE 'log_${replica_name}_updates'};
PTDEBUG && _d($dbh, $sql);
@@ -4663,11 +4627,7 @@ sub repl_posn {
sub get_replica_lag {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $source_name = get_source_name($dbh);
my $stat = $self->get_replica_status($dbh);
return unless $stat; # server is not a replica
@@ -4767,11 +4727,7 @@ sub get_replication_filters {
}
my ($dbh) = @args{@required_args};
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my %filters = ();
@@ -4881,6 +4837,18 @@ sub get_cxn_from_dsn_table {
return \@cxn;
}
sub get_source_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'master' : 'source';
}
sub get_replica_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'slave' : 'replica';
}
sub _d {
my ($package, undef, $line) = caller 0;
@_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; }

View File

@@ -4564,13 +4564,8 @@ sub get_connected_replicas {
sub is_source_of {
my ( $self, $source, $replica ) = @_;
my $replica_version = VersionParser->new($replica);
my $source_name = 'source';
my $source_port = 'source_port';
if ( $replica_version lt '8.1' || $replica_version->flavor() =~ m/maria/ ) {
$source_name = 'master';
$source_port = 'master_port';
}
my $source_name = get_source_name($replica);
my $source_port = "${source_name}_port";
my $source_status = $self->get_source_status($source)
or die "The server specified as a source is not a source";
@@ -4629,11 +4624,7 @@ sub get_source_dsn {
sub get_replica_status {
my ( $self, $dbh ) = @_;
my $server_version = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $server_version lt '8.1' || $server_version->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
if ( !$self->{not_a_replica}->{$dbh} ) {
my $sth = $self->{sths}->{$dbh}->{REPLICA_STATUS}
@@ -4744,11 +4735,8 @@ sub wait_for_source {
error =>'Wait for source: this is a multi-source replica but "channel" was not specified on the command line',
};
}
my $source_name = get_source_name($replica_dbh);
my $vp = VersionParser->new($replica_dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $channel_sql = $vp > '5.6' && $self->{channel} ? ", '$self->{channel}'" : '';
my $sql = "SELECT ${source_name}_POS_WAIT('$source_status->{file}', $source_status->{position}, $timeout $channel_sql)";
PTDEBUG && _d($replica_dbh, $sql);
@@ -4772,11 +4760,8 @@ sub wait_for_source {
sub stop_replica {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sth = $self->{sths}->{$dbh}->{STOP_REPLICA}
||= $dbh->prepare("STOP ${replica_name}");
PTDEBUG && _d($dbh, $sth->{Statement});
@@ -4786,13 +4771,8 @@ sub stop_replica {
sub start_replica {
my ( $self, $dbh, $pos ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
$replica_name = 'slave';
}
my $source_name = get_source_name($dbh);
my $replica_name = get_replica_name($dbh);
if ( $pos ) {
my $sql = "START ${replica_name} UNTIL ${source_name}_LOG_FILE='$pos->{file}', "
@@ -4836,11 +4816,7 @@ sub catchup_to_source {
if ( !defined $result->{result} ) {
$replica_status = $self->get_replica_status($replica);
my $vp = VersionParser->new($replica);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($replica);
if ( !$self->replica_is_running($replica_status, $replica_name) ) {
PTDEBUG && _d('Source position:',
@@ -4885,17 +4861,9 @@ sub catchup_to_same_pos {
$s1_pos = $self->repl_posn($s1_status);
$s2_pos = $self->repl_posn($s2_status);
my $vp1 = VersionParser->new($s1_dbh);
my $replica1_name = 'replica';
if ( $vp1 lt '8.1' || $vp1->flavor() =~ m/maria/ ) {
$replica1_name = 'slave';
}
my $replica1_name = get_replica_name($s1_dbh);
my $vp2 = VersionParser->new($s2_dbh);
my $replica2_name = 'replica';
if ( $vp2 lt '8.1' || $vp2->flavor() =~ m/maria/ ) {
$replica2_name = 'slave';
}
my $replica2_name = get_replica_name($s2_dbh);
if ( $self->replica_is_running($s1_status, $replica1_name)
|| $self->replica_is_running($s2_status, $replica2_name)
@@ -4914,11 +4882,7 @@ sub replica_is_running {
sub has_replica_updates {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sql = qq{SHOW VARIABLES LIKE 'log_${replica_name}_updates'};
PTDEBUG && _d($dbh, $sql);
@@ -4951,11 +4915,7 @@ sub repl_posn {
sub get_replica_lag {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $source_name = get_source_name($dbh);
my $stat = $self->get_replica_status($dbh);
return unless $stat; # server is not a replica
@@ -5055,11 +5015,7 @@ sub get_replication_filters {
}
my ($dbh) = @args{@required_args};
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my %filters = ();
@@ -5169,6 +5125,18 @@ sub get_cxn_from_dsn_table {
return \@cxn;
}
sub get_source_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'master' : 'source';
}
sub get_replica_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'slave' : 'replica';
}
sub _d {
my ($package, undef, $line) = caller 0;
@_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; }
@@ -9249,11 +9217,7 @@ sub main {
### first ever call only: do not tolerate connection errors
$slaves = $get_replicas_cb->('intolerant');
my $vp = VersionParser->new($cxn->dbh());
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = MasterSlave::get_replica_name($cxn->dbh());
PTDEBUG && _d(scalar @$slaves, "${replica_name}s found");
if ( scalar @$slaves ) {

View File

@@ -10870,13 +10870,8 @@ sub get_connected_replicas {
sub is_source_of {
my ( $self, $source, $replica ) = @_;
my $replica_version = VersionParser->new($replica);
my $source_name = 'source';
my $source_port = 'source_port';
if ( $replica_version lt '8.1' || $replica_version->flavor() =~ m/maria/ ) {
$source_name = 'master';
$source_port = 'master_port';
}
my $source_name = get_source_name($replica);
my $source_port = "${source_name}_port";
my $source_status = $self->get_source_status($source)
or die "The server specified as a source is not a source";
@@ -10935,11 +10930,7 @@ sub get_source_dsn {
sub get_replica_status {
my ( $self, $dbh ) = @_;
my $server_version = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $server_version lt '8.1' || $server_version->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
if ( !$self->{not_a_replica}->{$dbh} ) {
my $sth = $self->{sths}->{$dbh}->{REPLICA_STATUS}
@@ -11050,11 +11041,8 @@ sub wait_for_source {
error =>'Wait for source: this is a multi-source replica but "channel" was not specified on the command line',
};
}
my $source_name = get_source_name($replica_dbh);
my $vp = VersionParser->new($replica_dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $channel_sql = $vp > '5.6' && $self->{channel} ? ", '$self->{channel}'" : '';
my $sql = "SELECT ${source_name}_POS_WAIT('$source_status->{file}', $source_status->{position}, $timeout $channel_sql)";
PTDEBUG && _d($replica_dbh, $sql);
@@ -11078,11 +11066,8 @@ sub wait_for_source {
sub stop_replica {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sth = $self->{sths}->{$dbh}->{STOP_REPLICA}
||= $dbh->prepare("STOP ${replica_name}");
PTDEBUG && _d($dbh, $sth->{Statement});
@@ -11092,13 +11077,8 @@ sub stop_replica {
sub start_replica {
my ( $self, $dbh, $pos ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
$replica_name = 'slave';
}
my $source_name = get_source_name($dbh);
my $replica_name = get_replica_name($dbh);
if ( $pos ) {
my $sql = "START ${replica_name} UNTIL ${source_name}_LOG_FILE='$pos->{file}', "
@@ -11142,11 +11122,7 @@ sub catchup_to_source {
if ( !defined $result->{result} ) {
$replica_status = $self->get_replica_status($replica);
my $vp = VersionParser->new($replica);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($replica);
if ( !$self->replica_is_running($replica_status, $replica_name) ) {
PTDEBUG && _d('Source position:',
@@ -11191,17 +11167,9 @@ sub catchup_to_same_pos {
$s1_pos = $self->repl_posn($s1_status);
$s2_pos = $self->repl_posn($s2_status);
my $vp1 = VersionParser->new($s1_dbh);
my $replica1_name = 'replica';
if ( $vp1 lt '8.1' || $vp1->flavor() =~ m/maria/ ) {
$replica1_name = 'slave';
}
my $replica1_name = get_replica_name($s1_dbh);
my $vp2 = VersionParser->new($s2_dbh);
my $replica2_name = 'replica';
if ( $vp2 lt '8.1' || $vp2->flavor() =~ m/maria/ ) {
$replica2_name = 'slave';
}
my $replica2_name = get_replica_name($s2_dbh);
if ( $self->replica_is_running($s1_status, $replica1_name)
|| $self->replica_is_running($s2_status, $replica2_name)
@@ -11220,11 +11188,7 @@ sub replica_is_running {
sub has_replica_updates {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sql = qq{SHOW VARIABLES LIKE 'log_${replica_name}_updates'};
PTDEBUG && _d($dbh, $sql);
@@ -11257,11 +11221,7 @@ sub repl_posn {
sub get_replica_lag {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $source_name = get_source_name($dbh);
my $stat = $self->get_replica_status($dbh);
return unless $stat; # server is not a replica
@@ -11361,11 +11321,7 @@ sub get_replication_filters {
}
my ($dbh) = @args{@required_args};
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my %filters = ();
@@ -11475,6 +11431,18 @@ sub get_cxn_from_dsn_table {
return \@cxn;
}
sub get_source_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'master' : 'source';
}
sub get_replica_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'slave' : 'replica';
}
sub _d {
my ($package, undef, $line) = caller 0;
@_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; }

View File

@@ -2601,13 +2601,8 @@ sub get_connected_replicas {
sub is_source_of {
my ( $self, $source, $replica ) = @_;
my $replica_version = VersionParser->new($replica);
my $source_name = 'source';
my $source_port = 'source_port';
if ( $replica_version lt '8.1' || $replica_version->flavor() =~ m/maria/ ) {
$source_name = 'master';
$source_port = 'master_port';
}
my $source_name = get_source_name($replica);
my $source_port = "${source_name}_port";
my $source_status = $self->get_source_status($source)
or die "The server specified as a source is not a source";
@@ -2666,11 +2661,7 @@ sub get_source_dsn {
sub get_replica_status {
my ( $self, $dbh ) = @_;
my $server_version = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $server_version lt '8.1' || $server_version->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
if ( !$self->{not_a_replica}->{$dbh} ) {
my $sth = $self->{sths}->{$dbh}->{REPLICA_STATUS}
@@ -2781,11 +2772,8 @@ sub wait_for_source {
error =>'Wait for source: this is a multi-source replica but "channel" was not specified on the command line',
};
}
my $source_name = get_source_name($replica_dbh);
my $vp = VersionParser->new($replica_dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $channel_sql = $vp > '5.6' && $self->{channel} ? ", '$self->{channel}'" : '';
my $sql = "SELECT ${source_name}_POS_WAIT('$source_status->{file}', $source_status->{position}, $timeout $channel_sql)";
PTDEBUG && _d($replica_dbh, $sql);
@@ -2809,11 +2797,8 @@ sub wait_for_source {
sub stop_replica {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sth = $self->{sths}->{$dbh}->{STOP_REPLICA}
||= $dbh->prepare("STOP ${replica_name}");
PTDEBUG && _d($dbh, $sth->{Statement});
@@ -2823,13 +2808,8 @@ sub stop_replica {
sub start_replica {
my ( $self, $dbh, $pos ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
$replica_name = 'slave';
}
my $source_name = get_source_name($dbh);
my $replica_name = get_replica_name($dbh);
if ( $pos ) {
my $sql = "START ${replica_name} UNTIL ${source_name}_LOG_FILE='$pos->{file}', "
@@ -2873,11 +2853,7 @@ sub catchup_to_source {
if ( !defined $result->{result} ) {
$replica_status = $self->get_replica_status($replica);
my $vp = VersionParser->new($replica);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($replica);
if ( !$self->replica_is_running($replica_status, $replica_name) ) {
PTDEBUG && _d('Source position:',
@@ -2922,17 +2898,9 @@ sub catchup_to_same_pos {
$s1_pos = $self->repl_posn($s1_status);
$s2_pos = $self->repl_posn($s2_status);
my $vp1 = VersionParser->new($s1_dbh);
my $replica1_name = 'replica';
if ( $vp1 lt '8.1' || $vp1->flavor() =~ m/maria/ ) {
$replica1_name = 'slave';
}
my $replica1_name = get_replica_name($s1_dbh);
my $vp2 = VersionParser->new($s2_dbh);
my $replica2_name = 'replica';
if ( $vp2 lt '8.1' || $vp2->flavor() =~ m/maria/ ) {
$replica2_name = 'slave';
}
my $replica2_name = get_replica_name($s2_dbh);
if ( $self->replica_is_running($s1_status, $replica1_name)
|| $self->replica_is_running($s2_status, $replica2_name)
@@ -2951,11 +2919,7 @@ sub replica_is_running {
sub has_replica_updates {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sql = qq{SHOW VARIABLES LIKE 'log_${replica_name}_updates'};
PTDEBUG && _d($dbh, $sql);
@@ -2988,11 +2952,7 @@ sub repl_posn {
sub get_replica_lag {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $source_name = get_source_name($dbh);
my $stat = $self->get_replica_status($dbh);
return unless $stat; # server is not a replica
@@ -3092,11 +3052,7 @@ sub get_replication_filters {
}
my ($dbh) = @args{@required_args};
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my %filters = ();
@@ -3206,6 +3162,18 @@ sub get_cxn_from_dsn_table {
return \@cxn;
}
sub get_source_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'master' : 'source';
}
sub get_replica_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'slave' : 'replica';
}
sub _d {
my ($package, undef, $line) = caller 0;
@_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; }
@@ -4249,13 +4217,8 @@ sub print_node_summary {
}
$dbh->{FetchHashKeyName} = 'NAME_lc';
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
$replica_name = 'slave';
}
my $source_name = MasterSlave::get_source_name($dbh);
my $replica_name = MasterSlave::get_replica_name($dbh);
# Build the summary line by line, then join and print the lines.
my @lines;

View File

@@ -3012,13 +3012,8 @@ sub get_connected_replicas {
sub is_source_of {
my ( $self, $source, $replica ) = @_;
my $replica_version = VersionParser->new($replica);
my $source_name = 'source';
my $source_port = 'source_port';
if ( $replica_version lt '8.1' || $replica_version->flavor() =~ m/maria/ ) {
$source_name = 'master';
$source_port = 'master_port';
}
my $source_name = get_source_name($replica);
my $source_port = "${source_name}_port";
my $source_status = $self->get_source_status($source)
or die "The server specified as a source is not a source";
@@ -3077,11 +3072,7 @@ sub get_source_dsn {
sub get_replica_status {
my ( $self, $dbh ) = @_;
my $server_version = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $server_version lt '8.1' || $server_version->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
if ( !$self->{not_a_replica}->{$dbh} ) {
my $sth = $self->{sths}->{$dbh}->{REPLICA_STATUS}
@@ -3192,11 +3183,8 @@ sub wait_for_source {
error =>'Wait for source: this is a multi-source replica but "channel" was not specified on the command line',
};
}
my $source_name = get_source_name($replica_dbh);
my $vp = VersionParser->new($replica_dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $channel_sql = $vp > '5.6' && $self->{channel} ? ", '$self->{channel}'" : '';
my $sql = "SELECT ${source_name}_POS_WAIT('$source_status->{file}', $source_status->{position}, $timeout $channel_sql)";
PTDEBUG && _d($replica_dbh, $sql);
@@ -3220,11 +3208,8 @@ sub wait_for_source {
sub stop_replica {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sth = $self->{sths}->{$dbh}->{STOP_REPLICA}
||= $dbh->prepare("STOP ${replica_name}");
PTDEBUG && _d($dbh, $sth->{Statement});
@@ -3234,13 +3219,8 @@ sub stop_replica {
sub start_replica {
my ( $self, $dbh, $pos ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
$replica_name = 'slave';
}
my $source_name = get_source_name($dbh);
my $replica_name = get_replica_name($dbh);
if ( $pos ) {
my $sql = "START ${replica_name} UNTIL ${source_name}_LOG_FILE='$pos->{file}', "
@@ -3284,11 +3264,7 @@ sub catchup_to_source {
if ( !defined $result->{result} ) {
$replica_status = $self->get_replica_status($replica);
my $vp = VersionParser->new($replica);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($replica);
if ( !$self->replica_is_running($replica_status, $replica_name) ) {
PTDEBUG && _d('Source position:',
@@ -3333,17 +3309,9 @@ sub catchup_to_same_pos {
$s1_pos = $self->repl_posn($s1_status);
$s2_pos = $self->repl_posn($s2_status);
my $vp1 = VersionParser->new($s1_dbh);
my $replica1_name = 'replica';
if ( $vp1 lt '8.1' || $vp1->flavor() =~ m/maria/ ) {
$replica1_name = 'slave';
}
my $replica1_name = get_replica_name($s1_dbh);
my $vp2 = VersionParser->new($s2_dbh);
my $replica2_name = 'replica';
if ( $vp2 lt '8.1' || $vp2->flavor() =~ m/maria/ ) {
$replica2_name = 'slave';
}
my $replica2_name = get_replica_name($s2_dbh);
if ( $self->replica_is_running($s1_status, $replica1_name)
|| $self->replica_is_running($s2_status, $replica2_name)
@@ -3362,11 +3330,7 @@ sub replica_is_running {
sub has_replica_updates {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sql = qq{SHOW VARIABLES LIKE 'log_${replica_name}_updates'};
PTDEBUG && _d($dbh, $sql);
@@ -3399,11 +3363,7 @@ sub repl_posn {
sub get_replica_lag {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $source_name = get_source_name($dbh);
my $stat = $self->get_replica_status($dbh);
return unless $stat; # server is not a replica
@@ -3503,11 +3463,7 @@ sub get_replication_filters {
}
my ($dbh) = @args{@required_args};
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my %filters = ();
@@ -3617,6 +3573,18 @@ sub get_cxn_from_dsn_table {
return \@cxn;
}
sub get_source_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'master' : 'source';
}
sub get_replica_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'slave' : 'replica';
}
sub _d {
my ($package, undef, $line) = caller 0;
@_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; }
@@ -5357,13 +5325,8 @@ sub main {
# Set source and replica names.
# ########################################################################
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
$replica_name = 'slave';
}
my $source_name = MasterSlave::get_source_name($dbh);
my $replica_name = MasterSlave::get_replica_name($dbh);
# ########################################################################
# Start monitoring the replica.

View File

@@ -5519,13 +5519,8 @@ sub get_connected_replicas {
sub is_source_of {
my ( $self, $source, $replica ) = @_;
my $replica_version = VersionParser->new($replica);
my $source_name = 'source';
my $source_port = 'source_port';
if ( $replica_version lt '8.1' || $replica_version->flavor() =~ m/maria/ ) {
$source_name = 'master';
$source_port = 'master_port';
}
my $source_name = get_source_name($replica);
my $source_port = "${source_name}_port";
my $source_status = $self->get_source_status($source)
or die "The server specified as a source is not a source";
@@ -5584,11 +5579,7 @@ sub get_source_dsn {
sub get_replica_status {
my ( $self, $dbh ) = @_;
my $server_version = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $server_version lt '8.1' || $server_version->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
if ( !$self->{not_a_replica}->{$dbh} ) {
my $sth = $self->{sths}->{$dbh}->{REPLICA_STATUS}
@@ -5699,11 +5690,8 @@ sub wait_for_source {
error =>'Wait for source: this is a multi-source replica but "channel" was not specified on the command line',
};
}
my $source_name = get_source_name($replica_dbh);
my $vp = VersionParser->new($replica_dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $channel_sql = $vp > '5.6' && $self->{channel} ? ", '$self->{channel}'" : '';
my $sql = "SELECT ${source_name}_POS_WAIT('$source_status->{file}', $source_status->{position}, $timeout $channel_sql)";
PTDEBUG && _d($replica_dbh, $sql);
@@ -5727,11 +5715,8 @@ sub wait_for_source {
sub stop_replica {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sth = $self->{sths}->{$dbh}->{STOP_REPLICA}
||= $dbh->prepare("STOP ${replica_name}");
PTDEBUG && _d($dbh, $sth->{Statement});
@@ -5741,13 +5726,8 @@ sub stop_replica {
sub start_replica {
my ( $self, $dbh, $pos ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
$replica_name = 'slave';
}
my $source_name = get_source_name($dbh);
my $replica_name = get_replica_name($dbh);
if ( $pos ) {
my $sql = "START ${replica_name} UNTIL ${source_name}_LOG_FILE='$pos->{file}', "
@@ -5791,11 +5771,7 @@ sub catchup_to_source {
if ( !defined $result->{result} ) {
$replica_status = $self->get_replica_status($replica);
my $vp = VersionParser->new($replica);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($replica);
if ( !$self->replica_is_running($replica_status, $replica_name) ) {
PTDEBUG && _d('Source position:',
@@ -5840,17 +5816,9 @@ sub catchup_to_same_pos {
$s1_pos = $self->repl_posn($s1_status);
$s2_pos = $self->repl_posn($s2_status);
my $vp1 = VersionParser->new($s1_dbh);
my $replica1_name = 'replica';
if ( $vp1 lt '8.1' || $vp1->flavor() =~ m/maria/ ) {
$replica1_name = 'slave';
}
my $replica1_name = get_replica_name($s1_dbh);
my $vp2 = VersionParser->new($s2_dbh);
my $replica2_name = 'replica';
if ( $vp2 lt '8.1' || $vp2->flavor() =~ m/maria/ ) {
$replica2_name = 'slave';
}
my $replica2_name = get_replica_name($s2_dbh);
if ( $self->replica_is_running($s1_status, $replica1_name)
|| $self->replica_is_running($s2_status, $replica2_name)
@@ -5869,11 +5837,7 @@ sub replica_is_running {
sub has_replica_updates {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sql = qq{SHOW VARIABLES LIKE 'log_${replica_name}_updates'};
PTDEBUG && _d($dbh, $sql);
@@ -5906,11 +5870,7 @@ sub repl_posn {
sub get_replica_lag {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $source_name = get_source_name($dbh);
my $stat = $self->get_replica_status($dbh);
return unless $stat; # server is not a replica
@@ -6010,11 +5970,7 @@ sub get_replication_filters {
}
my ($dbh) = @args{@required_args};
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my %filters = ();
@@ -6124,6 +6080,18 @@ sub get_cxn_from_dsn_table {
return \@cxn;
}
sub get_source_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'master' : 'source';
}
sub get_replica_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'slave' : 'replica';
}
sub _d {
my ($package, undef, $line) = caller 0;
@_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; }
@@ -10447,13 +10415,8 @@ sub main {
my $source_dbh = $source_cxn->dbh(); # just for brevity
my $source_dsn = $source_cxn->dsn(); # just for brevity
my $vp = VersionParser->new($source_dbh);
my $source_name = 'source';
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
$replica_name = 'replica';
}
my $source_name = MasterSlave::get_source_name($source_dbh);
my $replica_name = MasterSlave::get_replica_name($source_dbh);
if ($o->get('disable-qrt-plugin')) {
eval {

View File

@@ -7030,13 +7030,8 @@ sub get_connected_replicas {
sub is_source_of {
my ( $self, $source, $replica ) = @_;
my $replica_version = VersionParser->new($replica);
my $source_name = 'source';
my $source_port = 'source_port';
if ( $replica_version lt '8.1' || $replica_version->flavor() =~ m/maria/ ) {
$source_name = 'master';
$source_port = 'master_port';
}
my $source_name = get_source_name($replica);
my $source_port = "${source_name}_port";
my $source_status = $self->get_source_status($source)
or die "The server specified as a source is not a source";
@@ -7095,11 +7090,7 @@ sub get_source_dsn {
sub get_replica_status {
my ( $self, $dbh ) = @_;
my $server_version = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $server_version lt '8.1' || $server_version->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
if ( !$self->{not_a_replica}->{$dbh} ) {
my $sth = $self->{sths}->{$dbh}->{REPLICA_STATUS}
@@ -7210,11 +7201,8 @@ sub wait_for_source {
error =>'Wait for source: this is a multi-source replica but "channel" was not specified on the command line',
};
}
my $source_name = get_source_name($replica_dbh);
my $vp = VersionParser->new($replica_dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $channel_sql = $vp > '5.6' && $self->{channel} ? ", '$self->{channel}'" : '';
my $sql = "SELECT ${source_name}_POS_WAIT('$source_status->{file}', $source_status->{position}, $timeout $channel_sql)";
PTDEBUG && _d($replica_dbh, $sql);
@@ -7238,11 +7226,8 @@ sub wait_for_source {
sub stop_replica {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sth = $self->{sths}->{$dbh}->{STOP_REPLICA}
||= $dbh->prepare("STOP ${replica_name}");
PTDEBUG && _d($dbh, $sth->{Statement});
@@ -7252,13 +7237,8 @@ sub stop_replica {
sub start_replica {
my ( $self, $dbh, $pos ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
$replica_name = 'slave';
}
my $source_name = get_source_name($dbh);
my $replica_name = get_replica_name($dbh);
if ( $pos ) {
my $sql = "START ${replica_name} UNTIL ${source_name}_LOG_FILE='$pos->{file}', "
@@ -7302,11 +7282,7 @@ sub catchup_to_source {
if ( !defined $result->{result} ) {
$replica_status = $self->get_replica_status($replica);
my $vp = VersionParser->new($replica);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($replica);
if ( !$self->replica_is_running($replica_status, $replica_name) ) {
PTDEBUG && _d('Source position:',
@@ -7351,17 +7327,9 @@ sub catchup_to_same_pos {
$s1_pos = $self->repl_posn($s1_status);
$s2_pos = $self->repl_posn($s2_status);
my $vp1 = VersionParser->new($s1_dbh);
my $replica1_name = 'replica';
if ( $vp1 lt '8.1' || $vp1->flavor() =~ m/maria/ ) {
$replica1_name = 'slave';
}
my $replica1_name = get_replica_name($s1_dbh);
my $vp2 = VersionParser->new($s2_dbh);
my $replica2_name = 'replica';
if ( $vp2 lt '8.1' || $vp2->flavor() =~ m/maria/ ) {
$replica2_name = 'slave';
}
my $replica2_name = get_replica_name($s2_dbh);
if ( $self->replica_is_running($s1_status, $replica1_name)
|| $self->replica_is_running($s2_status, $replica2_name)
@@ -7380,11 +7348,7 @@ sub replica_is_running {
sub has_replica_updates {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sql = qq{SHOW VARIABLES LIKE 'log_${replica_name}_updates'};
PTDEBUG && _d($dbh, $sql);
@@ -7417,11 +7381,7 @@ sub repl_posn {
sub get_replica_lag {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $source_name = get_source_name($dbh);
my $stat = $self->get_replica_status($dbh);
return unless $stat; # server is not a replica
@@ -7521,11 +7481,7 @@ sub get_replication_filters {
}
my ($dbh) = @args{@required_args};
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my %filters = ();
@@ -7635,6 +7591,18 @@ sub get_cxn_from_dsn_table {
return \@cxn;
}
sub get_source_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'master' : 'source';
}
sub get_replica_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'slave' : 'replica';
}
sub _d {
my ($package, undef, $line) = caller 0;
@_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; }
@@ -10374,13 +10342,8 @@ sub main {
unshift @dsns, $source; # dsn[0]=source, dsn[1]=replica
$dsns[0]->{dbh} = get_cxn($dsns[0], %modules);
my $vp = VersionParser->new($dsns[1]->{dbh});
my $source_name = 'source';
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
$replica_name = 'replica';
}
my $source_name = MasterSlave::get_source_name($dsns[1]->{dbh});
my $replica_name = MasterSlave::get_replica_name($dsns[1]->{dbh});
if ( $o->get('check-source') ) {
my $is_source_of = eval {
@@ -10389,7 +10352,7 @@ sub main {
# We should not die if replica connected via tunnel or port redirection
if ( $EVAL_ERROR ) {
$EVAL_ERROR =~ m/The ${replica_name} is connected to (\d+) but the source's port is \d+/;
$EVAL_ERROR =~ m/The replica is connected to (\d+) but the source's port is \d+/;
if ( !$1 || $1 != $dsns[0]->{P} ) {
die $EVAL_ERROR;
}

View File

@@ -427,13 +427,8 @@ sub get_connected_replicas {
sub is_source_of {
my ( $self, $source, $replica ) = @_;
my $replica_version = VersionParser->new($replica);
my $source_name = 'source';
my $source_port = 'source_port';
if ( $replica_version lt '8.1' || $replica_version->flavor() =~ m/maria/ ) {
$source_name = 'master';
$source_port = 'master_port';
}
my $source_name = get_source_name($replica);
my $source_port = "${source_name}_port";
my $source_status = $self->get_source_status($source)
or die "The server specified as a source is not a source";
@@ -504,11 +499,7 @@ sub get_source_dsn {
sub get_replica_status {
my ( $self, $dbh ) = @_;
my $server_version = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $server_version lt '8.1' || $server_version->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
if ( !$self->{not_a_replica}->{$dbh} ) {
my $sth = $self->{sths}->{$dbh}->{REPLICA_STATUS}
@@ -646,11 +637,8 @@ sub wait_for_source {
error =>'Wait for source: this is a multi-source replica but "channel" was not specified on the command line',
};
}
my $source_name = get_source_name($replica_dbh);
my $vp = VersionParser->new($replica_dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $channel_sql = $vp > '5.6' && $self->{channel} ? ", '$self->{channel}'" : '';
my $sql = "SELECT ${source_name}_POS_WAIT('$source_status->{file}', $source_status->{position}, $timeout $channel_sql)";
PTDEBUG && _d($replica_dbh, $sql);
@@ -679,11 +667,8 @@ sub wait_for_source {
# Executes STOP REPLICA.
sub stop_replica {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sth = $self->{sths}->{$dbh}->{STOP_REPLICA}
||= $dbh->prepare("STOP ${replica_name}");
PTDEBUG && _d($dbh, $sth->{Statement});
@@ -694,13 +679,8 @@ sub stop_replica {
sub start_replica {
my ( $self, $dbh, $pos ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
$replica_name = 'slave';
}
my $source_name = get_source_name($dbh);
my $replica_name = get_replica_name($dbh);
if ( $pos ) {
# Just like with CHANGE REPLICATION SOURCE TO, you can't quote the position.
@@ -753,11 +733,7 @@ sub catchup_to_source {
if ( !defined $result->{result} ) {
$replica_status = $self->get_replica_status($replica);
my $vp = VersionParser->new($replica);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($replica);
if ( !$self->replica_is_running($replica_status, $replica_name) ) {
PTDEBUG && _d('Source position:',
@@ -805,17 +781,9 @@ sub catchup_to_same_pos {
$s1_pos = $self->repl_posn($s1_status);
$s2_pos = $self->repl_posn($s2_status);
my $vp1 = VersionParser->new($s1_dbh);
my $replica1_name = 'replica';
if ( $vp1 lt '8.1' || $vp1->flavor() =~ m/maria/ ) {
$replica1_name = 'slave';
}
my $replica1_name = get_replica_name($s1_dbh);
my $vp2 = VersionParser->new($s2_dbh);
my $replica2_name = 'replica';
if ( $vp2 lt '8.1' || $vp2->flavor() =~ m/maria/ ) {
$replica2_name = 'slave';
}
my $replica2_name = get_replica_name($s2_dbh);
# Verify that they are both stopped and are at the same position.
if ( $self->replica_is_running($s1_status, $replica1_name)
@@ -837,11 +805,7 @@ sub replica_is_running {
sub has_replica_updates {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my $sql = qq{SHOW VARIABLES LIKE 'log_${replica_name}_updates'};
PTDEBUG && _d($dbh, $sql);
@@ -879,11 +843,7 @@ sub repl_posn {
sub get_replica_lag {
my ( $self, $dbh ) = @_;
my $vp = VersionParser->new($dbh);
my $source_name = 'source';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$source_name = 'master';
}
my $source_name = get_source_name($dbh);
my $stat = $self->get_replica_status($dbh);
return unless $stat; # server is not a replica
@@ -1041,11 +1001,7 @@ sub get_replication_filters {
}
my ($dbh) = @args{@required_args};
my $vp = VersionParser->new($dbh);
my $replica_name = 'replica';
if ( $vp lt '8.1' || $vp->flavor() =~ m/maria/ ) {
$replica_name = 'slave';
}
my $replica_name = get_replica_name($dbh);
my %filters = ();
@@ -1164,6 +1120,18 @@ sub get_cxn_from_dsn_table {
return \@cxn;
}
sub get_source_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'master' : 'source';
}
sub get_replica_name {
my ($dbh) = @_;
my $vp = VersionParser->new($dbh);
return ($vp lt '8.1' || $vp->flavor() =~ m/maria/) ? 'slave' : 'replica';
}
sub _d {
my ($package, undef, $line) = caller 0;
@_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; }

View File

@@ -50,7 +50,8 @@ is(
# #############################################################################
# Done.
# #############################################################################
$source_dbh->do('set sql_log_bin=1');
$sb->wipe_clean($source_dbh);
$sb->wipe_clean($replica_dbh);
$sb->wait_for_replicas();
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
exit;

View File

@@ -50,7 +50,8 @@ is(
# #############################################################################
# Done.
# #############################################################################
$source_dbh->do('set sql_log_bin=1');
$sb->wipe_clean($source_dbh);
$sb->wipe_clean($replica_dbh);
$sb->wait_for_replicas();
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
exit;

View File

@@ -155,5 +155,6 @@ $replica1_dbh->do("START ${replica_name}");
# Done.
# #############################################################################
$sb->wipe_clean($source_dbh);
$sb->wait_for_replicas();
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
done_testing;

View File

@@ -27,7 +27,7 @@ elsif ( !$replica_dbh ) {
plan skip_all => 'Cannot connect to sandbox replica';
}
else {
plan tests => 7;
plan tests => 6;
}
my ($output, $exit_code);
@@ -37,10 +37,12 @@ $sb->do_as_root(
'source',
q/CREATE USER IF NOT EXISTS sha256_user@'%' IDENTIFIED WITH caching_sha2_password BY 'sha256_user%password' REQUIRE SSL/,
q/GRANT ALL ON sakila.* TO sha256_user@'%'/,
q/GRANT REPLICATION CLIENT ON *.* TO sha256_user@'%'/,
q/GRANT PROCESS ON *.* TO sha256_user@'%'/,
);
($output, $exit_code) = full_output(
sub { pt_table_sync::main('h=127.1,P=12345,D=sakila,t=film,u=sha256_user,p=sha256_user%password,s=0', @args) },
sub { pt_table_sync::main('h=127.1,P=12346,D=sakila,t=film,u=sha256_user,p=sha256_user%password,s=0', @args) },
stderr => 1,
);
@@ -57,7 +59,7 @@ like(
) or diag($output);
($output, $exit_code) = full_output(
sub { pt_table_sync::main('h=127.1,P=12345,D=sakila,t=film,u=sha256_user,p=sha256_user%password,s=1', @args) },
sub { pt_table_sync::main('h=127.1,P=12346,D=sakila,t=film,u=sha256_user,p=sha256_user%password,s=1', @args) },
stderr => 1,
);
@@ -75,7 +77,7 @@ unlike(
like(
$output,
qr/WHERE \(`actor_id` = 0\)/,
qr/WHERE \(`film_id` = 0\)/,
"Zero chunk"
);