1
# Copyright (C) 2008-2009 Sun Microsystems, Inc. All rights reserved.
2
# Use is subject to license terms.
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; version 2 of the License.
8
# This program is distributed in the hope that it will be useful, but
9
# WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
# General Public License for more details.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
18
package GenTest::Validator::ReplicationWaitForSlave;
21
@ISA = qw(GenTest::Validator GenTest);
27
use GenTest::Constants;
29
use GenTest::Validator;
32
my ($validator, $executors) = @_;
33
my $master_executor = $executors->[0];
35
my ($slave_host, $slave_port) = $master_executor->slaveInfo();
37
if (($slave_host ne '') && ($slave_port ne '')) {
38
my $slave_dsn = 'dbi:mysql:host='.$slave_host.':port='.$slave_port.':user=root';
39
my $slave_dbh = DBI->connect($slave_dsn, undef, undef, { RaiseError => 1 });
40
$validator->setDbh($slave_dbh);
47
my ($validator, $executors, $results) = @_;
49
my $master_executor = $executors->[0];
51
my ($file, $pos) = $master_executor->masterStatus();
52
return STATUS_OK if ($file eq '') || ($pos eq '');
54
my $slave_dbh = $validator->dbh();
55
return STATUS_OK if not defined $slave_dbh;
57
my $wait_status = $slave_dbh->selectrow_array("SELECT MASTER_POS_WAIT(?, ?)", undef, $file, $pos);
59
if (not defined $wait_status) {
60
my @slave_status = $slave_dbh->selectrow_array("SHOW SLAVE STATUS");
61
my $slave_status = $slave_status[37];
62
say("Slave SQL thread has stopped with error: ".$slave_status);
63
return STATUS_REPLICATION_FAILURE;