/[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

Annotation of /bin/SlaveInit

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (hide 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 dpavlin 1.2 #!/usr/bin/perl
2 dpavlin 1.1 # 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 dpavlin 1.3 use Sys::Hostname;
12 dpavlin 1.1
13     $| = 1;
14    
15     $result = GetOptions("debug!", "verbose!", "quiet!", "help",
16 dpavlin 1.4 "masterhost=s", "masterport=i",
17     "masteruser=s", "masterpassword=s",
18     "slavehost=s", "slaveport=i",
19     "slaveuser=s", "slavepassword=s");
20 dpavlin 1.1
21     my $debug = $opt_debug || 0;
22     my $verbose = $opt_verbose || 0;
23     my $quiet = $opt_quiet || 0;
24    
25 dpavlin 1.3 if (defined($opt_help) || (scalar(@ARGV) < 2)) {
26 dpavlin 1.4 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 dpavlin 1.1 exit ((scalar(@ARGV) < 1)? 1:0);
28     }
29    
30 dpavlin 1.3 my $master = $ARGV[0] || "master";
31     my $slave = $ARGV[1] || "slave";
32 dpavlin 1.1
33     my $sinfo = "dbname=$slave";
34 dpavlin 1.3 $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 dpavlin 1.4 $sinfo = "$sinfo port=$opt_slaveport" if (defined($opt_slaveport));
38 dpavlin 1.3
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 dpavlin 1.4 $minfo = "$minfo port=$opt_masterport" if (defined($opt_masterport));
44 dpavlin 1.1
45     sub RollbackAndQuit {
46     my $conn = shift @_;
47    
48     print STDERR $conn->errorMessage;
49     $conn->exec("ROLLBACK");
50     exit (-1);
51     }
52    
53 dpavlin 1.3 # First, lets add the needed information in the slave database
54    
55 dpavlin 1.1 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 dpavlin 1.3 " (tname name not null, cname name not null, reloid oid not null, key int4 not null)");
70 dpavlin 1.1 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 dpavlin 1.3
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 dpavlin 1.1 $result = $conn->exec("COMMIT");
100     RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
101    
102 dpavlin 1.3
103    
104 dpavlin 1.1 exit (0);

  ViewVC Help
Powered by ViewVC 1.1.26