/[rserv]/bin/SlaveRemove
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /bin/SlaveRemove

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (show annotations)
Sun Nov 2 10:31:44 2003 UTC (20 years, 5 months ago) by dpavlin
Branch: MAIN
CVS Tags: HEAD
Changes since 1.3: +7 -2 lines
another code clean-up

1 #!/usr/bin/perl -w
2 # SlaveInit
3 # Vadim Mikheev, (c) 2000, PostgreSQL Inc.
4
5 eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
6 & eval 'exec perl -S $0 $argv:q'
7 if 0;
8
9 BEGIN {
10 my $basedir = $0; $basedir =~ s#/[^/]+$##;
11 unshift(@INC, "$basedir/../share");
12 }
13
14 use strict;
15 use Pg;
16 use Getopt::Long;
17 use RServ;
18
19 $| = 1;
20
21 my ($debug,$verbose,$quiet) = (0,0,0);
22 my ($help,$masterhost,$masterport,$masteruser,$masterpassword,
23 $slavehost,$slaveport,$slaveuser,$slavepassword);
24
25 my $result = GetOptions(
26 "debug!" => \$debug, "verbose!" => \$verbose,
27 "quiet!" => \$quiet, "help" => \$help,
28 "masterhost=s" => \$masterhost, "masterport=i" => \$masterport,
29 "masteruser=s" => \$masteruser, "masterpassword=s" => \$masterpassword,
30 "slavehost=s" => \$slavehost, "slaveport=i" => \$slaveport,
31 "slaveuser=s" => \$slaveuser, "slavepassword=s" => \$slavepassword,
32 );
33
34 if (defined($help) || (scalar(@ARGV) < 2)) {
35 print "Usage: $0 [options] masterdb slavedb
36 Options:
37 --masterhost=hostname --masterport=port
38 --masteruser=username --masterpassword=string
39 --slavehost=hostname --slaveport=port
40 --slaveuser=username --slavepassword=string
41 ";
42 exit ((scalar(@ARGV) < 2)? 1:0);
43 }
44
45 my $master = $ARGV[0] || "master";
46 my $slave = $ARGV[1] || "slave";
47
48 my $minfo = MkInfo($master,$masterhost,$masterport,$masteruser,$masterpassword);
49 my $sinfo = MkInfo($slave,$slavehost,$slaveport,$slaveuser,$slavepassword);
50
51 sub RollbackAndQuit {
52 my $conn = shift @_;
53
54 print STDERR $conn->errorMessage;
55 $conn->exec("ROLLBACK");
56 exit (-1);
57 }
58
59 # First, lets add the needed information in the slave database
60
61 print("Connecting to $sinfo\n") if ($debug || $verbose);
62 my $conn = Pg::connectdb($sinfo);
63 if ($conn->status != PGRES_CONNECTION_OK) {
64 print STDERR "Failed opening $sinfo\n";
65 exit 1;
66 }
67
68 $result = $conn->exec("BEGIN");
69 RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
70
71 $result = $conn->exec("set transaction isolation level serializable");
72 RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
73
74 $result = $conn->exec("DROP TABLE _RSERV_SLAVE_TABLES_");
75 RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
76
77 $result = $conn->exec("DROP TABLE _RSERV_SLAVE_SYNC_");
78 RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
79
80 $result = $conn->exec("COMMIT");
81 RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
82
83
84 # next, let's tell the master that the slave is gone.
85
86 print("Connecting to $minfo\n") if ($debug || $verbose);
87 $conn = Pg::connectdb($minfo);
88 if ($conn->status != PGRES_CONNECTION_OK) {
89 print STDERR "Failed opening $minfo\n";
90 exit 1;
91 }
92
93
94 my $host = 'localhost' if (! slavehost);
95
96 $result = $conn->exec("DELETE FROM _RSERV_SERVERS_ WHERE host='$host' AND dbase='$slave'");
97 if ($result->resultStatus ne PGRES_COMMAND_OK) {
98 print STDERR $conn->errorMessage;
99 exit (-1);
100 }
101
102
103 exit (0);

  ViewVC Help
Powered by ViewVC 1.1.26