[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.4 - (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.3 my $celldir = $FIG_Config::sge_cell_dir;
68 :     if (!defined($celldir))
69 :     {
70 :     die "SGE cell directory not specified in FIG_Config::sge_cell_dir\n";
71 :     }
72 :     elsif (! -d $celldir)
73 :     {
74 :     die "SGE cell directory $celldir not found\n";
75 :     }
76 :    
77 : olson 1.1 #
78 :     # Step 1.
79 :     #
80 :    
81 : olson 1.2
82 :     if (not $sge_only)
83 : olson 1.1 {
84 : olson 1.2 if (-d $FIG_Config::db_datadir)
85 :     {
86 :     #
87 :     # See if the size is right
88 :     #
89 :    
90 : olson 1.3 my $sum = `cd $FIG_Config::db_datadir; ls -lR | grep -v err | awk '{print \$5, \$8}'|md5sum | awk '{print \$1}'`;
91 :     chomp($sum);
92 :    
93 :     print "Computed size as '$sum' want $FIG_Config::db_datadir_size\n";
94 :    
95 :     if ($sum != $FIG_Config::db_datadir_size)
96 : olson 1.2 {
97 :     print "Removing invalid datadir \n";
98 :     system("rm -rf $FIG_Config::db_datadir");
99 :     }
100 :     }
101 :    
102 :     if (! -d $FIG_Config::db_datadir)
103 :     {
104 :     #
105 :     # Step 2.
106 :     #
107 :    
108 :     my $dir = dirname($FIG_Config::db_datadir);
109 :     &FIG::verify_dir($dir);
110 :    
111 :     print "Extract db snapshot from $FIG_Config::db_snapshot_file to $dir\n";
112 :     &FIG::run("cd $dir; tar xzfp $FIG_Config::db_snapshot_file");
113 :     }
114 :    
115 :     if (! -d $FIG_Config::db_datadir)
116 :     {
117 :     die "After extract, data directory $FIG_Config::db_datadir does not exist\n";
118 :     }
119 :    
120 :     #
121 :     # Step 3.
122 : olson 1.1 #
123 : olson 1.2
124 :     &FIG::run("$FIG_Config::bin/start_dbserver");
125 :    
126 : olson 1.3 $db_running = 1;
127 :    
128 : olson 1.1 #
129 : olson 1.2 # Wait a bit for the db to come up.
130 :     #
131 :    
132 : olson 1.3 my $give_up = time + 10 * 60;
133 :     my $ok;
134 :     while (time < $give_up)
135 :     {
136 :     sleep 5;
137 :    
138 :     my $fig;
139 :     eval {
140 :     $fig = new FIG;
141 :     };
142 :    
143 :     if ($@)
144 :     {
145 :     warn "Could not connect to database: $@\n";
146 :     }
147 :     else
148 :     {
149 :     $ok = 1;
150 :     last;
151 :     }
152 :     }
153 : olson 1.1
154 : olson 1.3 if (not $ok)
155 : olson 1.1 {
156 : olson 1.3 warn "Could not connect to database for ten minutes, giving up\n";
157 :     shutdown_seed();
158 : olson 1.1 }
159 :     }
160 :    
161 :     #
162 :     # Step 4/5.
163 :     #
164 :    
165 : olson 1.3 my $sge_cmd = "source $FIG_Config::fig_disk/config/fig-user-env.sh; $celldir/common/sgeexecd start";
166 :     warn "Starting sge: $sge_cmd\n";
167 :     my $rc = system($sge_cmd);
168 :     if ($rc != 0)
169 :     {
170 :     warn "Return code $rc from attempt to start sge daemon\n";
171 :     my $out = `ps auxw|grep sge_execd|grep -v grep`;
172 :     if ($out !~ /sge_execd/)
173 :     {
174 :     warn "sge_execd process not found, quitting\n";
175 :     shutdown_seed();
176 :     }
177 :     }
178 :     $sge_running = 1;
179 : olson 1.1
180 :     #
181 :     # Step 6.
182 :     #
183 :     # Due to GPFS weirdness, we can't actually do this. Substitute a URL get.
184 :     #
185 :    
186 :     if(0)
187 :     {
188 :     while (! -f "$FIG_Config::fig_disk/config/cluster_shutdown")
189 :     {
190 :     sleep(1);
191 :     }
192 :     }
193 :    
194 :     my $ua = new LWP::UserAgent;
195 :     my $url = "http://tp-login1.uchicago.edu/~olson/cluster_shutdown";
196 :    
197 :     while (1)
198 :     {
199 :     my $resp = $ua->get($url);
200 :     if ($resp->is_success())
201 :     {
202 :     last;
203 :     }
204 :     sleep 10;
205 :     }
206 :    
207 :     print "Shutting down cluster node\n";
208 :    
209 : olson 1.3 shutdown_seed();
210 :     exit(0);
211 :    
212 :     sub shutdown_sig
213 :     {
214 :     my($sig) = @_;
215 :     print "Shutting down due to signal $sig\n";
216 :     shutdown_seed();
217 :     }
218 :    
219 :     sub shutdown_seed
220 :     {
221 :     my($sig) = @_;
222 :     #
223 :     # Step 7.
224 :     #
225 :    
226 :     if ($sge_running)
227 :     {
228 :     system("source $FIG_Config::fig_disk/config/fig-user-env.sh; $celldir/common/sgeexecd stop");
229 :     }
230 : olson 1.1
231 : olson 1.3 #
232 :     # Step 8.
233 :     #
234 : olson 1.1
235 : olson 1.3 if ($db_running)
236 :     {
237 :     system("$FIG_Config::ext_bin/mysqladmin -u root shutdown");
238 :     }
239 : olson 1.1
240 : olson 1.3 exit(0);
241 : olson 1.2 }
242 : olson 1.1

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3