[Bio] / FigKernelScripts / boot_cluster_seed.pl Repository:
ViewVC logotype

Annotation of /FigKernelScripts/boot_cluster_seed.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (view) (download) (as text)

1 : olson 1.1 #
2 :     # Boot up a cluster-node SEED server. We assume we are using
3 :     # mysql with a snapshotted database directory.
4 :     #
5 :     # 1. See if $FIG_Config::db_datadir exists. If it does,
6 :     # go to step 3.
7 :     #
8 :     # 2. Extract $FIG_Config::db_snapshot_file into $FIG_Config::db_datadir.
9 :     #
10 :     # 3. Start the database server using start_dbserver.
11 :     #
12 :     # 4. Source the SEED environment setup file.
13 :     #
14 :     # 5. Start an SGE execution daemon.
15 :     #
16 :     # 6. Spin sleeping until the file FIGdisk/config/cluster_shutdown is created.
17 :     #
18 :     # 7. Shut down the SGE exec daemon.
19 :     #
20 :     # 8. Shut down the database server.
21 :     #
22 :     # 9. Exit.
23 :     #
24 :    
25 :     use strict;
26 :    
27 :     use FIG;
28 :     use FIG_Config;
29 :    
30 :     use File::Basename;
31 :    
32 :     use LWP::UserAgent;
33 :    
34 : olson 1.2 use Getopt::Long;
35 :    
36 :     my $sge_only = 0;
37 :    
38 : olson 1.3 $SIG{TERM} = \&shutdown_sig;
39 :     $SIG{INT} = \&shutdown_sig;
40 :     $SIG{HUP} = \&shutdown_sig;
41 :    
42 :     our $sge_running = 0;
43 :     our $db_running = 0;
44 :    
45 : olson 1.2 if (!GetOptions("sge-only" => \$sge_only))
46 :     {
47 :     die "Usage: $0 [--sge-only]\n";
48 :     }
49 :    
50 : olson 1.3 my $celldir = $FIG_Config::sge_cell_dir;
51 :     if (!defined($celldir))
52 :     {
53 :     die "SGE cell directory not specified in FIG_Config::sge_cell_dir\n";
54 :     }
55 :     elsif (! -d $celldir)
56 :     {
57 :     die "SGE cell directory $celldir not found\n";
58 :     }
59 :    
60 : olson 1.1 #
61 :     # Step 1.
62 :     #
63 :    
64 : olson 1.2
65 :     if (not $sge_only)
66 : olson 1.1 {
67 : olson 1.2 if (-d $FIG_Config::db_datadir)
68 :     {
69 :     #
70 :     # See if the size is right
71 :     #
72 :    
73 : olson 1.3 my $sum = `cd $FIG_Config::db_datadir; ls -lR | grep -v err | awk '{print \$5, \$8}'|md5sum | awk '{print \$1}'`;
74 :     chomp($sum);
75 :    
76 :     print "Computed size as '$sum' want $FIG_Config::db_datadir_size\n";
77 :    
78 :     if ($sum != $FIG_Config::db_datadir_size)
79 : olson 1.2 {
80 :     print "Removing invalid datadir \n";
81 :     system("rm -rf $FIG_Config::db_datadir");
82 :     }
83 :     }
84 :    
85 :     if (! -d $FIG_Config::db_datadir)
86 :     {
87 :     #
88 :     # Step 2.
89 :     #
90 :    
91 :     my $dir = dirname($FIG_Config::db_datadir);
92 :     &FIG::verify_dir($dir);
93 :    
94 :     print "Extract db snapshot from $FIG_Config::db_snapshot_file to $dir\n";
95 :     &FIG::run("cd $dir; tar xzfp $FIG_Config::db_snapshot_file");
96 :     }
97 :    
98 :     if (! -d $FIG_Config::db_datadir)
99 :     {
100 :     die "After extract, data directory $FIG_Config::db_datadir does not exist\n";
101 :     }
102 :    
103 :     #
104 :     # Step 3.
105 : olson 1.1 #
106 : olson 1.2
107 :     &FIG::run("$FIG_Config::bin/start_dbserver");
108 :    
109 : olson 1.3 $db_running = 1;
110 :    
111 : olson 1.1 #
112 : olson 1.2 # Wait a bit for the db to come up.
113 :     #
114 :    
115 : olson 1.3 my $give_up = time + 10 * 60;
116 :     my $ok;
117 :     while (time < $give_up)
118 :     {
119 :     sleep 5;
120 :    
121 :     my $fig;
122 :     eval {
123 :     $fig = new FIG;
124 :     };
125 :    
126 :     if ($@)
127 :     {
128 :     warn "Could not connect to database: $@\n";
129 :     }
130 :     else
131 :     {
132 :     $ok = 1;
133 :     last;
134 :     }
135 :     }
136 : olson 1.1
137 : olson 1.3 if (not $ok)
138 : olson 1.1 {
139 : olson 1.3 warn "Could not connect to database for ten minutes, giving up\n";
140 :     shutdown_seed();
141 : olson 1.1 }
142 :     }
143 :    
144 :     #
145 :     # Step 4/5.
146 :     #
147 :    
148 : olson 1.3 my $sge_cmd = "source $FIG_Config::fig_disk/config/fig-user-env.sh; $celldir/common/sgeexecd start";
149 :     warn "Starting sge: $sge_cmd\n";
150 :     my $rc = system($sge_cmd);
151 :     if ($rc != 0)
152 :     {
153 :     warn "Return code $rc from attempt to start sge daemon\n";
154 :     my $out = `ps auxw|grep sge_execd|grep -v grep`;
155 :     if ($out !~ /sge_execd/)
156 :     {
157 :     warn "sge_execd process not found, quitting\n";
158 :     shutdown_seed();
159 :     }
160 :     }
161 :     $sge_running = 1;
162 : olson 1.1
163 :     #
164 :     # Step 6.
165 :     #
166 :     # Due to GPFS weirdness, we can't actually do this. Substitute a URL get.
167 :     #
168 :    
169 :     if(0)
170 :     {
171 :     while (! -f "$FIG_Config::fig_disk/config/cluster_shutdown")
172 :     {
173 :     sleep(1);
174 :     }
175 :     }
176 :    
177 :     my $ua = new LWP::UserAgent;
178 :     my $url = "http://tp-login1.uchicago.edu/~olson/cluster_shutdown";
179 :    
180 :     while (1)
181 :     {
182 :     my $resp = $ua->get($url);
183 :     if ($resp->is_success())
184 :     {
185 :     last;
186 :     }
187 :     sleep 10;
188 :     }
189 :    
190 :     print "Shutting down cluster node\n";
191 :    
192 : olson 1.3 shutdown_seed();
193 :     exit(0);
194 :    
195 :     sub shutdown_sig
196 :     {
197 :     my($sig) = @_;
198 :     print "Shutting down due to signal $sig\n";
199 :     shutdown_seed();
200 :     }
201 :    
202 :     sub shutdown_seed
203 :     {
204 :     my($sig) = @_;
205 :     #
206 :     # Step 7.
207 :     #
208 :    
209 :     if ($sge_running)
210 :     {
211 :     system("source $FIG_Config::fig_disk/config/fig-user-env.sh; $celldir/common/sgeexecd stop");
212 :     }
213 : olson 1.1
214 : olson 1.3 #
215 :     # Step 8.
216 :     #
217 : olson 1.1
218 : olson 1.3 if ($db_running)
219 :     {
220 :     system("$FIG_Config::ext_bin/mysqladmin -u root shutdown");
221 :     }
222 : olson 1.1
223 : olson 1.3 exit(0);
224 : olson 1.2 }
225 : olson 1.1

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3