aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/rserv/RServ.pm19
-rw-r--r--contrib/rserv/Replicate.in5
2 files changed, 19 insertions, 5 deletions
diff --git a/contrib/rserv/RServ.pm b/contrib/rserv/RServ.pm
index de0f037cbe0..7b6716d8fa7 100644
--- a/contrib/rserv/RServ.pm
+++ b/contrib/rserv/RServ.pm
@@ -19,7 +19,7 @@ my %Stables = ();
sub PrepareSnapshot
{
- my ($conn, $outf, $server) = @_; # (@_[0], @_[1], @_[2]);
+ my ($conn, $outf, $server, $onlytables) = @_; # (@_[0], @_[1], @_[2]);
my $result = $conn->exec("BEGIN");
if ($result->resultStatus ne PGRES_COMMAND_OK)
@@ -52,6 +52,10 @@ sub PrepareSnapshot
while (@row = $result->fetchrow)
{
# printf "$row[0], $row[1], $row[2]\n";
+ if (ref($onlytables) eq 'HASH') {
+ next unless (exists $onlytables->{$row[1]});
+ $onlytables->{$row[1]} = $row[0] unless ($onlytables->{$row[1]});
+ }
push @{$Mtables{$row[0]}}, $row[1], $row[2];
}
@@ -232,7 +236,7 @@ sub GetSYNCID
sub CleanLog
{
- my ($conn, $howold) = @_; # (@_[0], @_[1]);
+ my ($conn, $howold, $onlytables) = @_; # (@_[0], @_[1]);
my $result = $conn->exec("BEGIN");
if ($result->resultStatus ne PGRES_COMMAND_OK)
@@ -274,6 +278,11 @@ sub CleanLog
my $alist = join(',', keys %active);
my $sinfo = "logid < $maxid";
$sinfo .= " and logid not in ($alist)" if $alist ne '';
+ #if (ref($onlytables) eq 'HASH') {
+ # foreach my $onlytable (keys %{$onlytables}) {
+ # $sinfo
+ # }
+ #}
$sql = "delete from _RSERV_LOG_ where " .
"logtime < now() - '$howold second'::interval and $sinfo";
@@ -302,7 +311,7 @@ sub CleanLog
sub ApplySnapshot
{
- my ($conn, $inpf) = @_; # (@_[0], @_[1]);
+ my ($conn, $inpf, $onlytables) = @_; # (@_[0], @_[1]);
my $result = $conn->exec("BEGIN");
if ($result->resultStatus ne PGRES_COMMAND_OK)
@@ -336,6 +345,10 @@ sub ApplySnapshot
while (@row = $result->fetchrow)
{
# printf " %s %s\n", $row[1], $row[0];
+ if (ref($onlytables) eq 'HASH') {
+ next unless (exists $onlytables->{$row[1]});
+ $onlytables->{$row[1]} = $row[0] unless ($onlytables->{$row[1]});
+ }
push @{$Stables{$row[1]}}, $row[0], $row[2], $row[3];
}
diff --git a/contrib/rserv/Replicate.in b/contrib/rserv/Replicate.in
index bd7c089a597..28abc8d7bfe 100644
--- a/contrib/rserv/Replicate.in
+++ b/contrib/rserv/Replicate.in
@@ -32,6 +32,7 @@ if (defined($opt_help) || (scalar(@ARGV) < 2)) {
my $master = $ARGV[0] || "master";
my $slave = $ARGV[1] || "slave";
+my $tables = $#ARGV < 2 ? undef : { map {($_, undef)} @ARGV[2..$#ARGV] };
my $server = 0;
my $minfo = "dbname=$master";
@@ -56,7 +57,7 @@ SyncSync($mconn, $sconn);
my $outf = new IO::File;
open $outf, ">$snapshot";
print "\n>>>>>>>>>>>>> Prepare Snapshot\n\n" if ($verbose);
-$res = PrepareSnapshot($mconn, $outf, $server);
+$res = PrepareSnapshot($mconn, $outf, $server, $tables);
close $outf;
die "\n>>>>>>>>>>>>> ERROR\n" if $res < 0;
if ($res == 0)
@@ -68,7 +69,7 @@ if ($res == 0)
my $inpf = new IO::File;
open $inpf, "<$snapshot";
print "\n>>>>>>>>>>>>> Apply Snapshot\n\n" if ($verbose);
-$res = ApplySnapshot($sconn, $inpf);
+$res = ApplySnapshot($sconn, $inpf, $tables);
close $inpf;
die "\n>>>>>>>>>>>>> ERROR\n" if $res < 0;