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

Diff of /bin/SlaveInit

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by dpavlin, Thu Dec 21 14:27:11 2000 UTC revision 1.6 by dpavlin, Fri Aug 15 23:00:12 2003 UTC
# Line 1  Line 1 
1  # -*- perl -*-  #!/usr/bin/perl -w
2  # SlaveInit  # SlaveInit
3  # Vadim Mikheev, (c) 2000, PostgreSQL Inc.  # Vadim Mikheev, (c) 2000, PostgreSQL Inc.
4    
# Line 6  eval '(exit $?0)' && eval 'exec perl -S Line 6  eval '(exit $?0)' && eval 'exec perl -S
6      & eval 'exec perl -S $0 $argv:q'      & eval 'exec perl -S $0 $argv:q'
7      if 0;      if 0;
8    
9    use strict;
10  use Pg;  use Pg;
11  use Getopt::Long;  use Getopt::Long;
12    use Sys::Hostname;
13    
14  $| = 1;  $| = 1;
15    
16  $result = GetOptions("debug!", "verbose!", "quiet!", "help",  my ($debug,$verbose,$quiet) = (0,0,0);
17                       "host=s", "user=s", "password=s");  my ($help,$masterhost,$masterport,$masteruser,$masterpassword,
18            $slavehost,$slaveport,$slaveuser,$slavepassword);
19  my $debug = $opt_debug || 0;  
20  my $verbose = $opt_verbose || 0;  my $result = GetOptions(
21  my $quiet = $opt_quiet || 0;          "debug!" => \$debug, "verbose!" => \$verbose,
22            "quiet!" => \$quiet, "help" => \$help,
23  if (defined($opt_help) || (scalar(@ARGV) < 1)) {          "masterhost=s" => \$masterhost, "masterport=i" => \$masterport,
24      print "Usage: $0 --host=name --user=name --password=string slavedb\n";          "masteruser=s" => \$masteruser, "masterpassword=s" => \$masterpassword,
25      exit ((scalar(@ARGV) < 1)? 1:0);          "slavehost=s" => \$slavehost, "slaveport=i" => \$slaveport,
26            "slaveuser=s" => \$slaveuser, "slavepassword=s" => \$slavepassword,
27            );
28    
29    if (defined($help) || (scalar(@ARGV) < 2)) {
30        print "Usage: $0 [options] masterdb slavedb
31    Options:
32            --masterhost=hostname --masterport=port
33            --masteruser=username --masterpassword=string
34            --slavehost=hostname --slaveport=port
35            --slaveuser=username --slavepassword=string
36    ";
37        exit ((scalar(@ARGV) < 2)? 1:0);
38  }  }
39    
40  my $slave = $ARGV[0] || "slave";  my $master = $ARGV[0] || "master";
41    my $slave = $ARGV[1] || "slave";
42    
43  my $sinfo = "dbname=$slave";  my $sinfo = "dbname=$slave";
44  $sinfo = "$sinfo host=$opt_host" if (defined($opt_host));  $sinfo = "$sinfo host=$slavehost" if (defined($slavehost));
45  $sinfo = "$sinfo user=$opt_user" if (defined($opt_user));  $sinfo = "$sinfo port=$slaveport" if (defined($slaveport));
46  $sinfo = "$sinfo password=$opt_password" if (defined($opt_password));  $sinfo = "$sinfo user=$slaveuser" if (defined($slaveuser));
47    $sinfo = "$sinfo password=$slavepassword" if (defined($slavepassword));
48    
49    my $minfo = "dbname=$master";
50    $minfo = "$minfo host=$masterhost" if (defined($masterhost));
51    $minfo = "$minfo port=$masterport" if (defined($masterport));
52    $minfo = "$minfo user=$masteruser" if (defined($masteruser));
53    $minfo = "$minfo password=$masterpassword" if (defined($masterpassword));
54    
55  sub RollbackAndQuit {  sub RollbackAndQuit {
56      my $conn = shift @_;      my $conn = shift @_;
# Line 38  sub RollbackAndQuit { Line 60  sub RollbackAndQuit {
60      exit (-1);      exit (-1);
61  }  }
62    
63    # First, lets add the needed information in the slave database
64    
65  print("Connecting to $sinfo\n") if ($debug || $verbose);  print("Connecting to $sinfo\n") if ($debug || $verbose);
66  my $conn = Pg::connectdb($sinfo);  my $conn = Pg::connectdb($sinfo);
67  if ($conn->status != PGRES_CONNECTION_OK) {  if ($conn->status != PGRES_CONNECTION_OK) {
# Line 45  if ($conn->status != PGRES_CONNECTION_OK Line 69  if ($conn->status != PGRES_CONNECTION_OK
69      exit 1;      exit 1;
70  }  }
71    
72  my $result = $conn->exec("BEGIN");  $result = $conn->exec("BEGIN");
73  RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);  RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
74    
75  $result = $conn->exec("set transaction isolation level serializable");  $result = $conn->exec("set transaction isolation level serializable");
76  RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);  RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
77    
78  $result = $conn->exec("create table _RSERV_SLAVE_TABLES_" .  $result = $conn->exec("create table _RSERV_SLAVE_TABLES_" .
79                        " (tname name, cname name, reloid oid, key int4)");                        " (tname name not null, cname name not null, reloid oid not null, key int4 not null)");
80  RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);  RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
81    
82  $result = $conn->exec("create table _RSERV_SLAVE_SYNC_" .  $result = $conn->exec("create table _RSERV_SLAVE_SYNC_" .
83                        " (syncid int4, synctime timestamp)");                        " (syncid int4 not null, synctime timestamp)");
84  RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);  RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
85    
86    
87    # next, let's tell the master that the slave is set up.
88    
89    print("Connecting to $minfo\n") if ($debug || $verbose);
90    my $mconn = Pg::connectdb($minfo);
91    if ($mconn->status != PGRES_CONNECTION_OK) {
92        print STDERR "Failed opening $minfo\n";
93        RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
94    #    exit 1;
95    }
96    
97    my $host = defined($slavehost) ? $slavehost : hostname;
98    
99    $result = $mconn->exec("INSERT INTO _RSERV_SERVERS_ (host,dbase) VALUES ('$host','$slave')");
100    if ($result->resultStatus ne PGRES_COMMAND_OK) {
101        print STDERR $mconn->errorMessage;
102        RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
103    #    exit (-1);
104    }
105    
106    
107    # then commit the slave transaction
108    
109  $result = $conn->exec("COMMIT");  $result = $conn->exec("COMMIT");
110  RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);  RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
111    
112    
113    
114  exit (0);  exit (0);

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.6

  ViewVC Help
Powered by ViewVC 1.1.26