mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-02 02:34:19 +00:00
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:
@@ -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; }
|
||||
|
@@ -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; }
|
||||
|
84
bin/pt-kill
84
bin/pt-kill
@@ -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; }
|
||||
|
@@ -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 ) {
|
||||
|
@@ -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; }
|
||||
|
@@ -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;
|
||||
|
@@ -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.
|
||||
|
@@ -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 {
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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; }
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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"
|
||||
);
|
||||
|
||||
|
Reference in New Issue
Block a user