SOLR-4228: Add full ping functionality to SolrPing in SolrJ

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1487189 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Shawn Heisey 2013-05-29 01:46:19 +00:00
parent 277c65f9b9
commit a41bfba673
5 changed files with 182 additions and 17 deletions

View File

@ -84,6 +84,9 @@ New Features
* SOLR-4048: Add findRecursive method to NamedList. (Shawn Heisey)
* SOLR-4228: SolrJ's SolrPing object has new methods for ping, enable, and
disable. (Shawn Heisey)
Bug Fixes
----------------------

View File

@ -17,50 +17,102 @@
package org.apache.solr.client.solrj.request;
import java.io.IOException;
import java.util.Collection;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.SolrPingResponse;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.util.ContentStream;
import java.io.IOException;
import java.util.Collection;
/**
* Verify that there is a working Solr core at the URL of a {@link SolrServer}.
* To use this class, the solrconfig.xml for the relevant core must include the
* request handler for <code>/admin/ping</code>.
*
*
* @since solr 1.3
*/
public class SolrPing extends SolrRequest
{
public class SolrPing extends SolrRequest {
/** serialVersionUID. */
private static final long serialVersionUID = 5828246236669090017L;
/** Request parameters. */
private ModifiableSolrParams params;
public SolrPing()
{
super( METHOD.GET, "/admin/ping" );
/**
* Create a new SolrPing object.
*/
public SolrPing() {
super(METHOD.GET, CommonParams.PING_HANDLER);
params = new ModifiableSolrParams();
}
@Override
public Collection<ContentStream> getContentStreams() {
return null;
}
@Override
public ModifiableSolrParams getParams() {
return params;
}
@Override
public SolrPingResponse process( SolrServer server ) throws SolrServerException, IOException
{
public SolrPingResponse process(SolrServer server)
throws SolrServerException, IOException {
long startTime = System.currentTimeMillis();
SolrPingResponse res = new SolrPingResponse();
res.setResponse( server.request( this ) );
res.setElapsedTime( System.currentTimeMillis()-startTime );
res.setResponse(server.request(this));
res.setElapsedTime(System.currentTimeMillis() - startTime);
return res;
}
/**
* Remove the action parameter from this request. This will result in the same
* behavior as {@code SolrPing#setActionPing()}. For Solr server version 4.0
* and later.
*
* @return this
*/
public SolrPing removeAction() {
params.remove(CommonParams.ACTION);
return this;
}
/**
* Set the action parameter on this request to enable. This will delete the
* health-check file for the Solr core. For Solr server version 4.0 and later.
*
* @return this
*/
public SolrPing setActionDisable() {
params.set(CommonParams.ACTION, CommonParams.DISABLE);
return this;
}
/**
* Set the action parameter on this request to enable. This will create the
* health-check file for the Solr core. For Solr server version 4.0 and later.
*
* @return this
*/
public SolrPing setActionEnable() {
params.set(CommonParams.ACTION, CommonParams.ENABLE);
return this;
}
/**
* Set the action parameter on this request to ping. This is the same as not
* including the action at all. For Solr server version 4.0 and later.
*
* @return this
*/
public SolrPing setActionPing() {
params.set(CommonParams.ACTION, CommonParams.PING);
return this;
}
}

View File

@ -59,6 +59,23 @@ public interface CommonParams {
/** number of documents to return starting at "start" */
public static final String ROWS ="rows";
// SOLR-4228 start
/** handler value for SolrPing */
public static final String PING_HANDLER = "/admin/ping";
/** "action" parameter for SolrPing */
public static final String ACTION = "action";
/** "disable" value for SolrPing action */
public static final String DISABLE = "disable";
/** "enable" value for SolrPing action */
public static final String ENABLE = "enable";
/** "ping" value for SolrPing action */
public static final String PING = "ping";
// SOLR-4228 end
//Issue 1726 start
/** score of the last document of the previous page */

View File

@ -49,7 +49,17 @@
<requestHandler name="standard" class="solr.StandardRequestHandler" default="true" />
<requestHandler name="/update" class="solr.UpdateRequestHandler" />
<requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
<requestHandler name="/admin/ping" class="solr.PingRequestHandler">
<lst name="invariants">
<str name="q">*:*</str>
</lst>
<lst name="defaults">
<str name="echoParams">all</str>
</lst>
<str name="healthcheckFile">server-enabled.txt</str>
</requestHandler>
<!-- config for the admin interface -->
<admin>
<defaultQuery>solr</defaultQuery>

View File

@ -0,0 +1,83 @@
package org.apache.solr.client.solrj.request;
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import junit.framework.Assert;
import org.apache.solr.SolrJettyTestBase;
import org.apache.solr.client.solrj.response.SolrPingResponse;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* Test SolrPing in Solrj
*/
public class SolrPingTest extends SolrJettyTestBase {
@BeforeClass
public static void beforeClass() throws Exception {
// The following works, but it seems like it's probably the wrong way to do
// this.
initCore("solrconfig.xml", "schema.xml", "../../test-files/solrj/solr",
"collection1");
}
@Before
@Override
public void setUp() throws Exception {
super.setUp();
clearIndex();
assertU(commit());
assertU(optimize());
SolrInputDocument doc = new SolrInputDocument();
doc.setField("id", 1);
doc.setField("terms_s", "samsung");
getSolrServer().add(doc);
getSolrServer().commit(true, true);
}
@Test
public void testEnabledSolrPing() throws Exception {
SolrPing ping = new SolrPing();
SolrPingResponse rsp = null;
ping.setActionEnable();
ping.process(getSolrServer());
ping.removeAction();
rsp = ping.process(getSolrServer());
Assert.assertNotNull(rsp);
}
@Test(expected = SolrException.class)
public void testDisabledSolrPing() throws Exception {
SolrPing ping = new SolrPing();
SolrPingResponse rsp = null;
ping.setActionDisable();
try {
ping.process(getSolrServer());
} catch (Exception e) {
throw new Exception("disable action failed!");
}
ping.setActionPing();
rsp = ping.process(getSolrServer());
// the above line should fail with a 503 SolrException.
Assert.assertNotNull(rsp);
}
}