7 |
require Exporter; |
require Exporter; |
8 |
@ISA = qw(Exporter); |
@ISA = qw(Exporter); |
9 |
@EXPORT = qw(PrepareSnapshot ApplySnapshot GetSyncID SyncSyncID CleanLog GetServerId |
@EXPORT = qw(PrepareSnapshot ApplySnapshot GetSyncID SyncSyncID CleanLog GetServerId |
10 |
Rollback RollbackAndQuit Connect Exec Exec2 |
Rollback RollbackAndQuit Connect Exec Exec2 MkInfo |
11 |
$debug $quiet $verbose |
$debug $quiet $verbose |
12 |
); |
); |
13 |
@EXPORT_OK = qw(); |
@EXPORT_OK = qw(); |
18 |
my $quiet = 1; |
my $quiet = 1; |
19 |
my $verbose = 0; |
my $verbose = 0; |
20 |
|
|
21 |
|
$debug = 1; |
22 |
|
$quiet = 0; |
23 |
|
$verbose = 1; |
24 |
|
|
25 |
my %Mtables = (); |
my %Mtables = (); |
26 |
my %Stables = (); |
my %Stables = (); |
27 |
|
|
57 |
{ |
{ |
58 |
my ($mconn, $sconn, $outf, $mserver, $sserver, $onlytables) = @_; |
my ($mconn, $sconn, $outf, $mserver, $sserver, $onlytables) = @_; |
59 |
|
|
60 |
|
print STDERR "## d: $debug v: $verbose q: $quiet\n"; |
61 |
|
|
62 |
if ($mserver == $sserver) { |
if ($mserver == $sserver) { |
63 |
print STDERR "master and slave numbers are same [$mserver] !\n"; |
print STDERR "master and slave numbers are same [$mserver] !\n"; |
64 |
return(-1); |
return(-1); |
79 |
$Stables{$row[0]} = 1; |
$Stables{$row[0]} = 1; |
80 |
} |
} |
81 |
|
|
82 |
|
print "Prepare snapshot for tables: ",join(",",keys %Stables),"\n" if ($debug); |
83 |
|
|
84 |
$result = $mconn->exec("BEGIN"); |
$result = $mconn->exec("BEGIN"); |
85 |
if ($result->resultStatus ne PGRES_COMMAND_OK) |
if ($result->resultStatus ne PGRES_COMMAND_OK) |
86 |
{ |
{ |
118 |
} |
} |
119 |
push @{$Mtables{$row[0]}}, $row[1], $row[2], $row[3]; |
push @{$Mtables{$row[0]}}, $row[1], $row[2], $row[3]; |
120 |
} |
} |
121 |
|
|
122 |
|
print "Master database table oids: ",join(",",keys %Mtables),"\n" if ($debug); |
123 |
|
|
124 |
# Read last succeeded sync |
# Read last succeeded sync |
125 |
my $sql = "select syncid, synctime, minid, maxid, active from _RSERV_SYNC_" . |
my $sql = "select syncid, synctime, minid, maxid, active from _RSERV_SYNC_" . |
126 |
" where server = $sserver AND syncid = (select max(syncid) from" . |
" where server = $sserver AND syncid = (select max(syncid) from" . |
137 |
} |
} |
138 |
|
|
139 |
my @lastsync = $result->fetchrow; |
my @lastsync = $result->fetchrow; |
140 |
|
print "lastsync: ",join(",",@lastsync),"\n" if ($debug); |
141 |
|
|
142 |
# exclude data which originated from master server |
# exclude data which originated from master server |
143 |
my $sel_server = " and l.server = $mserver "; |
my $sel_server = " and l.server = $mserver "; |
481 |
push @{$Stables{$row[1]}}, $row[0], $row[2], $row[3]; |
push @{$Stables{$row[1]}}, $row[0], $row[2], $row[3]; |
482 |
} |
} |
483 |
|
|
484 |
|
print STDERR "Snapshot tables oids: ",join(",",keys %Stables),"\n" if ($debug); |
485 |
|
|
486 |
my $ok = 0; |
my $ok = 0; |
487 |
my $syncid = -1; |
my $syncid = -1; |
488 |
while(<$inpf>) |
while(<$inpf>) |
1060 |
RollbackAndQuit($sconn) if ($result->resultStatus ne PGRES_COMMAND_OK); |
RollbackAndQuit($sconn) if ($result->resultStatus ne PGRES_COMMAND_OK); |
1061 |
} |
} |
1062 |
|
|
1063 |
|
sub MkInfo { |
1064 |
|
my $db = shift || die "need database name!"; |
1065 |
|
my $host = shift; |
1066 |
|
my $port = shift; |
1067 |
|
my $user = shift; |
1068 |
|
my $password = shift; |
1069 |
|
|
1070 |
|
my $info = "dbname=$db"; |
1071 |
|
$info = "$info host=$host" if (defined($host)); |
1072 |
|
$info = "$info port=$port" if (defined($port)); |
1073 |
|
$info = "$info user=$user" if (defined($user)); |
1074 |
|
$info = "$info password=$password" if (defined($password)); |
1075 |
|
|
1076 |
|
return $info; |
1077 |
|
} |
1078 |
|
|
1079 |
1; |
1; |