/[rserv]/bin/SlaveInit
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/SlaveInit

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (show annotations)
Tue Aug 5 15:07:01 2003 UTC (20 years, 10 months ago) by dpavlin
Branch: MAIN
Changes since 1.3: +7 -3 lines
added port option

1 #!/usr/bin/perl
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 use Pg;
10 use Getopt::Long;
11 use Sys::Hostname;
12
13 $| = 1;
14
15 $result = GetOptions("debug!", "verbose!", "quiet!", "help",
16 "masterhost=s", "masterport=i",
17 "masteruser=s", "masterpassword=s",
18 "slavehost=s", "slaveport=i",
19 "slaveuser=s", "slavepassword=s");
20
21 my $debug = $opt_debug || 0;
22 my $verbose = $opt_verbose || 0;
23 my $quiet = $opt_quiet || 0;
24
25 if (defined($opt_help) || (scalar(@ARGV) < 2)) {
26 print "Usage: $0 --masterhost=name --masterport=port\n\t--masteruser=name --masterpassword=string\n\t--slavehost=name --slaveport=port\n\t--slaveuser=name --slavepassword=string\n\tmasterdb slavedb\n";
27 exit ((scalar(@ARGV) < 1)? 1:0);
28 }
29
30 my $master = $ARGV[0] || "master";
31 my $slave = $ARGV[1] || "slave";
32
33 my $sinfo = "dbname=$slave";
34 $sinfo = "$sinfo host=$opt_slavehost" if (defined($opt_slavehost));
35 $sinfo = "$sinfo user=$opt_slaveuser" if (defined($opt_slaveuser));
36 $sinfo = "$sinfo password=$opt_slavepassword" if (defined($opt_slavepassword));
37 $sinfo = "$sinfo port=$opt_slaveport" if (defined($opt_slaveport));
38
39 my $minfo = "dbname=$master";
40 $minfo = "$minfo host=$opt_masterhost" if (defined($opt_masterhost));
41 $minfo = "$minfo user=$opt_masteruser" if (defined($opt_masteruser));
42 $minfo = "$minfo password=$opt_masterpassword" if (defined($opt_masterpassword));
43 $minfo = "$minfo port=$opt_masterport" if (defined($opt_masterport));
44
45 sub RollbackAndQuit {
46 my $conn = shift @_;
47
48 print STDERR $conn->errorMessage;
49 $conn->exec("ROLLBACK");
50 exit (-1);
51 }
52
53 # First, lets add the needed information in the slave database
54
55 print("Connecting to $sinfo\n") if ($debug || $verbose);
56 my $conn = Pg::connectdb($sinfo);
57 if ($conn->status != PGRES_CONNECTION_OK) {
58 print STDERR "Failed opening $sinfo\n";
59 exit 1;
60 }
61
62 my $result = $conn->exec("BEGIN");
63 RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
64
65 $result = $conn->exec("set transaction isolation level serializable");
66 RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
67
68 $result = $conn->exec("create table _RSERV_SLAVE_TABLES_" .
69 " (tname name not null, cname name not null, reloid oid not null, key int4 not null)");
70 RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
71
72 $result = $conn->exec("create table _RSERV_SLAVE_SYNC_" .
73 " (syncid int4, synctime timestamp)");
74 RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
75
76
77 # next, let's tell the master that the slave is set up.
78
79 print("Connecting to $minfo\n") if ($debug || $verbose);
80 $mconn = Pg::connectdb($minfo);
81 if ($mconn->status != PGRES_CONNECTION_OK) {
82 print STDERR "Failed opening $minfo\n";
83 RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
84 # exit 1;
85 }
86
87 $host = defined($opt_slavehost) ? $opt_slavehost : hostname;
88
89 $result = $mconn->exec("INSERT INTO _RSERV_SERVERS_ (host,dbase) VALUES ('$host','$slave')");
90 if ($result->resultStatus ne PGRES_COMMAND_OK) {
91 print STDERR $mconn->errorMessage;
92 RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
93 # exit (-1);
94 }
95
96
97 # then commit the slave transaction
98
99 $result = $conn->exec("COMMIT");
100 RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
101
102
103
104 exit (0);

  ViewVC Help
Powered by ViewVC 1.1.26