initial commit for Apache Solr 5.x Plugin git-svn-id: https://svn.apache.org/repos/asf/manifoldcf/integration/solr-5.x/trunk@1664763 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES.txt b/CHANGES.txt index 26ffbc2..d966b08 100644 --- a/CHANGES.txt +++ b/CHANGES.txt
@@ -1,64 +1,7 @@ -Apache ManifoldCF Plugin for Apache Solr 4.x change Log +Apache ManifoldCF Plugin for Apache Solr 5.x change Log $Id$ -======================= 2.1-SNAPSHOT ===================== - -CONNECTORS-914: Go to a Maven build system. -(Ahmet Arslan) - -CONNECTORS-934 : Check if log level is enabled before constructing log message. -(Ahmet Arslan) - -======================= Release 2.0 ===================== - -CONNECTORS-886: Provide [allow|deny]_token_parent fields. -Upgrade to this version now requires reindexing. -(Shinichiro Abe, Karl Wright) - -CONNECTORS-848: Build against Lucene/Solr 4.6.0. - -======================= Release 1.1 ===================== - -CONNECTORS-825: Fix infinite loop parsing multi-domain arguments. -(Shinichiro Abe) - -Add functionality making the plugin compatible with multi-domain -features of ManifoldCF. Specifically, allow multiple domain/username -tuples to be passed in the request. -(Karl Wright) - -======================= Release 0.4 ===================== - -CONNECTORS-534: Repackage plugins to have a true binary release, -with appropriate DEPENDENCIES.txt, README's etc. -(Karl Wright) - -Port to Solr 4.1.0. -(Karl Wright) - -======================= Release 0.3 ===================== - -CONNECTORS-595: Fix tests to use new initCore() conventions and -test resource layout. -(Karl Wright) - -Port to final release of Solr 4.0.0. -(Karl Wright) - -======================= Release 0.2 ===================== - -CONNECTORS-485: Port to the latest 4.x code. -(Karl Wright) - -CONNECTORS-354: Add a parameter to allow the maximum connection pool -size to be configurated in solrconfig.xml. -(Karl Wright) - -CONNECTORS-333: Use multithreaded connection manager and tcp-no-delay -in order to avoid sockets accumulating in CLOSE_WAIT. -(Simon Willnauer via Karl Wright) - ======================= Release 0.1 ===================== Initial commit. -(Karl Wright) +(Ahmet Arslan)
diff --git a/DEPENDENCIES.txt b/DEPENDENCIES.txt index 57e5e98..31646cb 100644 --- a/DEPENDENCIES.txt +++ b/DEPENDENCIES.txt
@@ -1,9 +1,9 @@ -Apache ManifoldCF Plugin for Apache Solr 4.x requires +Apache ManifoldCF Plugin for Apache Solr 5.x requires --------------------------------------------------- -* JRE 1.6 or above +* JRE 1.7 or above * mvn 3.0 or higher -For building Apache ManifoldCF Plugin for Apache Solr 4.x: +For building Apache ManifoldCF Plugin for Apache Solr 5.x: ------------------------------------------------------ * Look at README.txt
diff --git a/KEYS b/KEYS index 229e00c..44e6d54 100644 --- a/KEYS +++ b/KEYS
@@ -127,4 +127,62 @@ 1cqtTc96tSwb2XW3iA2uZlD4aTkrOmm3FKbauC/rFmCjkpvwpvqcIdpib4M2DgNx zAZ2cJnxw3f57qc9Yh5qvhDUephwOAlAy8ekc1AmX14F+mwYE3GjcqeGdEbLNw== =GLHu +-----END PGP PUBLIC KEY BLOCK----- +pub 4096R/3D7558E5 2014-04-15 +uid Ahmet Arslan (CODE SIGNING KEY) <iorixxx@apache.org> +sig 3 3D7558E5 2014-04-15 Ahmet Arslan (CODE SIGNING KEY) <iorixxx@apache.org> +sub 4096R/55C9450F 2014-04-15 +sig 3D7558E5 2014-04-15 Ahmet Arslan (CODE SIGNING KEY) <iorixxx@apache.org> + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +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 +OWUgArPPt7zCcZpWTJCZOvhy +=qHkm -----END PGP PUBLIC KEY BLOCK----- \ No newline at end of file
diff --git a/NOTICE.txt b/NOTICE.txt index f768100..95ad911 100644 --- a/NOTICE.txt +++ b/NOTICE.txt
@@ -1,5 +1,5 @@ -Apache ManifoldCF Plugin for Apache Solr 4.x -Copyright 2010-2014 The Apache Software Foundation +Apache ManifoldCF Plugin for Apache Solr 5.x +Copyright 2010-2015 The Apache Software Foundation This product includes software developed by The Apache Software Foundation (http://www.apache.org/).
diff --git a/README.txt b/README.txt index b7cc323..9c67c9b 100644 --- a/README.txt +++ b/README.txt
@@ -21,22 +21,15 @@ above. It is backwards compatible with earlier versions as well, except for the fact that two additional Solr fields are required for this plugin to work. -Upgrading ---------- -If you are replacing a version of Apache ManifoldCF Plugin for Apache Solr 4.x that is -older than version 2.0, you must declare two additional fields (representing parent -acls and parent deny acls), and reindex all your documents, so all six fields have the. -correct values. Otherwise, the plugin will prevent you from viewing any documents. - -Instructions for Building Apache ManifoldCF Plugin for Apache Solr 4.x from Source +Instructions for Building Apache ManifoldCF Plugin for Apache Solr 5.x from Source ------------------------------------------------------------------------------ -1. Download the Java SE 6 JDK (Java Development Kit), or greater, from +1. Download the Java SE 7 JDK (Java Development Kit), or greater, from http://www.oracle.com/technetwork/java/index.html. You will need the JDK installed, and the %JAVA_HOME%\bin directory included on your command path. To test this, issue a "java -version" command from your - shell and verify that the Java version is 1.6 or greater. + shell and verify that the Java version is 1.7 or greater. 2. Download and install Maven 3.0 or later. Maven installation and configuration instructions can be found here: http://maven.apache.org @@ -47,9 +40,9 @@ mvn package assembly:assembly - The JAR packages can be found in the target folder: + The JAR package can be found in the target folder: - target/solr4x-plugin-mcf-<VERSION>.jar where <VERSION> is the release version + target/apache-manifoldcf-solr5x-plugin-<VERSION>.jar where <VERSION> is the release version Getting Started @@ -161,7 +154,7 @@ Licensing --------- -Apache ManifoldCF Plugin for Apache Solr 4.x is licensed under the +Apache ManifoldCF Plugin for Apache Solr 5.x is licensed under the Apache License 2.0. See the files called LICENSE.txt and NOTICE.txt for more information. @@ -190,7 +183,7 @@ The following provides more details on the included software that may be subject to export controls on cryptographic software: - The Apache ManifoldCF Solr 4.x Plugin does not include any + The Apache ManifoldCF Solr 5.x Plugin does not include any implementation or usage of cryptographic software at this time. Contact
diff --git a/pom.xml b/pom.xml index a167590..92bc9e9 100644 --- a/pom.xml +++ b/pom.xml
@@ -20,12 +20,12 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.apache.manifoldcf.solr</groupId> - <name>ManifoldCF Solr 4.x Plugin</name> - <artifactId>solr4x-plugin-mcf</artifactId> - <version>2.1-SNAPSHOT</version> + <name>ManifoldCF Solr 5.x Plugin</name> + <artifactId>apache-manifoldcf-solr5x-plugin</artifactId> + <version>0.1</version> <packaging>jar</packaging> - <description>ManifoldCF Plugin for Apache Solr 4.x</description> - <inceptionYear>2014</inceptionYear> + <description>ManifoldCF Plugin for Apache Solr 5.x</description> + <inceptionYear>2015</inceptionYear> <organization> <name>The Apache Software Foundation</name> @@ -34,8 +34,7 @@ <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - <slf4j.version>1.6.6</slf4j.version> - <solr.version>4.7.0</solr.version> + <solr.version>5.0.0</solr.version> </properties> <dependencies> @@ -54,14 +53,6 @@ <type>jar</type> <scope>compile</scope> </dependency> - - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-api</artifactId> - <version>${slf4j.version}</version> - <scope>compile</scope> - <type>jar</type> - </dependency> <dependency> <groupId>commons-logging</groupId> @@ -80,7 +71,7 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> - <version>2.17</version> + <version>2.18.1</version> <configuration> <argLine>-Xmx1024m</argLine> </configuration> @@ -89,17 +80,17 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> - <version>3.1</version> + <version>3.2</version> <configuration> <encoding>utf-8</encoding> - <source>1.6</source> - <target>1.6</target> + <source>1.7</source> + <target>1.7</target> </configuration> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> - <version>2.4</version> + <version>2.5</version> <configuration> <archive> <manifestEntries> @@ -118,7 +109,7 @@ <plugin> <artifactId>maven-assembly-plugin</artifactId> - <version>2.4</version> + <version>2.5.3</version> <configuration> <descriptors> <descriptor>src/main/assembly/bin.xml</descriptor>
diff --git a/solr/collection1/conf/schema-auth.xml b/solr/collection1/conf/schema-auth.xml index eeca091..e4c1a6b 100644 --- a/solr/collection1/conf/schema-auth.xml +++ b/solr/collection1/conf/schema-auth.xml
@@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. --> -<schema name="auth" version="1.4"> +<schema name="auth" version="1.5"> <types> <fieldType name="string" class="solr.StrField"/> </types> @@ -29,6 +29,5 @@ <field name="allow_token_parent" type="string" indexed="true" stored="false" multiValued="true" default="__nosecurity__"/> <field name="deny_token_parent" type="string" indexed="true" stored="false" multiValued="true" default="__nosecurity__"/> </fields> - <defaultSearchField>id</defaultSearchField> <uniqueKey>id</uniqueKey> </schema>
diff --git a/solr/collection1/conf/solrconfig-auth-load.xml b/solr/collection1/conf/solrconfig-auth-load.xml index 587f3a1..4811761 100644 --- a/solr/collection1/conf/solrconfig-auth-load.xml +++ b/solr/collection1/conf/solrconfig-auth-load.xml
@@ -27,8 +27,6 @@ <updateHandler class="solr.DirectUpdateHandler2"> </updateHandler> - <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" /> - <!-- test MCF Security Filter settings --> <searchComponent name="mcf-param" class="org.apache.solr.mcf.ManifoldCFSearchComponent" > <str name="AuthorityServiceBaseURL">http://localhost:8346/mcf-as</str>
diff --git a/solr/collection1/conf/solrconfig-auth-qparser.xml b/solr/collection1/conf/solrconfig-auth-qparser.xml index 16caec9..f1933d5 100644 --- a/solr/collection1/conf/solrconfig-auth-qparser.xml +++ b/solr/collection1/conf/solrconfig-auth-qparser.xml
@@ -27,8 +27,6 @@ <updateHandler class="solr.DirectUpdateHandler2"> </updateHandler> - <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" /> - <!-- test MCF Security Filter settings --> <queryParser name="mcf-security_param" class="org.apache.solr.mcf.ManifoldCFQParserPlugin" > <str name="AuthorityServiceBaseURL">http://localhost:8347/mcf-as</str>
diff --git a/solr/collection1/conf/solrconfig-auth.xml b/solr/collection1/conf/solrconfig-auth.xml index c25e7c7..0f9faec 100644 --- a/solr/collection1/conf/solrconfig-auth.xml +++ b/solr/collection1/conf/solrconfig-auth.xml
@@ -27,8 +27,6 @@ <updateHandler class="solr.DirectUpdateHandler2"> </updateHandler> - <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" /> - <!-- test MCF Security Filter settings --> <searchComponent name="mcf-param" class="org.apache.solr.mcf.ManifoldCFSearchComponent" > <str name="AuthorityServiceBaseURL">http://localhost:8345/mcf-as</str>
diff --git a/src/main/assembly/bin.xml b/src/main/assembly/bin.xml index 2eef161..7a54ad0 100644 --- a/src/main/assembly/bin.xml +++ b/src/main/assembly/bin.xml
@@ -39,9 +39,23 @@ </moduleSet> </moduleSets> <fileSets> + <fileSet> + <directory>target</directory> + <outputDirectory/> + <fileMode>644</fileMode> + <directoryMode>755</directoryMode> <includes> - <include>**/target/*.jar</include> + <include>apache-manifoldcf-solr5x-plugin-${project.version}.jar</include> + </includes> + </fileSet> + + <fileSet> + <directory>.</directory> + <outputDirectory/> + <fileMode>644</fileMode> + <directoryMode>755</directoryMode> + <includes> <include>README.txt</include> <include>LICENSE.txt</include> <include>NOTICE.txt</include>
diff --git a/src/main/assembly/src.xml b/src/main/assembly/src.xml index 8e67674..5659da2 100644 --- a/src/main/assembly/src.xml +++ b/src/main/assembly/src.xml
@@ -24,10 +24,15 @@ <fileSets> <!-- Release materials --> <fileSet> + <directory>.</directory> + <outputDirectory/> + <fileMode>644</fileMode> + <directoryMode>755</directoryMode> <excludes> <exclude>**/.*</exclude> <exclude>**/.*/**</exclude> <exclude>**/*.iml/**</exclude> + <exclude>**/*.patch/**</exclude> <exclude>**/target/**</exclude> <exclude>**/lib/**</exclude> <exclude>**/data/**</exclude>
diff --git a/src/main/java/org/apache/solr/mcf/ManifoldCFQParserPlugin.java b/src/main/java/org/apache/solr/mcf/ManifoldCFQParserPlugin.java index bbfe9d7..87822a5 100644 --- a/src/main/java/org/apache/solr/mcf/ManifoldCFQParserPlugin.java +++ b/src/main/java/org/apache/solr/mcf/ManifoldCFQParserPlugin.java
@@ -16,6 +16,14 @@ */ package org.apache.solr.mcf; +import org.apache.http.ParseException; +import org.apache.http.client.HttpClient; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.config.SocketConfig; +import org.apache.http.entity.ContentType; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.lucene.index.*; import org.apache.lucene.search.*; import org.apache.solr.search.QParserPlugin; @@ -28,15 +36,13 @@ import org.apache.solr.core.SolrCore; import org.apache.http.client.methods.HttpGet; import org.apache.http.HttpResponse; -import org.apache.http.params.BasicHttpParams; -import org.apache.http.params.CoreConnectionPNames; import org.apache.http.util.EntityUtils; -import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.client.DefaultRedirectStrategy; -import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; import org.slf4j.*; import java.io.*; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.*; import java.net.*; @@ -75,9 +81,9 @@ String fieldDenyParent = null; int connectionTimeOut; int socketTimeOut; - Integer connectionManagerSynchronizer = new Integer(0); - ThreadSafeClientConnManager httpConnectionManager = null; - DefaultHttpClient client = null; + final Integer connectionManagerSynchronizer = 0; + PoolingHttpClientConnectionManager httpConnectionManager = null; + HttpClient client = null; int poolSize; public ManifoldCFQParserPlugin() @@ -108,7 +114,7 @@ fieldAllowParent = allowAttributePrefix+"parent"; fieldDenyParent = denyAttributePrefix+"parent"; Integer connectionPoolSize = (Integer)args.get("ConnectionPoolSize"); - poolSize = (connectionPoolSize==null)?50:connectionPoolSize.intValue(); + poolSize = (connectionPoolSize==null)?50:connectionPoolSize; } protected void initializeClient(SolrCore core) @@ -118,16 +124,30 @@ if (client == null) { // Initialize the connection pool - httpConnectionManager = new ThreadSafeClientConnManager(); + httpConnectionManager = new PoolingHttpClientConnectionManager(); httpConnectionManager.setMaxTotal(poolSize); httpConnectionManager.setDefaultMaxPerRoute(poolSize); - BasicHttpParams params = new BasicHttpParams(); - params.setBooleanParameter(CoreConnectionPNames.TCP_NODELAY,true); - params.setBooleanParameter(CoreConnectionPNames.STALE_CONNECTION_CHECK,false); - params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT,socketTimeOut); - params.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,connectionTimeOut); - client = new DefaultHttpClient(httpConnectionManager,params); - client.setRedirectStrategy(new DefaultRedirectStrategy()); + + RequestConfig.Builder requestBuilder = RequestConfig.custom() + .setCircularRedirectsAllowed(true) + .setSocketTimeout(socketTimeOut) + .setStaleConnectionCheckEnabled(false) + .setExpectContinueEnabled(true) + .setConnectTimeout(connectionTimeOut) + .setConnectionRequestTimeout(socketTimeOut); + + HttpClientBuilder clientBuilder = HttpClients.custom() + .setConnectionManager(httpConnectionManager) + .setMaxConnTotal(1) + .disableAutomaticRetries() + .setDefaultRequestConfig(requestBuilder.build()) + .setRedirectStrategy(new DefaultRedirectStrategy()) + .setDefaultSocketConfig(SocketConfig.custom() + .setTcpNoDelay(true) + .setSoTimeout(socketTimeOut) + .build()); + client = clientBuilder.build(); + core.addCloseHook(new CloseHandler()); } } @@ -158,7 +178,7 @@ List<String> userAccessTokens; // Map from domain to user - Map<String,String> domainMap = new HashMap<String,String>(); + Map<String,String> domainMap = new HashMap<>(); // Get the authenticated user name from the parameters String authenticatedUserName = params.get(AUTHENTICATED_USER_NAME); @@ -191,7 +211,7 @@ { // No authenticated user name. // mod_authz_annotate may be in use upstream, so look for tokens from it. - userAccessTokens = new ArrayList<String>(); + userAccessTokens = new ArrayList<>(); String[] passedTokens = params.getParams(USER_TOKENS); if (passedTokens == null) { @@ -283,7 +303,7 @@ protected Query calculateCompleteSubquery(String allowField, String denyField, Query allowOpen, Query denyOpen, List<String> userAccessTokens) { BooleanQuery bq = new BooleanQuery(); - bq.setMaxClauseCount(1000000); + BooleanQuery.setMaxClauseCount(1000000); // Add the empty-acl case BooleanQuery subUnprotectedClause = new BooleanQuery(); @@ -335,53 +355,40 @@ int rval = httpResponse.getStatusLine().getStatusCode(); if (rval != 200) { - String response = EntityUtils.toString(httpResponse.getEntity(),"utf-8"); + String response = EntityUtils.toString(httpResponse.getEntity(), StandardCharsets.UTF_8); throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,"Couldn't fetch user's access tokens from ManifoldCF authority service: "+Integer.toString(rval)+"; "+response); } - InputStream is = httpResponse.getEntity().getContent(); - try + + try(InputStream is = httpResponse.getEntity().getContent()) { - String charSet = EntityUtils.getContentCharSet(httpResponse.getEntity()); - if (charSet == null) - charSet = "utf-8"; - Reader r = new InputStreamReader(is,charSet); + Charset charSet; try - { - BufferedReader br = new BufferedReader(r); - try { + ContentType ct = ContentType.get(httpResponse.getEntity()); + if (ct == null) + charSet = StandardCharsets.UTF_8; + else + charSet = ct.getCharset(); + }catch (ParseException e){ + charSet = StandardCharsets.UTF_8; + } + + try( Reader r = new InputStreamReader(is,charSet); BufferedReader br = new BufferedReader(r)) { // Read the tokens, one line at a time. If any authorities are down, we have no current way to note that, but someday we will. - List<String> tokenList = new ArrayList<String>(); - while (true) - { + List<String> tokenList = new ArrayList<>(); + while (true) { String line = br.readLine(); if (line == null) break; - if (line.startsWith("TOKEN:")) - { + if (line.startsWith("TOKEN:")) { tokenList.add(line.substring("TOKEN:".length())); - } - else - { - // It probably says something about the state of the authority(s) involved, so log it - LOG.info("Saw authority response "+line); + } else { + // It probably says something about the state of the authority(s) involved, so log it + LOG.info("Saw authority response " + line); } } return tokenList; - } - finally - { - br.close(); - } } - finally - { - r.close(); - } - } - finally - { - is.close(); } } finally
diff --git a/src/main/java/org/apache/solr/mcf/ManifoldCFSearchComponent.java b/src/main/java/org/apache/solr/mcf/ManifoldCFSearchComponent.java index 2a8d733..526fcc7 100644 --- a/src/main/java/org/apache/solr/mcf/ManifoldCFSearchComponent.java +++ b/src/main/java/org/apache/solr/mcf/ManifoldCFSearchComponent.java
@@ -16,6 +16,14 @@ */ package org.apache.solr.mcf; +import org.apache.http.ParseException; +import org.apache.http.client.HttpClient; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.config.SocketConfig; +import org.apache.http.entity.ContentType; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.lucene.index.*; import org.apache.lucene.search.*; import org.apache.solr.common.SolrException; @@ -30,15 +38,13 @@ import org.apache.solr.core.SolrCore; import org.apache.http.client.methods.HttpGet; import org.apache.http.HttpResponse; -import org.apache.http.params.BasicHttpParams; -import org.apache.http.params.CoreConnectionPNames; import org.apache.http.util.EntityUtils; -import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.client.DefaultRedirectStrategy; -import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; import org.slf4j.*; import java.io.*; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.*; import java.net.*; @@ -83,8 +89,8 @@ String fieldDenyParent = null; int connectionTimeOut; int socketTimeOut; - ThreadSafeClientConnManager httpConnectionManager = null; - DefaultHttpClient client = null; + PoolingHttpClientConnectionManager httpConnectionManager = null; + HttpClient client = null; int poolSize; public ManifoldCFSearchComponent() @@ -119,19 +125,34 @@ fieldAllowParent = allowAttributePrefix+"parent"; fieldDenyParent = denyAttributePrefix+"parent"; Integer connectionPoolSize = (Integer)args.get("ConnectionPoolSize"); - poolSize = (connectionPoolSize==null)?50:connectionPoolSize.intValue(); + poolSize = (connectionPoolSize==null)?50:connectionPoolSize; // Initialize the connection pool - httpConnectionManager = new ThreadSafeClientConnManager(); + httpConnectionManager = new PoolingHttpClientConnectionManager(); httpConnectionManager.setMaxTotal(poolSize); httpConnectionManager.setDefaultMaxPerRoute(poolSize); - BasicHttpParams params = new BasicHttpParams(); - params.setBooleanParameter(CoreConnectionPNames.TCP_NODELAY,true); - params.setBooleanParameter(CoreConnectionPNames.STALE_CONNECTION_CHECK,false); - params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT,socketTimeOut); - params.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,connectionTimeOut); - client = new DefaultHttpClient(httpConnectionManager,params); - client.setRedirectStrategy(new DefaultRedirectStrategy()); + + RequestConfig.Builder requestBuilder = RequestConfig.custom() + .setCircularRedirectsAllowed(true) + .setSocketTimeout(socketTimeOut) + .setStaleConnectionCheckEnabled(false) + .setExpectContinueEnabled(true) + .setConnectTimeout(connectionTimeOut) + .setConnectionRequestTimeout(socketTimeOut); + + HttpClientBuilder clientBuilder = HttpClients.custom() + .setConnectionManager(httpConnectionManager) + .setMaxConnTotal(1) + .disableAutomaticRetries() + .setDefaultRequestConfig(requestBuilder.build()) + .setRedirectStrategy(new DefaultRedirectStrategy()) + .setDefaultSocketConfig(SocketConfig.custom() + .setTcpNoDelay(true) + .setSoTimeout(socketTimeOut) + .build()); + + client = clientBuilder.build(); + } @Override @@ -144,7 +165,7 @@ // Log that we got here //LOG.info("prepare() entry params:\n" + params + "\ncontext: " + rb.req.getContext()); - String qry = (String)params.get(CommonParams.Q); + String qry = params.get(CommonParams.Q); if (qry != null) { //Check global allowed searches @@ -159,7 +180,7 @@ List<String> userAccessTokens; // Map from domain to user - Map<String,String> domainMap = new HashMap<String,String>(); + Map<String,String> domainMap = new HashMap<>(); // Get the authenticated user name from the parameters String authenticatedUserName = params.get(AUTHENTICATED_USER_NAME); @@ -192,7 +213,7 @@ { // No authenticated user name. // mod_authz_annotate may be in use upstream, so look for tokens from it. - userAccessTokens = new ArrayList<String>(); + userAccessTokens = new ArrayList<>(); String[] passedTokens = params.getParams(USER_TOKENS); if (passedTokens == null) { @@ -270,7 +291,7 @@ List<Query> list = rb.getFilters(); if (list == null) { - list = new ArrayList<Query>(); + list = new ArrayList<>(); rb.setFilters(list); } list.add(new ConstantScoreQuery(bq)); @@ -289,7 +310,7 @@ protected Query calculateCompleteSubquery(String allowField, String denyField, Query allowOpen, Query denyOpen, List<String> userAccessTokens) { BooleanQuery bq = new BooleanQuery(); - bq.setMaxClauseCount(1000000); + BooleanQuery.setMaxClauseCount(1000000); // Add the empty-acl case BooleanQuery subUnprotectedClause = new BooleanQuery(); @@ -374,23 +395,29 @@ int rval = httpResponse.getStatusLine().getStatusCode(); if (rval != 200) { - String response = EntityUtils.toString(httpResponse.getEntity(),"utf-8"); + String response = EntityUtils.toString(httpResponse.getEntity(), StandardCharsets.UTF_8); throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,"Couldn't fetch user's access tokens from ManifoldCF authority service: "+Integer.toString(rval)+"; "+response); } - InputStream is = httpResponse.getEntity().getContent(); - try + + try(InputStream is = httpResponse.getEntity().getContent()) { - String charSet = EntityUtils.getContentCharSet(httpResponse.getEntity()); - if (charSet == null) - charSet = "utf-8"; - Reader r = new InputStreamReader(is,charSet); + Charset charSet; try { - BufferedReader br = new BufferedReader(r); - try - { + ContentType ct = ContentType.get(httpResponse.getEntity()); + if (ct == null) + charSet = StandardCharsets.UTF_8; + else + charSet = ct.getCharset(); + }catch (ParseException e){ + charSet = StandardCharsets.UTF_8; + } + + + try(Reader r = new InputStreamReader(is,charSet); BufferedReader br = new BufferedReader(r)) + { // Read the tokens, one line at a time. If any authorities are down, we have no current way to note that, but someday we will. - List<String> tokenList = new ArrayList<String>(); + List<String> tokenList = new ArrayList<>(); while (true) { String line = br.readLine(); @@ -408,19 +435,6 @@ } return tokenList; } - finally - { - br.close(); - } - } - finally - { - r.close(); - } - } - finally - { - is.close(); } } finally
diff --git a/src/test/java/org/apache/solr/mcf/ManifoldCFSearchComponentTest.java b/src/test/java/org/apache/solr/mcf/ManifoldCFSearchComponentTest.java index 13f09a0..b0e14aa 100644 --- a/src/test/java/org/apache/solr/mcf/ManifoldCFSearchComponentTest.java +++ b/src/test/java/org/apache/solr/mcf/ManifoldCFSearchComponentTest.java
@@ -30,7 +30,6 @@ import org.eclipse.jetty.server.handler.ContextHandlerCollection; import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder;