Changeset 15395

Show
Ignore:
Timestamp:
09.05.2008 20:28:15 (12 years ago)
Author:
ak19
Message:

For FLI: Removed gsdl.xml file creation from java file Gatherer.java and moved the functionality into Perl (g2futil.pm, called by g2f-import.pl). Now it should work with a remote GS3 server. Tested when FLI is running on GS3 as well as GS2

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • gsdl/trunk/perllib/g2futil.pm

    r15015 r15395  
    226226 
    227227 
     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. 
     233sub 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} 
    228328 
    229329