Changeset 24483 for gs3-extensions/solr/trunk/src/perllib/solrserver.pm
- Timestamp:
- 2011-08-26T00:22:29+12:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
gs3-extensions/solr/trunk/src/perllib/solrserver.pm
r24453 r24483 28 28 29 29 use strict; 30 #no strict 'refs'; 30 31 31 32 use solrutil; 33 34 my $key_count = 0; 32 35 33 36 sub new { 34 37 my $class = shift(@_); 35 38 36 my $self = { 'jetty_stop_key' => "greenstone-solr" }; 39 $key_count++; 40 my $self = { 'jetty_stop_key' => "greenstone-solr-".$$."-".$key_count }; 37 41 38 42 my $search_path = &solrutil::get_search_path(); … … 44 48 $self->{'jetty_explicitly_started'} = undef; 45 49 50 my $jetty_server_port = $ENV{'SOLR_JETTY_PORT'}; 51 my $base_url = "http://localhost:$jetty_server_port/solr/"; 52 my $admin_url = "http://localhost:$jetty_server_port/solr/admin/cores"; 53 54 $self->{'base-url'} = $base_url; 55 $self->{'admin-url'} = $admin_url; 56 46 57 return bless $self, $class; 47 58 } 59 60 61 62 sub _wget_service 63 { 64 my $self = shift (@_); 65 my ($output_format,$url,$cgi_get_args) = @_; 66 67 my $full_url = $url; 68 69 $url .= "?$cgi_get_args" if (defined $cgi_get_args); 70 71 my $cmd = "wget -O - \"$url\" 2>&1"; 72 73 ## print STDERR "**** wget cmd: $cmd\n"; 74 75 my $preamble_output = ""; 76 my $xml_output = ""; 77 my $error_output = undef; 78 79 my $in_preamble = ($output_format eq "xml") ? 1 : 0; 80 81 if (open(WIN,"$cmd |")) { 82 83 my $line; 84 while (defined ($line=<WIN>)) { 85 86 if ($line =~ m/ERROR \d+:/) { 87 chomp $line; 88 $error_output = $line; 89 last; 90 } 91 elsif ($line =~ m/failed: Connection refused/) { 92 chomp $line; 93 $error_output = $line; 94 last; 95 } 96 elsif ($in_preamble) { 97 if ($line =~ m/<.*>/) { 98 $in_preamble = 0; 99 } 100 else { 101 $preamble_output .= $line; 102 } 103 } 104 105 if (! $in_preamble) { 106 $xml_output .= $line; 107 } 108 } 109 close(WIN); 110 111 } 112 else { 113 $error_output = "Error: failed to run $cmd\n"; 114 $error_output .= " $!\n"; 115 } 116 117 my $output = { 'preamble' => $preamble_output, 118 'output' => $xml_output, 119 'error' => $error_output }; 120 121 return $output; 122 } 123 124 125 sub _base_service 126 { 127 my $self = shift (@_); 128 my ($cgi_get_args) = @_; 129 130 my $base_url = $self->{'base-url'}; 131 132 return $self->_wget_service("html",$base_url,$cgi_get_args); 133 } 134 135 sub _admin_service 136 { 137 my $self = shift (@_); 138 my ($cgi_get_args) = @_; 139 140 my $admin_url = $self->{'admin-url'}; 141 142 return $self->_wget_service("xml",$admin_url,$cgi_get_args); 143 } 144 145 146 sub server_running 147 { 148 my $self = shift @_; 149 150 my $output = $self->_base_service(); 151 152 my $have_error = defined $output->{'error'}; 153 154 my $running = !$have_error; 155 156 return $running; 157 } 158 159 160 sub admin_ping_core 161 { 162 my $self = shift @_; 163 my ($core) = @_; 164 165 my $cgi_get_args = "action=STATUS&core=$core"; 166 167 my $ping_status = 1; 168 169 my $output = $self->_admin_service($cgi_get_args); 170 171 if (defined $output->{'error'}) { 172 # severe error, such as failing to connect to the server 173 $ping_status = 0; 174 175 my $url = $output->{'url'}; 176 my $preamble = $output->{'preamble'}; 177 my $error = $output->{'error'}; 178 179 print STDERR "----\n"; 180 print STDERR "Error: Failed to get XML response from:\n"; 181 print STDERR " $url\n"; 182 print STDERR "Output was:\n"; 183 print STDERR $preamble if ($preamble ne ""); 184 print STDERR "$error\n"; 185 print STDERR "----\n"; 186 } 187 else { 188 189 # If the collection doesn't exist yet, then there will be 190 # an empty element of the form: 191 # <lst name="collect-doc"/> 192 # where 'collect' is the actual name of the collection, 193 # such as demo 194 195 my $xml_output = $output->{'output'}; 196 197 my $empty_element="<lst\\s+name=\"$core\"\\s*\\/>"; 198 199 $ping_status = !($xml_output =~ m/$empty_element/s); 200 } 201 202 203 return $ping_status; 204 } 205 206 207 sub admin_reload_core 208 { 209 my $self = shift @_; 210 my ($core) = @_; 211 212 my $cgi_get_args = "action=RELOAD&core=$core"; 213 214 $self->_admin_service($cgi_get_args); 215 } 216 217 218 sub admin_create_core 219 { 220 my $self = shift @_; 221 my ($core) = @_; 222 223 my ($ds_idx) = ($core =~ m/^.*-(.*)$/); 224 225 my $cgi_get_args = "action=CREATE&name=$core"; 226 227 my $collect_home = $ENV{'GSDLCOLLECTDIR'}; 228 my $etc_dirname = &util::filename_cat($collect_home,"etc"); 229 230 my $build_dir = $self->{'build_dir'}; 231 my $idx_dirname = &util::filename_cat($build_dir,$ds_idx); 232 233 $cgi_get_args .= "&instanceDir=$etc_dirname"; 234 $cgi_get_args .= "&dataDir=$idx_dirname"; 235 236 $self->_admin_service($cgi_get_args); 237 } 238 239 48 240 49 241 sub start … … 67 259 my $server_java_cmd = "java $server_props -jar \"$full_server_jar\""; 68 260 69 ## print STDERR "**** server cmd = $server_java_cmd\n"; 70 71 my $pid = open(STARTIN,"-|"); 72 73 if ($pid==0) { 74 # child process that will start up jetty and monitor output 75 76 setpgrp(0,0); 261 ## print STDERR "**** server cmd start = $server_java_cmd\n"; 262 263 my $server_status = "unknown"; 264 265 my $server_already_running = $self->server_running(); 266 267 ## print STDERR "**** already running = $server_already_running\n"; 268 269 if ($server_already_running) { 270 $server_status = "already-running"; 271 } 272 elsif (open(STARTIN,"$server_java_cmd 2>&1 |")) { 273 274 my $line; 275 while (defined($line=<STARTIN>)) { 276 # Scan through output until you see a line like: 277 # 2011-08-22 .. :INFO::Started SocketConnector@0.0.0.0:8983 278 # which signifies that the server has started up and is 279 # "ready and listening" 77 280 78 exec "$server_java_cmd 2>&1" || die "Failed to execute $server_java_cmd\n$!\n"; 79 # everything stops here 80 } 81 82 my $server_status = "unknown"; 83 84 my $line; 85 while (defined($line=<STARTIN>)) { 86 # Scan through output until you see a line like: 87 # 2011-08-22 .. :INFO::Started SocketConnector@0.0.0.0:8983 88 # which signifies that the server has started up and is 89 # "ready and listening" 90 91 ## print STDERR "**** $line"; 281 ## print STDERR "**** $line"; 92 282 93 # skip annoying "not listening" message 94 next if ($line =~ m/WARN:\s*Not listening on monitor port/); 95 96 if (($line =~ m/^(WARN|ERROR|SEVERE):/) 97 || ($line =~ m/^[0-9 :-]*(WARN|ERROR|SEVERE)::/)) { 98 print "Jetty startup: $line"; 99 } 100 101 102 if ($line =~ m/WARN::failed SocketConnector/) { 103 if ($line =~ m/Address already in use/) { 104 $server_status = "already-running"; 105 } 106 else { 107 $server_status = "failed-to-start"; 108 } 109 last; 110 } 111 112 if ($line =~ m/INFO::Started SocketConnector/) { 113 $server_status = "explicitly-started"; 114 last; 115 } 116 } 283 # skip annoying "not listening" message 284 next if ($line =~ m/WARN:\s*Not listening on monitor port/); 285 286 if (($line =~ m/^(WARN|ERROR|SEVERE):/) 287 || ($line =~ m/^[0-9 :-]*(WARN|ERROR|SEVERE)::/)) { 288 print "Jetty startup: $line"; 289 } 117 290 291 if ($line =~ m/WARN::failed SocketConnector/) { 292 if ($line =~ m/Address already in use/) { 293 $server_status = "already-running"; 294 } 295 else { 296 $server_status = "failed-to-start"; 297 } 298 last; 299 } 300 301 if ($line =~ m/INFO::Started SocketConnector/) { 302 $server_status = "explicitly-started"; 303 last; 304 } 305 } 306 } 307 else { 308 print STDERR "Error: failed to start solr-jetty-server\n"; 309 print STDERR "$!\n"; 310 print STDERR "Command attempted was:\n"; 311 print STDERR " $server_java_cmd\n"; 312 print STDERR "run from directory:\n"; 313 print STDERR " $solr_home\n"; 314 print STDERR "----\n"; 315 316 exit -1; 317 } 318 118 319 if ($server_status eq "explicitly-started") { 119 320 $self->{'jetty_explicitly_started'} = 1; 120 print "Jetty server ready and listening for connections on port $jetty_server_port\n"; 321 print "Jetty server ready and listening for connections on port"; 322 print " $jetty_server_port\n"; 121 323 122 324 # now we know the server is ready to accept connections, fork a … … 126 328 if (fork()==0) { 127 329 # child process 128 330 129 331 my $line; 130 332 while (defined ($line = <STARTIN>)) { … … 155 357 } 156 358 elsif ($server_status eq "already-running") { 157 print "Using existing server detected on port $jetty_server_port\n";359 print STDERR "Using existing server detected on port $jetty_server_port\n"; 158 360 $self->{'jetty_explicitly_started'} = 0; 159 160 # Kill of the child process 161 162 my $ks = kill(9,-$pid); 361 362 # silently stop our unneeded jetty server, using its unique key 363 364 # my $options = { 'do_wait' => 0, 'output_verbosity' => 2 }; 365 366 # $self->stop($options); 163 367 164 368 # Consume any remaining (buffered) output (not interested in values) 165 while (defined ($line = <STARTIN>)) { 369 # my $line; 370 # while (defined ($line = <STARTIN>)) { 166 371 # skip info lines 167 } 168 close(STARTIN); 169 } 170 else { 171 print STDERR "Failed to start Solr/Jetty web server on $jetty_server_port\n"; 372 # } 373 # close(STARTIN); 374 } 375 elsif ($server_status eq "failed-to-start") { 376 print STDERR "Started Solr/Jetty web server on port $jetty_server_port"; 377 print STDERR ", but encountered an initialization error\n"; 172 378 exit -1; 173 379 } 174 380 175 176 # else { 177 # print STDERR "Error: failed to start solr-jetty-server\n"; 178 # print STDERR "!$\n\n"; 179 # print STDERR "Command attempted was:\n"; 180 # print STDERR " $server_java_cmd\n"; 181 # print STDERR "run from directory:\n"; 182 # print STDERR " $solr_home\n"; 183 # print STDERR "----\n"; 184 185 # exit -1; 186 # } 187 188 # # If get to here then server started (and ready and listening) 189 # # *and* we are the parent process of the fork() 190 191 } 192 381 } 193 382 194 383 sub explicitly_started … … 198 387 return $self->{'jetty_explicitly_started'}; 199 388 } 389 200 390 201 391 … … 228 418 $server_props .= " -DSTOP.KEY=".$self->{'jetty_stop_key'}; 229 419 my $server_java_cmd = "java $server_props -jar \"$full_server_jar\" --stop"; 420 421 ## print STDERR "**** java server stop cmd:\n $server_java_cmd\n"; 422 230 423 if (open(STOPIN,"$server_java_cmd 2>&1 |")) { 231 424 … … 246 439 else { 247 440 print STDERR "Error: failed to stop solr-jetty-server\n"; 248 print STDERR " !$\n";441 print STDERR "$!\n"; 249 442 print STDERR "Command attempted was:\n"; 250 443 print STDERR " $server_java_cmd\n";
Note:
See TracChangeset
for help on using the changeset viewer.