Changeset 15395


Ignore:
Timestamp:
2008-05-09T20:28:15+12:00 (16 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

File:
1 edited

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
Note: See TracChangeset for help on using the changeset viewer.