[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.5 - (view) (download) (as text)

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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3