You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2012/06/26 11:45:31 UTC
svn commit: r1353896 - in /lucene/dev/branches/branch_4x/solr: ./ core/
core/src/java/org/apache/solr/cloud/ core/src/java/org/apache/solr/handler/
core/src/test-files/solr/conf/ example/solr/conf/ solrj/
solrj/src/java/org/apache/solr/client/solrj/imp...
Author: siren
Date: Tue Jun 26 09:45:30 2012
New Revision: 1353896
URL: http://svn.apache.org/viewvc?rev=1353896&view=rev
Log:
SOLR-3558 change SnapPuller to use solrj, merge from trunk
Modified:
lucene/dev/branches/branch_4x/solr/ (props changed)
lucene/dev/branches/branch_4x/solr/core/ (props changed)
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/SnapPuller.java
lucene/dev/branches/branch_4x/solr/core/src/test-files/solr/conf/solrconfig-slave.xml
lucene/dev/branches/branch_4x/solr/example/solr/conf/solrconfig.xml
lucene/dev/branches/branch_4x/solr/solrj/ (props changed)
lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrServer.java
lucene/dev/branches/branch_4x/solr/solrj/src/test/org/apache/solr/client/solrj/impl/BasicHttpSolrServerTest.java
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java?rev=1353896&r1=1353895&r2=1353896&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java Tue Jun 26 09:45:30 2012
@@ -137,7 +137,7 @@ public class RecoveryStrategy extends Th
}
ModifiableSolrParams solrParams = new ModifiableSolrParams();
- solrParams.set(ReplicationHandler.MASTER_URL, leaderUrl + "replication");
+ solrParams.set(ReplicationHandler.MASTER_URL, leaderUrl);
if (isClosed()) retries = INTERRUPTED;
boolean success = replicationHandler.doFetch(solrParams, true); // TODO: look into making sure force=true does not download files we already have
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java?rev=1353896&r1=1353895&r2=1353896&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java Tue Jun 26 09:45:30 2012
@@ -42,7 +42,6 @@ import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.lucene.index.IndexCommit;
import org.apache.lucene.index.IndexDeletionPolicy;
-import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.DirectoryReader;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
@@ -602,10 +601,7 @@ public class ReplicationHandler extends
if (showSlaveDetails && snapPuller != null) {
Properties props = loadReplicationProperties();
try {
- NamedList<String> command = new NamedList<String>();
- command.add(COMMAND, CMD_DETAILS);
- command.add("slave", "false");
- NamedList nl = snapPuller.getCommandResponse(command);
+ NamedList nl = snapPuller.getDetails();
slave.add("masterDetails", nl.get(CMD_DETAILS));
} catch (Exception e) {
LOG.warn("Exception while invoking 'details' method for replication on master ", e);
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/SnapPuller.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/SnapPuller.java?rev=1353896&r1=1353895&r2=1353896&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/SnapPuller.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/SnapPuller.java Tue Jun 26 09:45:30 2012
@@ -17,22 +17,19 @@
package org.apache.solr.handler;
import org.apache.commons.io.IOUtils;
-import org.apache.http.Header;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
-import org.apache.http.client.entity.UrlEncodedFormEntity;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.message.AbstractHttpMessage;
-import org.apache.http.message.BasicNameValuePair;
import org.apache.lucene.index.IndexCommit;
+import org.apache.solr.client.solrj.SolrServer;
+import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpClientUtil;
+import org.apache.solr.client.solrj.impl.HttpSolrServer;
+import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.common.SolrException;
+import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.FastInputStream;
import org.apache.solr.util.FileUtils;
-import org.apache.solr.common.util.JavaBinCodec;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrCore;
import org.apache.solr.core.IndexDeletionPolicyWrapper;
@@ -57,7 +54,6 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.Adler32;
import java.util.zip.Checksum;
-import java.util.zip.GZIPInputStream;
import java.util.zip.InflaterInputStream;
/**
@@ -116,13 +112,14 @@ public class SnapPuller {
// HttpClient for this instance if connectionTimeout or readTimeout has been specified
private final HttpClient myHttpClient;
- private static synchronized HttpClient createHttpClient(String connTimeout, String readTimeout, String httpBasicAuthUser, String httpBasicAuthPassword) {
+ private static synchronized HttpClient createHttpClient(String connTimeout, String readTimeout, String httpBasicAuthUser, String httpBasicAuthPassword, boolean useCompression) {
if (connTimeout == null && readTimeout == null && client != null) return client;
final ModifiableSolrParams httpClientParams = new ModifiableSolrParams();
httpClientParams.set(HttpClientUtil.PROP_CONNECTION_TIMEOUT, connTimeout != null ? connTimeout : "5000");
httpClientParams.set(HttpClientUtil.PROP_SO_TIMEOUT, readTimeout != null ? readTimeout : "20000");
httpClientParams.set(HttpClientUtil.PROP_BASIC_AUTH_USER, httpBasicAuthUser);
httpClientParams.set(HttpClientUtil.PROP_BASIC_AUTH_PASS, httpBasicAuthPassword);
+ httpClientParams.set(HttpClientUtil.PROP_ALLOW_COMPRESSION, useCompression);
// Keeping a very high number so that if you have a large number of cores
// no requests are kept waiting for an idle connection.
httpClientParams.set(HttpClientUtil.PROP_MAX_CONNECTIONS, 10000);
@@ -132,13 +129,19 @@ public class SnapPuller {
return httpClient;
}
- public SnapPuller(NamedList initArgs, ReplicationHandler handler, SolrCore sc) {
+ public SnapPuller(final NamedList initArgs, final ReplicationHandler handler, final SolrCore sc) {
solrCore = sc;
- SolrParams params = SolrParams.toSolrParams(initArgs);
- masterUrl = (String) initArgs.get(MASTER_URL);
+ final SolrParams params = SolrParams.toSolrParams(initArgs);
+ String masterUrl = (String) initArgs.get(MASTER_URL);
if (masterUrl == null)
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
"'masterUrl' is required for a slave");
+ if (masterUrl.endsWith("/replication")) {
+ masterUrl = masterUrl.substring(0, masterUrl.length()-12);
+ LOG.warn("'masterUrl' must be specified without the /replication suffix");
+ }
+ this.masterUrl = masterUrl;
+
this.replicationHandler = handler;
pollIntervalStr = (String) initArgs.get(POLL_INTERVAL);
pollInterval = readInterval(pollIntervalStr);
@@ -149,7 +152,7 @@ public class SnapPuller {
String readTimeout = (String) initArgs.get(HttpClientUtil.PROP_SO_TIMEOUT);
String httpBasicAuthUser = (String) initArgs.get(HttpClientUtil.PROP_BASIC_AUTH_USER);
String httpBasicAuthPassword = (String) initArgs.get(HttpClientUtil.PROP_BASIC_AUTH_PASS);
- myHttpClient = createHttpClient(connTimeout, readTimeout, httpBasicAuthUser, httpBasicAuthPassword);
+ myHttpClient = createHttpClient(connTimeout, readTimeout, httpBasicAuthUser, httpBasicAuthPassword, useExternal);
if (pollInterval != null && pollInterval > 0) {
startExecutorService();
} else {
@@ -183,82 +186,49 @@ public class SnapPuller {
*/
@SuppressWarnings("unchecked")
NamedList getLatestVersion() throws IOException {
- HttpPost post = new HttpPost(masterUrl);
- List<BasicNameValuePair> formparams = new ArrayList<BasicNameValuePair>();
- formparams.add(new BasicNameValuePair("wt", "javabin"));
- formparams.add(new BasicNameValuePair(COMMAND, CMD_INDEX_VERSION));
- UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
- post.setEntity(entity);
- return getNamedListResponse(post);
- }
-
- NamedList getCommandResponse(NamedList<String> commands) throws IOException {
-
- HttpPost post = new HttpPost(masterUrl);
-
- List<BasicNameValuePair> formparams = new ArrayList<BasicNameValuePair>();
- formparams.add(new BasicNameValuePair("wt", "javabin"));
-
- for (Map.Entry<String, String> c : commands) {
- formparams.add(new BasicNameValuePair(c.getKey(), c.getValue()));
- }
- UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
- post.setEntity(entity);
- return getNamedListResponse(post);
- }
-
- private NamedList<?> getNamedListResponse(HttpPost method) throws IOException {
- InputStream input = null;
- NamedList<?> result = null;
+ ModifiableSolrParams params = new ModifiableSolrParams();
+ params.set(COMMAND, CMD_INDEX_VERSION);
+ params.set(CommonParams.WT, "javabin");
+ params.set(CommonParams.QT, "/replication");
+ QueryRequest req = new QueryRequest(params);
+ SolrServer server = new HttpSolrServer(masterUrl, myHttpClient); //XXX modify to use shardhandler
try {
- HttpResponse response = myHttpClient.execute(method);
- int status = response.getStatusLine().getStatusCode();
- if (status != HttpStatus.SC_OK) {
- throw new SolrException(SolrException.ErrorCode.SERVICE_UNAVAILABLE,
- "Request failed for the url " + method);
- }
- input = response.getEntity().getContent();
- result = (NamedList<?>)new JavaBinCodec().unmarshal(input);
- } finally {
- try {
- if (input != null) {
- input.close();
- }
- } catch (Exception e) {
- }
+ return server.request(req);
+ } catch (SolrServerException e) {
+ throw new IOException(e);
}
- return result;
}
/**
- * Fetches the list of files in a given index commit point
+ * Fetches the list of files in a given index commit point and updates internal list of files to download.
*/
- void fetchFileList(long gen) throws IOException {
- HttpPost post = new HttpPost(masterUrl);
+ private void fetchFileList(long gen) throws IOException {
+ ModifiableSolrParams params = new ModifiableSolrParams();
+ params.set(COMMAND, CMD_GET_FILE_LIST);
+ params.set(GENERATION, String.valueOf(gen));
+ params.set(CommonParams.WT, "javabin");
+ params.set(CommonParams.QT, "/replication");
+ QueryRequest req = new QueryRequest(params);
+ SolrServer server = new HttpSolrServer(masterUrl, myHttpClient); //XXX modify to use shardhandler
+
+ try {
+ NamedList response = server.request(req);
+
+ List<Map<String, Object>> files = (List<Map<String,Object>>) response.get(CMD_GET_FILE_LIST);
+ if (files != null)
+ filesToDownload = Collections.synchronizedList(files);
+ else {
+ filesToDownload = Collections.emptyList();
+ LOG.error("No files to download for index generation: "+ gen);
+ }
+
+ files = (List<Map<String,Object>>) response.get(CONF_FILES);
+ if (files != null)
+ confFilesToDownload = Collections.synchronizedList(files);
- List<BasicNameValuePair> formparams = new ArrayList<BasicNameValuePair>();
- formparams.add(new BasicNameValuePair("wt", "javabin"));
- formparams.add(new BasicNameValuePair(COMMAND, CMD_GET_FILE_LIST));
- formparams.add(new BasicNameValuePair(GENERATION, String.valueOf(gen)));
-
- UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
- post.setEntity(entity);
-
- @SuppressWarnings("unchecked")
- NamedList<List<Map<String, Object>>> nl
- = (NamedList<List<Map<String, Object>>>) getNamedListResponse(post);
-
- List<Map<String, Object>> f = nl.get(CMD_GET_FILE_LIST);
- if (f != null)
- filesToDownload = Collections.synchronizedList(f);
- else {
- filesToDownload = Collections.emptyList();
- LOG.error("No files to download for index generation: "+ gen);
- }
-
- f = nl.get(CONF_FILES);
- if (f != null)
- confFilesToDownload = Collections.synchronizedList(f);
+ } catch (SolrServerException e) {
+ throw new IOException(e);
+ }
}
/**
@@ -270,7 +240,7 @@ public class SnapPuller {
* @throws IOException if an exception occurs
*/
@SuppressWarnings("unchecked")
- boolean successfulInstall = false;
+ private boolean successfulInstall = false;
boolean fetchLatestIndex(SolrCore core, boolean force) throws IOException, InterruptedException {
successfulInstall = false;
@@ -941,8 +911,6 @@ public class SnapPuller {
private boolean isConf;
- private HttpPost post;
-
private boolean aborted = false;
private Long indexGen;
@@ -1118,79 +1086,62 @@ public class SnapPuller {
* Open a new stream using HttpClient
*/
FastInputStream getStream() throws IOException {
- post = new HttpPost(masterUrl);
- //the method is command=filecontent
-
- List<BasicNameValuePair> formparams = new ArrayList<BasicNameValuePair>();
-
- formparams.add(new BasicNameValuePair(COMMAND, CMD_GET_FILE));
+ SolrServer s = new HttpSolrServer(masterUrl, myHttpClient, null); //XXX use shardhandler
+ ModifiableSolrParams params = new ModifiableSolrParams();
+// //the method is command=filecontent
+ params.set(COMMAND, CMD_GET_FILE);
+ params.set(GENERATION, Long.toString(indexGen));
+ params.set(CommonParams.QT, "/replication");
//add the version to download. This is used to reserve the download
- formparams.add(new BasicNameValuePair(GENERATION, indexGen.toString()));
if (isConf) {
//set cf instead of file for config file
- formparams.add(new BasicNameValuePair(CONF_FILE_SHORT, fileName));
+ params.set(CONF_FILE_SHORT, fileName);
} else {
- formparams.add(new BasicNameValuePair(FILE, fileName));
+ params.set(FILE, fileName);
}
if (useInternal) {
- formparams.add(new BasicNameValuePair(COMPRESSION, "true"));
- }
- if (useExternal) {
- formparams.add(new BasicNameValuePair("Accept-Encoding", "gzip,deflate"));
+ params.set(COMPRESSION, "internal");
}
//use checksum
- if (this.includeChecksum)
- formparams.add(new BasicNameValuePair(CHECKSUM, "true"));
+ if (this.includeChecksum) {
+ params.set(CHECKSUM, true);
+ }
//wt=filestream this is a custom protocol
- formparams.add(new BasicNameValuePair("wt", FILE_STREAM));
- // This happen if there is a failure there is a retry. the offset=<sizedownloaded> ensures that
- // the server starts from the offset
+ params.set(CommonParams.WT, FILE_STREAM);
+ // This happen if there is a failure there is a retry. the offset=<sizedownloaded> ensures that
+ // the server starts from the offset
if (bytesDownloaded > 0) {
- formparams.add(new BasicNameValuePair(OFFSET, "" + bytesDownloaded));
+ params.set(OFFSET, Long.toString(bytesDownloaded));
}
- UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
- post.setEntity(entity);
- HttpResponse response = myHttpClient.execute(post);
- InputStream is = response.getEntity().getContent();
- //wrap it using FastInputStream
- if (useInternal) {
- is = new InflaterInputStream(is);
- } else if (useExternal) {
- is = checkCompressed(post, is);
- }
- return new FastInputStream(is);
- }
- }
-
- /*
- * This is copied from CommonsHttpSolrServer
- */
- private InputStream checkCompressed(AbstractHttpMessage method, InputStream respBody) throws IOException {
- Header contentEncodingHeader = method.getFirstHeader("Content-Encoding");
- if (contentEncodingHeader != null) {
- String contentEncoding = contentEncodingHeader.getValue();
- if (contentEncoding.contains("gzip")) {
- respBody = new GZIPInputStream(respBody);
- } else if (contentEncoding.contains("deflate")) {
- respBody = new InflaterInputStream(respBody);
- }
- } else {
- Header contentTypeHeader = method.getFirstHeader("Content-Type");
- if (contentTypeHeader != null) {
- String contentType = contentTypeHeader.getValue();
- if (contentType != null) {
- if (contentType.startsWith("application/x-gzip-compressed")) {
- respBody = new GZIPInputStream(respBody);
- } else if (contentType.startsWith("application/x-deflate")) {
- respBody = new InflaterInputStream(respBody);
- }
+ NamedList response;
+ InputStream is = null;
+ try {
+ QueryRequest req = new QueryRequest(params);
+ response = s.request(req);
+ is = (InputStream) response.get("stream");
+ if(useInternal) {
+ is = new InflaterInputStream(is);
}
+ return new FastInputStream(is);
+ } catch (Throwable t) {
+ //close stream on error
+ IOUtils.closeQuietly(is);
+ throw new IOException("Could not download file '" + fileName + "'", t);
}
}
- return respBody;
+ }
+
+ NamedList getDetails() throws IOException, SolrServerException {
+ ModifiableSolrParams params = new ModifiableSolrParams();
+ params.set(COMMAND, CMD_DETAILS);
+ params.set("slave", false);
+ params.set(CommonParams.QT, "/replication");
+ SolrServer server = new HttpSolrServer(masterUrl, myHttpClient); //XXX use shardhandler
+ QueryRequest request = new QueryRequest(params);
+ return server.request(request);
}
static Integer readInterval(String interval) {
Modified: lucene/dev/branches/branch_4x/solr/core/src/test-files/solr/conf/solrconfig-slave.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test-files/solr/conf/solrconfig-slave.xml?rev=1353896&r1=1353895&r2=1353896&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test-files/solr/conf/solrconfig-slave.xml (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test-files/solr/conf/solrconfig-slave.xml Tue Jun 26 09:45:30 2012
@@ -51,7 +51,7 @@
<requestHandler name="/replication" class="solr.ReplicationHandler">
<lst name="slave">
- <str name="masterUrl">http://localhost:TEST_PORT/solr/replication</str>
+ <str name="masterUrl">http://localhost:TEST_PORT/solr</str>
<str name="pollInterval">00:00:01</str>
</lst>
</requestHandler>
Modified: lucene/dev/branches/branch_4x/solr/example/solr/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/example/solr/conf/solrconfig.xml?rev=1353896&r1=1353895&r2=1353896&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/example/solr/conf/solrconfig.xml (original)
+++ lucene/dev/branches/branch_4x/solr/example/solr/conf/solrconfig.xml Tue Jun 26 09:45:30 2012
@@ -1089,7 +1089,7 @@
<str name="confFiles">schema.xml,stopwords.txt</str>
</lst>
<lst name="slave">
- <str name="masterUrl">http://localhost:8983/solr/replication</str>
+ <str name="masterUrl">http://localhost:8983/solr</str>
<str name="pollInterval">00:00:60</str>
</lst>
</requestHandler>
Modified: lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrServer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrServer.java?rev=1353896&r1=1353895&r2=1353896&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrServer.java (original)
+++ lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrServer.java Tue Jun 26 09:45:30 2012
@@ -201,8 +201,10 @@ public class HttpSolrServer extends Solr
// The parser 'wt=' and 'version=' params are used instead of the original
// params
ModifiableSolrParams wparams = new ModifiableSolrParams(params);
- wparams.set(CommonParams.WT, parser.getWriterType());
- wparams.set(CommonParams.VERSION, parser.getVersion());
+ if (parser != null) {
+ wparams.set(CommonParams.WT, parser.getWriterType());
+ wparams.set(CommonParams.VERSION, parser.getVersion());
+ }
if (invariantParams != null) {
wparams.add(invariantParams);
}
@@ -352,7 +354,6 @@ public class HttpSolrServer extends Solr
int httpStatus = response.getStatusLine().getStatusCode();
// Read the contents
- String charset = EntityUtils.getContentCharSet(response.getEntity());
respBody = response.getEntity().getContent();
// handle some http level checks before trying to parse the response
@@ -377,6 +378,13 @@ public class HttpSolrServer extends Solr
+ response.getStatusLine().getReasonPhrase());
}
+ if (processor == null) {
+ // no processor specified, return raw stream
+ NamedList<Object> rsp = new NamedList<Object>();
+ rsp.add("stream", respBody);
+ return rsp;
+ }
+ String charset = EntityUtils.getContentCharSet(response.getEntity());
NamedList<Object> rsp = processor.processResponse(respBody, charset);
if (httpStatus != HttpStatus.SC_OK) {
String reason = null;
@@ -409,7 +417,7 @@ public class HttpSolrServer extends Solr
throw new SolrServerException(
"IOException occured when talking to server at: " + getBaseURL(), e);
} finally {
- if (respBody != null) {
+ if (respBody != null && processor!=null) {
try {
respBody.close();
} catch (Throwable t) {} // ignore
Modified: lucene/dev/branches/branch_4x/solr/solrj/src/test/org/apache/solr/client/solrj/impl/BasicHttpSolrServerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/solrj/src/test/org/apache/solr/client/solrj/impl/BasicHttpSolrServerTest.java?rev=1353896&r1=1353895&r2=1353896&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/solrj/src/test/org/apache/solr/client/solrj/impl/BasicHttpSolrServerTest.java (original)
+++ lucene/dev/branches/branch_4x/solr/solrj/src/test/org/apache/solr/client/solrj/impl/BasicHttpSolrServerTest.java Tue Jun 26 09:45:30 2012
@@ -18,6 +18,7 @@
package org.apache.solr.client.solrj.impl;
import java.io.IOException;
+import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.Socket;
import java.util.Enumeration;
@@ -38,10 +39,12 @@ import org.apache.solr.SolrJettyTestBase
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrRequest.METHOD;
import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.CommonParams;
+import org.apache.solr.common.util.NamedList;
import org.apache.solr.util.ExternalPaths;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -134,6 +137,7 @@ public class BasicHttpSolrServerTest ext
} catch (SolrServerException e) {
assertTrue(e.getMessage().contains("refused"));
}
+ server.shutdown();
}
@Test
@@ -148,6 +152,7 @@ public class BasicHttpSolrServerTest ext
} catch (SolrServerException e) {
assertTrue(e.getMessage().contains("Timeout"));
}
+ server.shutdown();
}
@Test
@@ -234,6 +239,7 @@ public class BasicHttpSolrServerTest ext
assertEquals("keep-alive", DebugServlet.headers.get("Connection"));
assertEquals("application/x-www-form-urlencoded; charset=UTF-8", DebugServlet.headers.get("Content-Type"));
assertEquals("UTF-8", DebugServlet.headers.get("Content-Charset"));
+ server.shutdown();
}
@Test
@@ -274,6 +280,7 @@ public class BasicHttpSolrServerTest ext
assertEquals(server.getParser().getVersion(), DebugServlet.parameters.get(CommonParams.VERSION)[0]);
assertEquals("Solr[" + org.apache.solr.client.solrj.impl.HttpSolrServer.class.getName() + "] 1.0", DebugServlet.headers.get("User-Agent"));
assertEquals("keep-alive", DebugServlet.headers.get("Connection"));
+ server.shutdown();
}
@Test
@@ -335,6 +342,7 @@ public class BasicHttpSolrServerTest ext
assertEquals("application/javabin", DebugServlet.headers.get("Content-Type"));
assertEquals(1, DebugServlet.parameters.get("a").length);
assertEquals("\u1234", DebugServlet.parameters.get("a")[0]);
+ server.shutdown();
}
@Test
@@ -355,6 +363,7 @@ public class BasicHttpSolrServerTest ext
} catch (Throwable t) {
fail("Exception was thrown:" + t);
}
+ server.shutdown();
}
@Test
@@ -406,6 +415,7 @@ public class BasicHttpSolrServerTest ext
q = new SolrQuery("foo");
QueryResponse response = server.query(q);
assertEquals(0, response.getStatus());
+ server.shutdown();
}
@Test
@@ -420,8 +430,21 @@ public class BasicHttpSolrServerTest ext
server.setDefaultMaxConnectionsPerHost(1);
fail("Operation should not succeed.");
} catch (UnsupportedOperationException e) {}
+ client.getConnectionManager().shutdown();
}
-
+
+ @Test
+ public void testGetRawStream() throws SolrServerException, IOException{
+ HttpClient client = HttpClientUtil.createClient(null);
+ HttpSolrServer server = new HttpSolrServer("http://127.0.0.1:" + jetty.getLocalPort() + "/solr", client, null);
+ QueryRequest req = new QueryRequest();
+ NamedList response = server.request(req);
+ InputStream stream = (InputStream)response.get("stream");
+ assertNotNull(stream);
+ stream.close();
+ client.getConnectionManager().shutdown();
+ }
+
private int findUnusedPort() {
for (int port = 0; port < 65535; port++) {
Socket s = new Socket();