Changeset 15395 for gsdl/trunk/perllib/g2futil.pm
- Timestamp:
- 2008-05-09T20:28:15+12:00 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
gsdl/trunk/perllib/g2futil.pm
r15015 r15395 226 226 227 227 228 # Subroutine to write the gsdl.xml file in FEDORA_HOME/tomcat/conf/Catalina/<host/localhost>/ 229 # This xml file will tell Fedora where to find the parent folder of the GS collect dir 230 # so that it can obtain the FedoraMETS files for ingestion. 231 # It depends on the Fedora server being on the same machine as the Greenstone server that 232 # this code is part of. 233 sub write_gsdl_xml_file 234 { 235 my ($fedora_host, $collect_dir) = @_; 236 237 print STDERR "Ensuring that a correct gsdl.xml file exists on the Fedora server end\n"; 238 # The top of this file has already made sure that FEDORA_HOME is set 239 240 # 1. Find out which folder to write to: fedora_host or localhost 241 # whichever contains fedora.xml is the one we want - if none, exit with error value 242 my $fedora_home = $ENV{'FEDORA_HOME'}; 243 my $base_path = &util::filename_cat($fedora_home, "tomcat", "conf", "Catalina"); 244 245 my $host_path = &util::filename_cat($base_path, $fedora_host); 246 my $xmlFile = &util::filename_cat($host_path, "fedora.xml"); 247 if (!-e $xmlFile) { 248 # try seeing if folder localhost contains fedoraXML 249 $host_path = &util::filename_cat($base_path, "localhost"); 250 $xmlFile = &util::filename_cat($host_path, "fedora.xml"); 251 if(!-e $xmlFile) { 252 # try putting gsdl in this folder, but still print a warning 253 print STDERR "**** $host_path does not contain file fedora.xml. Hoping gsdl.xml belongs there anyway\n"; 254 } 255 } 256 257 # 2. Construct the string we are going write to the gsdl.xml file 258 # a. get the parent directory of collect_dir by removinbg the word 259 # "collect" from it and any optional OS-type slash at the end. 260 my $collectParentDir = $collect_dir; 261 $collectParentDir =~ s/collect(\/|\\)?//; 262 #print STDERR "**** collect's parent dir is: $collectParentDir\n"; 263 264 # b. Use the collectParentDir to create the contents of gsdl.xml 265 my $gsdlXMLcontents = "<?xml version='1.0' encoding='utf-8'?>\n<Context docBase=\""; 266 $gsdlXMLcontents = $gsdlXMLcontents.$collectParentDir."\" path=\"/gsdl\"></Context>"; 267 268 # 3. If there is already a gsdl.xml file in host_path, compare the string we 269 # want to write with what is already in there. If they're the same, we can return 270 $xmlFile = &util::filename_cat($host_path, "gsdl.xml"); 271 if(-e $xmlFile) { 272 # such a file exists, so read the contents 273 unless(open(FIN, "<$xmlFile")) { 274 print STDERR "***g2f-import.pl: Unable to open existing $xmlFile for comparing...Recoverable. $!\n"; 275 # doesn't matter, we'll just overwrite it then 276 } 277 my $xml_contents; 278 { 279 local $/ = undef; # Read entire file at once 280 $xml_contents = <FIN>; # Now file is read in as one single 'line' 281 } 282 close(FIN); # close the file 283 if($xml_contents eq $gsdlXMLcontents) { 284 print STDERR "The old gsdl.xml file already contains the same.\n"; 285 # it already contains what we want, we're done 286 return "gsdl.xml"; 287 } 288 } 289 290 # 4. If we're here, the contents of gsdl.xml need to be updated: 291 # a. First stop the fedora server 292 my $stop_tomcat = &util::filename_cat($fedora_home, "tomcat", "bin", "shutdown.sh"); 293 # execute the command 294 $!=0; # does this initialise the return value? 295 if (system($stop_tomcat)!=0) { # to get the actual exit value, divide by 256, but not useful here 296 # possible tomcat was already stopped - it's not the end of the world 297 print STDERR "**** Failed to stop Fedora server. Perhaps it was not running. $!\n"; 298 } 299 300 # b. overwrite the file that has outdated contents with the contents we just constructed 301 unless(open(FOUT, ">$xmlFile")) { # create or overwrite gsdl.xml file 302 die "g2f-import.pl: Unable to open $xmlFile for telling Fedora where the collect dir is...ERROR: $!\n"; 303 } 304 # write out the updated contents and close the file 305 print FOUT $gsdlXMLcontents; 306 close(FOUT); 307 308 # c. Restart the fedora server 309 my $start_tomcat = &util::filename_cat($fedora_home, "tomcat", "bin", "startup.sh"); 310 $!=0; 311 if (system($start_tomcat)!=0) { 312 print STDERR "Failed to restart the Fedora server... ERROR: $!\n"; 313 } 314 # QUESTION: 315 # Starting up the Fedora server takes a long time. How long should we wait before 316 # import continues? g2f-import relies on an up-and-running Fedora server to purge the 317 # collection from it whereas g2f-build.pl needs a ready Fedora server in order to make 318 # it ingest the FedoraMETS. 319 # Let's try waiting 10s for the Fedora server to really be up and running after the 320 # restart so import and build can work without glitches. But how can we check if this 321 # duration is actually sufficient? 322 print STDERR "Fedora server restarted. Waiting 10 seconds to ensure the server is ready...\n"; 323 sleep 10; 324 325 # return some indication that things went well 326 return "gsdl.xml"; 327 } 228 328 229 329
Note:
See TracChangeset
for help on using the changeset viewer.