- Timestamp:
- 2016-05-09T22:38:09+12:00 (8 years ago)
- Location:
- main/trunk/greenstone2
- Files:
-
- 1 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone2/bin/script/activate.pl
r30517 r30520 90 90 use File::Find; 91 91 92 use HTTP::Response; 93 use LWP::Simple qw($ua !head); # import useragent object as $ua from the full LWP to use along with LWP::Simple 94 # don't import LWP::Simple's head function by name since it can conflict with CGI:head()) 95 #use CGI qw(:standard); # then only CGI.pm defines a head() 96 use Net::Ping; 97 use URI; 98 92 # Greenstone modules 93 use activate; 99 94 use colcfg; 100 95 use scriptutil; 101 96 use util; 102 #use enum;103 104 # enumerations in perl, http://stackoverflow.com/questions/473666/does-perl-have-an-enumeration-type105 # Unfortunately, not part of perl's core106 #use enum qw(LEVEL_NONE LEVEL_ERROR LEVEL_INFO LEVEL_DEBUG); # debugging levels NONE == 0, ERROR=1 INFO=2 DEBUG=3107 108 # global variables109 #my $default_verbosity = LEVEL_ERROR; # by default we display basic error messages110 111 my $default_verbosity = 2; # by default we display basic error and info messages112 113 sub print_task_msg {114 my ($task_msg, $verbosity_setting) = @_;115 116 $verbosity_setting = $default_verbosity unless $verbosity_setting;117 #$verbosity_setting = 1 unless defined $verbosity;118 if($verbosity_setting >= 1) {119 print STDERR "\n";120 print STDERR "************************\n";121 print STDERR "* $task_msg\n";122 print STDERR "************************\n";123 }124 }125 126 # Prints messages if the verbosity is right. Does not add new lines.127 sub print_msg {128 my ($msg, $min_verbosity, $verbosity_setting) = @_;129 130 # only display error messages if the current131 # verbosity setting >= the minimum verbosity level132 # needed for that message to be displayed.133 134 $verbosity_setting = $default_verbosity unless defined $verbosity_setting;135 $min_verbosity = 1 unless defined $min_verbosity;136 if($verbosity_setting >= $min_verbosity) { # by default display all 1 messages137 print STDERR "$msg";138 }139 }140 141 # Method to send a command to a GS2 or GS3 library_URL142 # the commands used in this script can be activate, deactivate, ping,143 # and is-persistent (is-persistent only implemented for GS2).144 sub config {145 my ($library_url, $command, $check_message_against_regex, $site, $expected_error_code, $silent) = @_;146 # Gatherer.java's configGS3Server doesn't use the site variable147 # so we don't have to either148 149 # for GS2, getting the HTTP status isn't enough, we need to read the output150 # since this is what CollectionManager.config() stipulates.151 # Using LWP::UserAgent::get($url) for this152 153 if(!defined $library_url) {154 return 0;155 }156 else {157 $ua->timeout(5); # set LWP useragent to 5s max timeout for testing the URL158 # Need to set this, else it takes I don't know how long to timeout159 # http://www.perlmonks.org/?node_id=618534160 161 # http://search.cpan.org/~gaas/libwww-perl-6.04/lib/LWP/UserAgent.pm162 # use LWP::UserAgent's get($url) since it returns an HTTP::Response code163 164 my $response_obj = $ua->get( $library_url.$command);165 166 # $response_obj->content stores the content and $response_obj->code the HTTP response code167 my $response_code = $response_obj->code();168 169 if(LWP::Simple::is_success($response_code)) {# $response_code eq RC_OK) { # LWP::Simple::is_success($response_code)170 &print_msg("*** Command $library_url$command\n", 3);171 &print_msg("*** HTTP Response Status: $response_code - Complete.", 3);172 173 # check the page content is as expected174 my $response_content = $response_obj->content;175 my $resultstr = $response_content;176 $resultstr =~ s@.*gs_content\"\>@@s;177 $resultstr =~ s@</div>.*@@s;178 179 if($response_content =~ m/$check_message_against_regex/) {180 &print_msg(" Response as expected.\n", 3);181 &print_msg("@@@@@@ Got result:\n$resultstr\n", 4);182 return 1;183 } else {184 # if we expect the collection to be inactive, then we'd be in silent mode: if so,185 # don't print out the "ping did not succeed" response, but print out any other messages186 187 # So we only suppress the ping col "did not succeed" response if we're in silent mode188 # But if any message other than ping "did not succeed" is returned, we always print it189 if($response_content !~ m/did not succeed/ || !$silent) {190 &print_msg("\n\tBUT: command $library_url$command response UNEXPECTED.\n", 3);191 &print_msg("*** Got message:\n$response_content.\n", 4);192 &print_msg("*** Got result:\n$resultstr\n", 3);193 }194 return 0; # ping on a collection may "not succeed."195 }196 }197 elsif(LWP::Simple::is_error($response_code)) { # method exported by LWP::Simple, along with HTTP::Status constants198 # check the page content is as expected199 if(defined $expected_error_code && $response_code == $expected_error_code) {200 &print_msg(" Response status $response_code as expected.\n", 3);201 } else {202 &print_msg("*** Command $library_url$command\n");203 &print_msg("*** Unexpected error. HTTP Response Status: $response_code - Failed.\n");204 }205 return 0; # return false, since the response_code was an error, expected or not206 }207 else {208 &print_msg("*** Command $library_url$command\n");209 &print_msg("*** Unexpected error. HTTP Response Status: $response_code - Failed.\n");210 return 0;211 }212 }213 }214 215 sub deactivate_collection {216 my ($library_url, $gs_mode, $qualified_collection, $site) = @_;217 218 if($gs_mode eq "gs2") {219 my $DEACTIVATE_COMMAND = "?a=config&cmd=release-collection&c=";220 my $check_message_against_regex = q/configured release-collection/;221 config($library_url, $DEACTIVATE_COMMAND.$qualified_collection, $check_message_against_regex);222 }223 elsif ($gs_mode eq "gs3") {224 my $DEACTIVATE_COMMAND = "?a=s&sa=d&st=collection&sn=";225 my $check_message_against_regex = "collection: $qualified_collection deactivated";226 config($library_url, $DEACTIVATE_COMMAND.$qualified_collection, $check_message_against_regex, $site);227 }228 }229 230 sub activate_collection {231 my ($library_url, $gs_mode, $qualified_collection, $site) = @_;232 233 if($gs_mode eq "gs2") {234 my $ACTIVATE_COMMAND = "?a=config&cmd=add-collection&c=";235 my $check_message_against_regex = q/configured add-collection/;236 config($library_url, $ACTIVATE_COMMAND.$qualified_collection, $check_message_against_regex);237 }238 elsif ($gs_mode eq "gs3") {239 my $ACTIVATE_COMMAND = "?a=s&sa=a&st=collection&sn=";240 my $check_message_against_regex = "collection: $qualified_collection activated";241 config($library_url, $ACTIVATE_COMMAND.$qualified_collection, $check_message_against_regex, $site);242 }243 }244 245 sub ping {246 my ($library_url, $command, $gs_mode, $site, $silent) = @_;247 248 # If the GS server is not running, we *expect* to see a "500" status code.249 # If the GS server is running, then "Ping" ... "succeeded" is expected on success.250 # When pinging an inactive collection, it will say it did "not succeed". This is251 # a message of interest to return.252 my $check_responsemsg_against_regex = q/(succeeded)/;253 my $expected_error_code = 500;254 255 &print_msg("*** COMMAND WAS: |$command|***\n", 4);256 257 return config($library_url, $command, $check_responsemsg_against_regex, $site, $expected_error_code, $silent);258 }259 260 # send a pingaction to the GS library. General server-level ping.261 sub ping_library {262 my ($library_url, $gs_mode, $site) = @_;263 264 my $command = "";265 if($gs_mode eq "gs2") {266 $command = "?a=ping";267 }268 elsif ($gs_mode eq "gs3") {269 $command = "?a=s&sa=ping";270 }271 return &ping($library_url, $command, $gs_mode, $site);272 }273 274 275 # send a pingaction to a collection in GS library to check if it's active276 sub ping_library_collection {277 my ($library_url, $gs_mode, $qualified_collection, $site, $silent) = @_;278 279 my $command = "";280 if($gs_mode eq "gs2") {281 $command = "?a=ping&c=$qualified_collection";282 }283 elsif ($gs_mode eq "gs3") {284 $command = "?a=s&sa=ping&st=collection&sn=$qualified_collection";285 }286 return &ping($library_url, $command, $gs_mode, $site, $silent);287 }288 289 # return true if server is persistent, by calling is-persistent on library_url290 # this is only for GS2, since the GS3 server is always persistent291 sub is_persistent {292 my ($library_url, $gs_mode) = @_;293 294 if($gs_mode eq "gs3") { # GS3 server is always persistent295 return 1;296 }297 298 my $command = "?a=is-persistent";299 my $check_responsemsg_against_regex = q/true/; # isPersistent: true versus isPersistent: false300 return config($library_url, $command, $check_responsemsg_against_regex);301 }302 303 sub get_library_URL {304 my ($gs_mode, $lib_name) = @_; # gs_mode can be gs3 or gs2, lib_name is the custom servlet name305 306 # If we get here, we are dealing with a server included with GS.307 # For GS3, we ask ant for the library URL.308 # For GS2, we derive the URL from the llssite.cfg file.309 310 my $url = undef;311 312 if($gs_mode eq "gs2") {313 my $llssite_cfg = &FileUtils::filenameConcatenate($ENV{'GSDLHOME'}, "llssite.cfg");314 315 if(-f $llssite_cfg) {316 # check llssite.cfg for line with url property317 # for server.exe also need to use portnumber and enterlib properties318 319 # Read in the entire contents of the file in one hit320 if (!open (FIN, $llssite_cfg)) {321 &print_msg("activate.pl::get_library_URL failed to open $llssite_cfg ($!)\n");322 return undef;323 }324 325 my $contents;326 sysread(FIN, $contents, -s FIN);327 close(FIN);328 329 my @lines = split(/[\n\r]+/, $contents); # split on carriage-returns and/or linefeeds330 my $enterlib = "";331 my $portnumber = ""; # will remain empty (implicit port 80) unless it's specifically been assigned332 333 foreach my $line (@lines) {334 if($line =~ m/^url=(.*)$/) {335 $url = $1;336 } elsif($line =~ m/^enterlib=(.*)$/) {337 $enterlib = $1;338 } elsif($line =~ m/^portnumber=(.*)$/) {339 $portnumber = $1;340 }341 }342 343 if(!$url) {344 return undef;345 }346 elsif($url eq "URL_pending") { # library is not running347 # do not process url=URL_pending in the file, since for server.exe348 # this just means the Enter Library button hasn't been pressed yet349 $url = undef;350 }351 else {352 # In the case of server.exe, need to do extra work to get the proper URL353 # But first, need to know whether we're indeed dealing with server.exe:354 355 # compare the URL's domain to the full URL356 # E.g. for http://localhost:8383/greenstone3/cgi-bin, the domain is localhost:8383357 my $uri = URI->new( $url );358 my $host = $uri->host;359 #print STDERR "@@@@@ host: $host\n";360 if($url =~ m/http:\/\/$host(\/)?$/) {361 #if($url !~ m/http:\/\/$host:$portnumber(\/)?/ || $url =~ m/http:\/\/$host(\/)?$/) {362 # (if the URL does not contain the portnumber, OR if the port is implicitly 80 and)363 # If the domain with http:// prefix is completely the same as the URL, assume server.exe364 # then the actual URL is the result of suffixing the port and enterlib properties in llssite.cfg365 $url = $url.":".$portnumber.$enterlib;366 } # else, apache web server367 368 }369 }370 } elsif($gs_mode eq "gs3") {371 # Either check build.properties for tomcat.server, tomcat.port and app.name (and default servlet name).372 # app.name is stored in app.path by build.xml. Need to move app.name in build.properties from build.xml373 374 # Or, run the new target get-default-servlet-url375 # the output can look like:376 #377 # Buildfile: build.xml378 # [echo] os.name: Windows Vista379 #380 # get-default-servlet-url:381 # [echo] http://localhost:8383/greenstone3/library382 # BUILD SUCCESSFUL383 # Total time: 0 seconds384 385 #my $output = qx/ant get-default-servlet-url/; # backtick operator, to get STDOUT (else 2>&1)386 # see http://stackoverflow.com/questions/799968/whats-the-difference-between-perls-backticks-system-and-exec387 388 # The get-default-servlet-url ant target can be run from anywhere by specifying the389 # location of GS3's ant build.xml buildfile. Activate.pl can be run from anywhere for GS3390 # GSDL3SRCHOME will be set for GS3 by gs3-setup.sh, a step that would have been necessary391 # to run the activate.pl script in the first place392 my $perl_command = "ant -buildfile \"$ENV{'GSDL3SRCHOME'}/build.xml\" get-default-servlet-url";393 394 if (open(PIN, "$perl_command |")) {395 while (defined (my $perl_output_line = <PIN>)) {396 if($perl_output_line =~ m@http:\/\/(\S*)@) { # grab all the non-whitespace chars397 $url="http://".$1;398 }399 }400 close(PIN);401 } else {402 &print_msg("activate.pl::get_library_URL: Failed to run $perl_command to work out library URL for $gs_mode\n");403 }404 if(defined $lib_name) {405 # replace the servlet_name portion of the url found, with the given library_name406 $url =~ s@/[^/]*$@/$lib_name@;407 }408 }409 410 # either the url is still undef or it is now set411 #print STDERR "\n@@@@@ final URL:|$url|\n" if $url;412 #print STDERR "\n@@@@@ URL still undef\n" if !$url;413 return $url;414 }415 416 ### UNUSED METHODS TO MOVE TO util.pm?417 418 # This method is now unused. Using ping_library instead to send the ping action to a419 # GS2/GS3 server. This method can be used more generally to test whether a URL is alive.420 # http://search.cpan.org/dist/libwww-perl/lib/LWP/Simple.pm421 # and http://www.perlmonks.org/?node_id=618534422 sub is_URL_active {423 my $url = shift(@_); # gs3 or gs2 URL424 425 my $status = 0;426 if(defined $url) {427 $ua->timeout(10); # set LWP useragent to 5s max timeout for testing the URL428 # Need to set this, else it takes I don't know how long to timeout429 # http://www.perlmonks.org/?node_id=618534430 431 $status = LWP::Simple::head($url); # returns empty list of headers if it fails432 # LWP::Simple::get($url) is more intensive, so don't need to do that433 #print STDERR "**** $url is alive.\n" if $status;434 }435 return $status;436 }437 438 # Pinging seems to always return true, so this method doesn't work439 sub pingHost {440 my $url = shift(@_); # gs3 or gs2 URL441 442 my $status = 0;443 if(defined $url) {444 # Get just the domain. "http://localhost/gsdl?uq=332033495" becomes "localhost"445 # "http://localhost/greenstone/cgi-bin/library.cgi" becomes "localhost" too446 447 #my $host = $url;448 #$host =~ s@^http:\/\/(www.)?@@;449 #$host =~ s@\/.*@@;450 #print STDERR "**** HOST: $host\n";451 452 # More robust way453 # http://stackoverflow.com/questions/827024/how-do-i-extract-the-domain-out-of-an-url454 my $uri = URI->new( $url );455 my $host = $uri->host;456 457 # Ping the host. http://perldoc.perl.org/Net/Ping.html458 my $p = Net::Ping->new();459 $status = $p->ping($host); # || 0. Appears to set to undef rather than 0460 print STDERR "**** $host is alive.\n" if $status; #print "$host is alive.\n" if $p->ping($host);461 $p->close();462 }463 # return whether pinging was a success or failure464 return $status;465 }466 467 sub do_deactivate {468 my($is_persistent_server, $library_url, $gs_mode, $site, $qualified_collection) = @_;469 470 471 &print_msg("Pinging $library_url\n");472 if (&ping_library($library_url, $gs_mode, $site)) { # server running473 474 # server is running, so release the collection if475 # the server is persistent and the collection is active476 &print_msg("Checking if Greenstone server is persistent\n");477 $is_persistent_server = &is_persistent($library_url, $gs_mode);478 479 if ($is_persistent_server) { # only makes sense to issue activate and deactivate cmds to a persistent server480 481 &print_msg("Checking if the collection $qualified_collection is already active\n");482 my $collection_active = &ping_library_collection($library_url, $gs_mode, $qualified_collection, $site);483 484 if ($collection_active) {485 &print_msg("De-activating collection $qualified_collection\n");486 &deactivate_collection($library_url, $gs_mode, $qualified_collection, $site);487 }488 else {489 &print_msg("Collection is not active => No need to deactivate\n");490 }491 }492 else {493 &print_msg("Server is not persistent => No need to deactivate collection\n");494 }495 }496 else {497 &print_msg("No response to Ping => Taken to mean server is not running\n");498 }499 500 return $is_persistent_server;501 }502 503 sub do_activate {504 my($is_persistent_server, $library_url, $gs_mode, $site, $qualified_collection) = @_;505 506 507 &print_msg("Pinging $library_url\n");508 if (&ping_library($library_url, $gs_mode, $site)) { # server running509 510 # don't need to work out persistency of server more than once, since the libraryURL hasn't changed511 if (!defined $is_persistent_server) {512 &print_msg("Checking if Greenstone server is persistent\n");513 $is_persistent_server = &is_persistent($library_url, $gs_mode);514 }515 516 517 if ($is_persistent_server) { # persistent server, so can try activating collection518 519 &print_msg("Checking if the collection $qualified_collection is not already active\n");520 521 # Since we could have deactivated the collection at this point,522 # it is likely that it is not yet active. When pinging the collection523 # a "ping did not succeed" message is expected, therefore tell the ping524 # to proceed silently525 my $silent = 1;526 my $collection_active = &ping_library_collection($library_url, $gs_mode, $qualified_collection, $site, $silent);527 528 if (!$collection_active) {529 &print_msg(" Collection is not active.\n");530 &print_msg("Activating collection $qualified_collection\n");531 &activate_collection($library_url, $gs_mode, $qualified_collection, $site);532 533 # unless an error occurred, the collection should now be active:534 $collection_active = &ping_library_collection($library_url, $gs_mode, $qualified_collection, $site); # not silent if ping did not succeed535 if(!$collection_active) {536 &print_msg("ERROR: collection $qualified_collection did not get activated\n");537 }538 }539 else {540 &print_msg("Collection is already active => No need to activate\n");541 }542 }543 else {544 &print_msg("Server is not persistent => No need to activate collection\n");545 }546 }547 else {548 &print_msg("No response to Ping => Taken to mean server is not running\n");549 }550 551 return $is_persistent_server;552 }553 97 554 98 … … 577 121 578 122 # http://stackoverflow.com/questions/6156742/how-can-i-capture-the-complete-commandline-in-perl 579 #print STDERR "@@@@@@@@@ ACTIVATE CMD: " . join " ", $0, @ARGV ;123 #print STDERR "@@@@@@@@@ ACTIVATE CMD: " . join " ", $0, @ARGV . "\n"; 580 124 581 125 # get the collection details … … 592 136 my $keepold = 0; 593 137 my $incremental = 0; # used by solr 594 595 # some further parameters 596 my $just_activate = 0; # don't do anything else than activating the collection if the server is running 597 my $just_deactivate = 0; # don't do anything else than deactivating the collection if the server is running 598 599 600 my $library_url = $ENV{'GSDL_LIBRARY_URL'} || undef; # to be specified on the cmdline if not using a GS-included web server 138 139 my $default_verbosity = 2; 140 141 my $library_url = undef; # to be specified on the cmdline if not using a GS-included web server 601 142 # the GSDL_LIBRARY_URL env var is useful when running cmdline buildcol.pl in the linux package manager versions of GS3 602 143 … … 627 168 elsif ($arg eq "-incremental") { 628 169 $incremental = 1; 629 }630 elsif ($arg eq "-justactivate") {631 $just_activate = 1;632 }633 elsif ($arg eq "-justdeactivate") {634 $just_deactivate = 1;635 170 } 636 171 elsif ($arg eq "-library_url") { … … 653 188 $build_dir = &FileUtils::filenameConcatenate($collection_dir, "building") unless (defined $build_dir); 654 189 $index_dir = &FileUtils::filenameConcatenate($collection_dir, "index") unless (defined $index_dir); 655 656 &print_task_msg("Running Collection Activation Stage"); 190 191 my $gsserver = new activate($qualified_collection, $site, $default_verbosity, $build_dir, $index_dir, $collect_dir, $library_url, $library_name); 192 193 $gsserver->print_task_msg("Running Collection Activation Stage"); 657 194 658 195 # get and check the collection name 659 196 if ((&colcfg::use_collection($site, $qualified_collection, $collect_dir)) eq "") { 660 &print_msg("Unable to use collection \"$qualified_collection\" within \"$collect_dir\"\n");197 $gsserver->print_msg("Unable to use collection \"$qualified_collection\" within \"$collect_dir\"\n"); 661 198 exit -1; 662 199 } … … 665 202 # Beware: Only if $site is specified in the cmdline does collectionConfig.xml get 666 203 # generated and does $gs_mode=gs3, else collect.cfg gets generated and $gs_mode=gs2 667 my $gs_mode = "gs2"; 668 if ((defined $site) && ($site ne "")) { # GS3 669 $gs_mode = "gs3"; 670 } 204 my $gs_mode = $gsserver->{'gs_mode'}; # "gs2" or "gs3", based on $site variable 205 671 206 my $collect_cfg_filename = &colcfg::get_collect_cfg_name(STDERR, $gs_mode); 672 207 my $collectcfg = &colcfg::read_collection_cfg ($collect_cfg_filename,$gs_mode); … … 701 236 # activate and deactivate collections including for the incremental case 702 237 if(!&FileUtils::directoryExists($build_dir)) { 703 &print_msg("No building folder at $build_dir to move to index.\n");238 $gsserver->print_msg("No building folder at $build_dir to move to index.\n"); 704 239 exit -1 unless ($buildtype eq "solr"); #&& $incremental); 705 240 } elsif (&FileUtils::isDirectoryEmpty($build_dir)) { 706 &print_msg("Nothing in building folder $build_dir to move into index folder.\n");241 $gsserver->print_msg("Nothing in building folder $build_dir to move into index folder.\n"); 707 242 exit -1 unless ($buildtype eq "solr"); #&& $incremental); 708 243 } … … 718 253 # and apache for GS2), we work out the library URL: 719 254 if(!$library_url) { 720 $library_url = &get_library_URL($gs_mode, $library_name); # returns undef if no server is running255 $library_url = $gsserver->get_library_URL(); # returns undef if no server is running 721 256 } 722 257 723 258 # CollectionManager's installCollection phase in GLI 724 # 2. Ping the library URL, and if it's a persistent server and running, release the collection 725 my $is_persistent_server = undef; 726 if($library_url && !$skipactivation) { # undef if no valid server URL 727 if($just_deactivate || !$just_activate) { # either $justdeactivate is provided or neither $justactivate and $justdeactivate are provided 728 # and deactivation will go through 729 $is_persistent_server = &do_deactivate($is_persistent_server, $library_url, $gs_mode, $site, $qualified_collection); 730 } 259 # 2. Ping the library URL, and if it's a persistent server and running, release the collection 260 if($library_url && !$skipactivation) { # undef if no valid server URL 261 $gsserver->do_deactivate(); 731 262 } 732 263 733 264 # 2b. If we're working with a solr collection, then start up the solrserver now. 734 265 my $solr_server; 735 if(!$just_activate && !$just_deactivate) {736 266 my @corenames = (); 737 267 if($buildtype eq "solr") { # start up the jetty server … … 778 308 779 309 if(&FileUtils::directoryExists($index_dir)) { 780 &print_task_msg("Removing \"index\"");310 $gsserver->print_task_msg("Removing \"index\""); 781 311 782 312 if ($buildtype eq "solr") { … … 793 323 794 324 if (&FileUtils::directoryExists($index_dir)) { 795 &print_msg("The index directory $index_dir could not be deleted.\n"); # CollectionManager.Index_Not_Deleted325 $gsserver->print_msg("The index directory $index_dir could not be deleted.\n"); # CollectionManager.Index_Not_Deleted 796 326 } 797 327 } … … 808 338 809 339 # Move the building directory to become the new index directory 810 &print_task_msg("Moving \"building\" -> \"index\"");340 $gsserver->print_task_msg("Moving \"building\" -> \"index\""); 811 341 &FileUtils::moveFiles($build_dir, $index_dir); 812 342 if(&FileUtils::directoryExists($build_dir) || !&FileUtils::directoryExists($index_dir)) { 813 &print_msg("Could not move $build_dir to $index_dir.\n"); # CollectionManager.Build_Not_Moved343 $gsserver->print_msg("Could not move $build_dir to $index_dir.\n"); # CollectionManager.Build_Not_Moved 814 344 } 815 345 } … … 823 353 824 354 if($build_dir eq $index_dir) { # building_dir can have been set to "index" folder, see incremental-buildcol.pl 825 &print_task_msg("building folder is index folder, not moving");355 $gsserver->print_task_msg("building folder is index folder, not moving"); 826 356 } else { 827 357 # Copy just the contents of building dir into the index dir, overwriting 828 358 # existing files, but don't replace index with building. 829 &print_task_msg("Moving \"building\" -> \"index\"");359 $gsserver->print_task_msg("Moving \"building\" -> \"index\""); 830 360 &FileUtils::moveDirectoryContents($build_dir, $index_dir); 831 361 } … … 854 384 $solr_server->solr_xml_to_solr_xml_in(); 855 385 } 856 }#end if(!$just_activate && !$just_deactivate) 386 857 387 858 388 # 4. Ping the library URL, and if it's a persistent server and running, activate the collection again … … 861 391 if($build_dir eq $index_dir || !&FileUtils::directoryExists($build_dir) || &FileUtils::isDirectoryEmpty($build_dir)) { 862 392 863 if($library_url && (!$skipactivation)) { # undef if no valid server URL 864 if($just_activate || !$just_deactivate) { # either $justactivate is provided or neither $justdeactivate and $justactivate are provided 865 # then activation will go through 866 $is_persistent_server = &do_activate($is_persistent_server, $library_url, $gs_mode, $site, $qualified_collection); 867 } 393 if($library_url && !$skipactivation) { # undef if no valid server URL 394 $gsserver->do_activate(); 868 395 } 869 396 } else { # installcollection failed 870 397 #CollectionManager.Preview_Ready_Failed 871 &print_msg("Building directory is not empty or still exists. Failed to properly move $build_dir to $index_dir.\n");872 } 873 874 &print_msg("\n");875 876 if( !$just_activate && !$just_deactivate &&$buildtype eq "solr") {398 $gsserver->print_msg("Building directory is not empty or still exists. Failed to properly move $build_dir to $index_dir.\n"); 399 } 400 401 $gsserver->print_msg("\n"); 402 403 if($buildtype eq "solr") { 877 404 if ($solr_server->explicitly_started()) { 878 405 $solr_server->stop(); -
main/trunk/greenstone2/perllib/buildcolutils.pm
r30518 r30520 33 33 use File::Basename; 34 34 35 use activate; 35 36 use colcfg; 36 37 use dbutil; … … 685 686 686 687 if(!$dbSupportsConcurrentRW) { 687 #$self->{'justdeactivate'} = 1; 688 #$self->activate_collection(); 689 #$self->{'justdeactivate'} = 0; 690 $self->activate_collection("just_deactivate"); 688 # all except the collection (1st parameter) can be empty. For GS3, also set the site parameter 689 my $gsserver = new activate( $self->get_collection(), $self->{'site'}, $self->{'verbosity'}, $self->{'builddir'}, $self->{'indexdir'}, $self->{'collectdir'}, $self->{'library_url'}, $self->{'library_name'}); 690 $gsserver->print_task_msg("About to deactivate collection ".$self->get_collection()); 691 #$self->{'library_url'} = $gsserver->get_library_URL(); 692 $gsserver->do_deactivate(); 691 693 } 692 694 $_->make_infodatabase(); … … 718 720 719 721 if(!$dbSupportsConcurrentRW) { 720 $self->activate_collection("just_deactivate"); 722 # all except the collection (1st parameter) can be empty. For GS3, also set the site parameter 723 my $gsserver = new activate( $self->get_collection(), $self->{'site'}, $self->{'verbosity'}, $self->{'builddir'}, $self->{'indexdir'}, $self->{'collectdir'}, $self->{'library_url'}, $self->{'library_name'}); 724 $gsserver->print_task_msg("About to deactivate collection ".$self->get_collection()); 725 #$self->{'library_url'} = $gsserver->get_library_URL(); 726 $gsserver->do_deactivate(); 721 727 } 722 728 $_->make_infodatabase(); … … 794 800 sub activate_collection 795 801 { 796 my $self = shift(@_); 797 my $activation_cmd = shift(@_); 798 my($just_activate, $just_deactivate); 799 if(defined $activation_cmd) { 800 $just_deactivate = 1 if($activation_cmd eq "just_deactivate"); 801 $just_activate = 1 if($activation_cmd eq "just_activate"); 802 if($activation_cmd eq "just_deactivate_and_activate") { 803 $just_deactivate = 1; 804 $just_activate = 1; 805 } 806 } 802 my $self = shift(@_); 807 803 808 804 # if buildcol.pl was run with -activate, need to run activate.pl … … 812 808 #my $quoted_argv = join(" ", map { "\"$_\"" } @ARGV); 813 809 my @activate_argv = (); 810 push(@activate_argv, '-library_url', $self->{'library_url'}) if ($self->{'library_url'}); 811 push(@activate_argv, '-library_name', $self->{'library_name'}) if ($self->{'library_name'}); 814 812 push(@activate_argv, '-collectdir', $self->{'collectdir'}) if ($self->{'collectdir'}); 815 813 push(@activate_argv, '-builddir', $self->{'builddir'}) if ($self->{'builddir'}); 814 push(@activate_argv, '-indexdir', $self->{'indexdir'}) if ($self->{'indexdir'}); 816 815 push(@activate_argv, '-site', $self->{'site'}) if ($self->{'site'}); 817 816 push(@activate_argv, '-verbosity', $self->{'verbosity'}) if ($self->{'verbosity'}); … … 819 818 push(@activate_argv, '-keepold') if ($self->{'keepold'}); 820 819 push(@activate_argv, '-incremental') if ($self->{'incremental'}); 821 push(@activate_argv, '- justactivate') if ($just_activate || $self->{'justactivate'});822 push(@activate_argv, '-justdeactivate') if ($just_deactivate || $self->{'justdeactivate'}); 820 push(@activate_argv, '-skipactivation', $self->{'skipactivation'}) if ($self->{'skipactivation'}); 821 823 822 my $quoted_argv = join(' ', map { "\"$_\"" } @activate_argv); 824 823 my $activatecol_cmd = '"' . &util::get_perl_exec(). '" -S activate.pl ' . $quoted_argv . ' "' . $self->get_collection() . '"'; -
main/trunk/greenstone2/perllib/downloaders/WgetDownload.pm
r28560 r30520 246 246 #print STDOUT "Command is: $command\n"; 247 247 248 # Wget's output needs to be monitored to find out when it has naturally termi anted.248 # Wget's output needs to be monitored to find out when it has naturally terminated. 249 249 # Wget's output is sent to its STDERR so we can't use open2 without doing 2>&1. 250 250 # On linux, 2>&1 launches a subshell which then launches wget, meaning that killing
Note:
See TracChangeset
for help on using the changeset viewer.