You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2021/01/31 21:05:59 UTC
[lucene-solr] 03/03: @1295 Finish most of test core close issue,
some minor cleanup.
This is an automated email from the ASF dual-hosted git repository.
markrmiller pushed a commit to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
commit d45cb4cb5a5cf41c6a499b658b2cbd304c8267ee
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Sun Jan 31 15:03:37 2021 -0600
@1295 Finish most of test core close issue, some minor cleanup.
---
.../legacy/LegacyAbstractAnalyticsTest.java | 43 ++-
.../legacy/expression/LegacyFunctionTest.java | 3 +
.../facet/LegacyAbstractAnalyticsFacetTest.java | 4 +-
.../solr/analytics/value/CastingIntValueTest.java | 2 +
.../AbstractDataImportHandlerTestCase.java | 4 +-
.../solr/handler/dataimport/TestDocBuilder2.java | 6 +-
.../TestFileListWithLineEntityProcessor.java | 2 +-
.../dataimport/TestVariableResolverEndToEnd.java | 4 +-
.../extraction/ExtractingRequestHandlerTest.java | 51 +++-
...nguageIdentifierUpdateProcessorFactoryTest.java | 5 +-
...geIdentifierUpdateProcessorFactoryTestCase.java | 1 +
...penNLPLangDetectUpdateProcessorFactoryTest.java | 13 +-
...nguageIdentifierUpdateProcessorFactoryTest.java | 5 +-
.../src/java/org/apache/solr/api/AnnotatedApi.java | 2 +-
.../client/solrj/embedded/EmbeddedSolrServer.java | 10 +-
.../java/org/apache/solr/cloud/ZkShardTerms.java | 11 +-
.../src/java/org/apache/solr/core/SolrCore.java | 43 ++-
.../org/apache/solr/core/SolrResourceLoader.java | 117 ++++----
.../java/org/apache/solr/core/XmlConfigFile.java | 7 +-
.../apache/solr/handler/ReplicationHandler.java | 9 +-
.../src/java/org/apache/solr/pkg/PackageAPI.java | 2 +-
.../apache/solr/request/LocalSolrQueryRequest.java | 2 +-
.../apache/solr/servlet/SolrDispatchFilter.java | 15 +-
.../processor/DistributedUpdateProcessor.java | 6 +-
.../processor/DistributedZkUpdateProcessor.java | 2 +-
.../java/org/apache/solr/util/SafeXMLParsing.java | 1 +
.../solr/util/SolrJacksonAnnotationInspector.java | 2 +-
.../org/apache/solr/BasicFunctionalityTest.java | 25 +-
.../test/org/apache/solr/ConvertedLegacyTest.java | 44 +--
.../org/apache/solr/DisMaxRequestHandlerTest.java | 4 +-
solr/core/src/test/org/apache/solr/TestJoin.java | 28 +-
.../test/org/apache/solr/TestRandomDVFaceting.java | 43 ++-
solr/core/src/test/org/apache/solr/TestTrie.java | 9 +-
.../TestReversedWildcardFilterFactory.java | 1 +
.../solr/cloud/ChaosMonkeySafeLeaderTest.java | 2 +-
.../overseer/ZkCollectionPropsCachingTest.java | 5 +-
.../org/apache/solr/core/TestCoreContainer.java | 22 +-
.../org/apache/solr/handler/JsonLoaderTest.java | 21 +-
.../org/apache/solr/handler/TestCSVLoader.java | 2 +-
.../org/apache/solr/handler/TestCoreBackup.java | 142 +++++----
.../solr/handler/XmlUpdateRequestHandlerTest.java | 5 +-
.../handler/admin/CoreAdminCreateDiscoverTest.java | 53 ++--
.../handler/admin/CoreAdminRequestStatusTest.java | 25 +-
.../admin/CoreMergeIndexesAdminHandlerTest.java | 11 +-
.../apache/solr/handler/admin/InfoHandlerTest.java | 9 +-
.../solr/handler/admin/LukeRequestHandlerTest.java | 30 +-
.../solr/handler/admin/MBeansHandlerTest.java | 28 +-
.../admin/PropertiesRequestHandlerTest.java | 9 +-
.../handler/admin/ShowFileRequestHandlerTest.java | 5 +-
.../solr/handler/component/DebugComponentTest.java | 2 +
.../handler/component/ResponseBuilderTest.java | 17 +-
.../SuggestComponentContextFilterQueryTest.java | 4 +-
.../handler/component/TestExpandComponent.java | 14 +-
.../solr/handler/export/TestExportWriter.java | 165 ++++++-----
.../apache/solr/handler/tagger/TaggerTestCase.java | 14 +-
.../org/apache/solr/highlight/HighlighterTest.java | 2 +-
.../highlight/TestPostingsSolrHighlighter.java | 2 +-
.../solr/highlight/TestUnifiedSolrHighlighter.java | 2 +-
.../solr/metrics/SolrMetricsIntegrationTest.java | 72 ++---
.../test/org/apache/solr/request/TestFaceting.java | 1 +
.../apache/solr/request/TestIntervalFaceting.java | 178 ++++++------
.../solr/response/TestGeoJSONResponseWriter.java | 17 +-
.../solr/response/TestRawResponseWriter.java | 78 +++--
.../apache/solr/response/TestRawTransformer.java | 4 +-
.../solr/response/TestRetrieveFieldsOptimizer.java | 47 +--
.../transform/TestChildDocTransformer.java | 6 +-
.../transform/TestSubQueryTransformer.java | 4 +-
.../test/org/apache/solr/schema/CopyFieldTest.java | 12 +-
.../org/apache/solr/schema/TestSchemaField.java | 15 +-
.../apache/solr/schema/TestSortableTextField.java | 103 ++++---
.../org/apache/solr/search/QueryParsingTest.java | 66 +++--
.../apache/solr/search/SolrIndexSearcherTest.java | 232 ++++++++-------
.../solr/search/TestExtendedDismaxParser.java | 81 +++---
.../apache/solr/search/TestHashQParserPlugin.java | 91 ++++--
.../solr/search/TestMaxScoreQueryParser.java | 5 +-
...estOverriddenPrefixQueryForCustomFieldType.java | 9 +
.../org/apache/solr/search/TestSolr4Spatial2.java | 95 +++---
.../apache/solr/search/TestSolrQueryParser.java | 265 ++++++++---------
.../org/apache/solr/search/TestStressReorder.java | 20 +-
.../apache/solr/search/TestStressUserVersions.java | 20 +-
.../org/apache/solr/search/TestStressVersions.java | 20 +-
.../apache/solr/search/TestValueSourceCache.java | 5 +-
.../solr/search/facet/TestJsonFacetErrors.java | 168 ++++++-----
.../solr/search/function/TestFunctionQuery.java | 37 ++-
.../apache/solr/servlet/SolrRequestParserTest.java | 207 +++++++-------
.../solr/spelling/IndexBasedSpellCheckerTest.java | 317 ++++++++++-----------
.../org/apache/solr/update/AddBlockUpdateTest.java | 5 +-
.../apache/solr/update/SolrIndexConfigTest.java | 102 ++++---
.../solr/update/TestNestedUpdateProcessor.java | 13 +-
.../test/org/apache/solr/update/TestUpdate.java | 22 +-
.../AtomicUpdateProcessorFactoryTest.java | 23 +-
.../FieldMutatingUpdateProcessorTest.java | 7 +-
.../update/processor/NestedAtomicUpdateTest.java | 18 +-
.../SignatureUpdateProcessorFactoryTest.java | 14 +-
.../SkipExistingDocumentsProcessorFactoryTest.java | 15 +-
.../processor/TolerantUpdateProcessorTest.java | 24 +-
.../UpdateRequestProcessorFactoryTest.java | 15 +-
.../solr/client/solrj/impl/Http2SolrClient.java | 2 +
.../src/java/org/apache/solr/common/ParWork.java | 3 +-
.../solr/client/solrj/io/stream/StreamingTest.java | 5 +
.../solr/client/solrj/request/SchemaTest.java | 1 -
.../src/java/org/apache/solr/SolrTestCase.java | 20 +-
.../src/java/org/apache/solr/SolrTestCaseJ4.java | 52 +++-
.../update/processor/UpdateProcessorTestBase.java | 8 +-
.../solr/cloud/MiniSolrCloudClusterTest.java | 1 +
105 files changed, 2001 insertions(+), 1641 deletions(-)
diff --git a/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/LegacyAbstractAnalyticsTest.java b/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/LegacyAbstractAnalyticsTest.java
index f7454f8..9eee751 100644
--- a/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/LegacyAbstractAnalyticsTest.java
+++ b/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/LegacyAbstractAnalyticsTest.java
@@ -38,6 +38,7 @@ import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.analytics.util.AnalyticsResponseHeadings;
import org.apache.solr.analytics.util.MedianCalculator;
import org.apache.solr.analytics.util.OrdinalCalculator;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.rest.schema.FieldTypeXmlAdapter;
import org.junit.AfterClass;
@@ -107,22 +108,32 @@ public class LegacyAbstractAnalyticsTest extends SolrTestCaseJ4 {
// This is a little fragile in that it demands the elements have the same name as type, i.e. when looking for a
// VAL_TYPE.DOUBLE, the element in question is <double name="blah">47.0</double>.
sb.append("/").append(type.toString()).append("[@name='").append(name).append("']");
- String val = h.getCore().getResourceLoader().getXPath().compile(sb.toString()).evaluate(doc, XPathConstants.STRING).toString();
- try {
- switch (type) {
- case INTEGER: return Integer.parseInt(val);
- case DOUBLE: return Double.parseDouble(val);
- case FLOAT: return Float.parseFloat(val);
- case LONG: return Long.parseLong(val);
- case STRING: assertTrue(rawResponse, val != null && val.length() > 0 ); return val;
- case DATE: assertTrue(rawResponse, val != null && val.length() > 0 ); return val;
+ try (SolrCore core = h.getCore()) {
+ String val = core.getResourceLoader().getXPath().compile(sb.toString()).evaluate(doc, XPathConstants.STRING).toString();
+ try {
+ switch (type) {
+ case INTEGER:
+ return Integer.parseInt(val);
+ case DOUBLE:
+ return Double.parseDouble(val);
+ case FLOAT:
+ return Float.parseFloat(val);
+ case LONG:
+ return Long.parseLong(val);
+ case STRING:
+ assertTrue(rawResponse, val != null && val.length() > 0);
+ return val;
+ case DATE:
+ assertTrue(rawResponse, val != null && val.length() > 0);
+ return val;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("Caught exception in getStatResult, xPath = " + sb.toString() + " \nraw data: " + rawResponse);
}
- } catch (Exception e) {
- e.printStackTrace();
- fail("Caught exception in getStatResult, xPath = " + sb.toString() + " \nraw data: " + rawResponse);
+ fail("Unknown type used in getStatResult");
+ return null; // Really can't get here, but the compiler thinks we can!
}
- fail("Unknown type used in getStatResult");
- return null; // Really can't get here, but the compiler thinks we can!
}
@@ -201,7 +212,9 @@ public class LegacyAbstractAnalyticsTest extends SolrTestCaseJ4 {
}
public static SolrQueryRequest request(String...args){
- return SolrTestCaseJ4.req( ObjectArrays.concat(BASEPARMS, args,String.class) );
+ SolrQueryRequest req = SolrTestCaseJ4.req(ObjectArrays.concat(BASEPARMS, args, String.class));
+ req.close();
+ return req;
}
public static SolrQueryRequest request(String[] args, String... additional){
diff --git a/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/expression/LegacyFunctionTest.java b/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/expression/LegacyFunctionTest.java
index 93bd6e4..bdb12df 100644
--- a/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/expression/LegacyFunctionTest.java
+++ b/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/expression/LegacyFunctionTest.java
@@ -19,6 +19,8 @@ package org.apache.solr.analytics.legacy.expression;
import org.apache.solr.analytics.legacy.LegacyAbstractAnalyticsTest;
import org.apache.solr.analytics.legacy.facet.LegacyAbstractAnalyticsFacetTest;
+import org.apache.solr.common.util.IOUtils;
+import org.apache.solr.request.SolrQueryRequest;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -79,6 +81,7 @@ public class LegacyFunctionTest extends LegacyAbstractAnalyticsTest {
assertU(commit());
setResponse(h.query(request(fileToStringArr(LegacyFunctionTest.class, fileName))));
+
}
@Test
diff --git a/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/facet/LegacyAbstractAnalyticsFacetTest.java b/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/facet/LegacyAbstractAnalyticsFacetTest.java
index 086fe09..c26055a 100644
--- a/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/facet/LegacyAbstractAnalyticsFacetTest.java
+++ b/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/facet/LegacyAbstractAnalyticsFacetTest.java
@@ -288,7 +288,9 @@ public class LegacyAbstractAnalyticsFacetTest extends SolrTestCaseJ4 {
}
public static SolrQueryRequest request(String...args){
- return SolrTestCaseJ4.req( ObjectArrays.concat(BASEPARMS, args,String.class) );
+ SolrQueryRequest req = SolrTestCaseJ4.req(ObjectArrays.concat(BASEPARMS, args, String.class));
+ req.close();
+ return req;
}
public static final String[] BASEPARMS = new String[]{ "q", "*:*", "indent", "true", "olap", "true", "rows", "0" };
diff --git a/solr/contrib/analytics/src/test/org/apache/solr/analytics/value/CastingIntValueTest.java b/solr/contrib/analytics/src/test/org/apache/solr/analytics/value/CastingIntValueTest.java
index ebaedf3..6f2f378 100644
--- a/solr/contrib/analytics/src/test/org/apache/solr/analytics/value/CastingIntValueTest.java
+++ b/solr/contrib/analytics/src/test/org/apache/solr/analytics/value/CastingIntValueTest.java
@@ -19,12 +19,14 @@ package org.apache.solr.analytics.value;
import java.util.Arrays;
import java.util.Iterator;
+import org.apache.lucene.util.LuceneTestCase;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.analytics.value.AnalyticsValueStream.ExpressionType;
import org.apache.solr.analytics.value.FillableTestValue.TestIntValue;
import org.apache.solr.analytics.value.constant.ConstantIntValue;
import org.junit.Test;
+@LuceneTestCase.Nightly
public class CastingIntValueTest extends SolrTestCaseJ4 {
@Test
diff --git a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/AbstractDataImportHandlerTestCase.java b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/AbstractDataImportHandlerTestCase.java
index 60f908b..bcbc7ec 100644
--- a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/AbstractDataImportHandlerTestCase.java
+++ b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/AbstractDataImportHandlerTestCase.java
@@ -81,7 +81,7 @@ public abstract class AbstractDataImportHandlerTestCase extends
LocalSolrQueryRequest request = lrf.makeRequest("command", "full-import",
"debug", "on", "clean", "true", "commit", "true", "dataConfig",
dataConfig);
- return h.query("/dataimport", request);
+ return query("/dataimport", request);
}
protected void runDeltaImport(String dataConfig) throws Exception {
@@ -130,7 +130,7 @@ public abstract class AbstractDataImportHandlerTestCase extends
l.add(e.getKey(),e.getValue());
}
LocalSolrQueryRequest request = new LocalSolrQueryRequest(h.getCore(), l, true);
- h.query("/dataimport", request);
+ query("/dataimport", request);
}
/**
diff --git a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestDocBuilder2.java b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestDocBuilder2.java
index 2941f58..7cc3a0c 100644
--- a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestDocBuilder2.java
+++ b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestDocBuilder2.java
@@ -117,7 +117,7 @@ public class TestDocBuilder2 extends AbstractDataImportHandlerTestCase {
"debug", "on", "clean", "true", "commit", "true",
"category", "search",
"dataConfig", REQUEST_PARAM_AS_VARIABLE);
- h.query("/dataimport", request);
+ query("/dataimport", request);
assertQ(req("desc:ApacheSolr"), "//*[@numFound='1']");
}
@@ -132,7 +132,7 @@ public class TestDocBuilder2 extends AbstractDataImportHandlerTestCase {
LocalSolrQueryRequest request = lrf.makeRequest("command", "full-import",
"debug", "on", "clean", "true", "commit", "true",
"dataConfig", DATA_CONFIG_WITH_DYNAMIC_FIELD_NAMES);
- h.query("/dataimport", request);
+ query("/dataimport", request);
assertQ(req("id:101"), "//*[@numFound='1']", "//*[@name='101_s']");
}
@@ -148,7 +148,7 @@ public class TestDocBuilder2 extends AbstractDataImportHandlerTestCase {
"debug", "on", "clean", "true", "commit", "true",
"mypk", "id", "text", "desc",
"dataConfig", DATA_CONFIG_WITH_TEMPLATIZED_FIELD_NAMES);
- h.query("/dataimport", request);
+ query("/dataimport", request);
assertQ(req("id:101"), "//*[@numFound='1']");
}
diff --git a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestFileListWithLineEntityProcessor.java b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestFileListWithLineEntityProcessor.java
index aad8e30..618c89e 100644
--- a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestFileListWithLineEntityProcessor.java
+++ b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestFileListWithLineEntityProcessor.java
@@ -39,7 +39,7 @@ public class TestFileListWithLineEntityProcessor extends AbstractDataImportHandl
LocalSolrQueryRequest request = lrf.makeRequest(
"command", "full-import", "dataConfig", config,
"clean", "true", "commit", "true", "synchronous", "true", "indent", "true");
- h.query("/dataimport", request);
+ query("/dataimport", request);
assertQ(req("*:*"), "//*[@numFound='9']");
assertQ(req("id:?\\ line\\ one"), "//*[@numFound='3']");
diff --git a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestVariableResolverEndToEnd.java b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestVariableResolverEndToEnd.java
index 8ee6878..3390af0 100644
--- a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestVariableResolverEndToEnd.java
+++ b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestVariableResolverEndToEnd.java
@@ -36,11 +36,11 @@ public class TestVariableResolverEndToEnd extends AbstractDIHJdbcTestCase {
@Test
public void test() throws Exception {
- h.query("/dataimport", generateRequest());
+ query("/dataimport", generateRequest());
SolrQueryRequest req = null;
try {
req = req("q", "*:*", "wt", "json", "indent", "true");
- String response = h.query(req);
+ String response = query(req);
log.debug(response);
response = response.replaceAll("\\s","");
Assert.assertTrue(response.contains("\"numFound\":1"));
diff --git a/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ExtractingRequestHandlerTest.java b/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ExtractingRequestHandlerTest.java
index 953d210..978e9fd 100644
--- a/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ExtractingRequestHandlerTest.java
+++ b/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ExtractingRequestHandlerTest.java
@@ -26,6 +26,7 @@ import org.apache.solr.common.SolrException;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.ContentStreamBase;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.request.LocalSolrQueryRequest;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
@@ -65,7 +66,9 @@ public class ExtractingRequestHandlerTest extends SolrTestCaseJ4 {
@Test
public void testExtraction() throws Exception {
- ExtractingRequestHandler handler = (ExtractingRequestHandler) h.getCore().getRequestHandler("/update/extract");
+ SolrCore core = h.getCore();
+ ExtractingRequestHandler handler = (ExtractingRequestHandler) core.getRequestHandler("/update/extract");
+ core.close();
assertTrue("handler is null and it shouldn't be", handler != null);
loadLocal("extraction/solr-word.pdf",
"fmap.created", "extractedDate",
@@ -226,7 +229,9 @@ public class ExtractingRequestHandlerTest extends SolrTestCaseJ4 {
@Test
public void testDefaultField() throws Exception {
- ExtractingRequestHandler handler = (ExtractingRequestHandler) h.getCore().getRequestHandler("/update/extract");
+ SolrCore core = h.getCore();
+ ExtractingRequestHandler handler = (ExtractingRequestHandler) core.getRequestHandler("/update/extract");
+ core.close();
assertNotNull("handler is null and it shouldn't be", handler);
try {
@@ -273,7 +278,9 @@ public class ExtractingRequestHandlerTest extends SolrTestCaseJ4 {
@Test
public void testLiterals() throws Exception {
- ExtractingRequestHandler handler = (ExtractingRequestHandler) h.getCore().getRequestHandler("/update/extract");
+ SolrCore core = h.getCore();
+ ExtractingRequestHandler handler = (ExtractingRequestHandler) core.getRequestHandler("/update/extract");
+ core.close();
assertTrue("handler is null and it shouldn't be", handler != null);
//test literal
loadLocal("extraction/version_control.xml", "fmap.created", "extractedDate", "fmap.producer", "extractedProducer",
@@ -399,7 +406,9 @@ public class ExtractingRequestHandlerTest extends SolrTestCaseJ4 {
@Test
public void testPlainTextSpecifyingMimeType() throws Exception {
- ExtractingRequestHandler handler = (ExtractingRequestHandler) h.getCore().getRequestHandler("/update/extract");
+ SolrCore core = h.getCore();
+ ExtractingRequestHandler handler = (ExtractingRequestHandler) core.getRequestHandler("/update/extract");
+ core.close();
assertTrue("handler is null and it shouldn't be", handler != null);
// Load plain text specifying MIME type:
@@ -419,7 +428,9 @@ public class ExtractingRequestHandlerTest extends SolrTestCaseJ4 {
@Test
public void testPlainTextSpecifyingResourceName() throws Exception {
- ExtractingRequestHandler handler = (ExtractingRequestHandler) h.getCore().getRequestHandler("/update/extract");
+ SolrCore core = h.getCore();
+ ExtractingRequestHandler handler = (ExtractingRequestHandler) core.getRequestHandler("/update/extract");
+ core.close();
assertTrue("handler is null and it shouldn't be", handler != null);
// Load plain text specifying filename
@@ -439,7 +450,9 @@ public class ExtractingRequestHandlerTest extends SolrTestCaseJ4 {
@Test
public void testCommitWithin() throws Exception {
- ExtractingRequestHandler handler = (ExtractingRequestHandler) h.getCore().getRequestHandler("/update/extract");
+ SolrCore core = h.getCore();
+ ExtractingRequestHandler handler = (ExtractingRequestHandler) core.getRequestHandler("/update/extract");
+ core.close();
assertTrue("handler is null and it shouldn't be", handler != null);
SolrQueryRequest req = req("literal.id", "one",
@@ -464,7 +477,9 @@ public class ExtractingRequestHandlerTest extends SolrTestCaseJ4 {
@Test
public void testExtractOnly() throws Exception {
- ExtractingRequestHandler handler = (ExtractingRequestHandler) h.getCore().getRequestHandler("/update/extract");
+ SolrCore core = h.getCore();
+ ExtractingRequestHandler handler = (ExtractingRequestHandler) core.getRequestHandler("/update/extract");
+ core.close();
assertTrue("handler is null and it shouldn't be", handler != null);
SolrQueryResponse rsp = loadLocal("extraction/solr-word.pdf", ExtractingParams.EXTRACT_ONLY, "true");
assertTrue("rsp is null and it shouldn't be", rsp != null);
@@ -501,7 +516,9 @@ public class ExtractingRequestHandlerTest extends SolrTestCaseJ4 {
@Test
public void testXPath() throws Exception {
- ExtractingRequestHandler handler = (ExtractingRequestHandler) h.getCore().getRequestHandler("/update/extract");
+ SolrCore core = h.getCore();
+ ExtractingRequestHandler handler = (ExtractingRequestHandler) core.getRequestHandler("/update/extract");
+ core.close();
assertTrue("handler is null and it shouldn't be", handler != null);
SolrQueryResponse rsp = loadLocal("extraction/example.html",
ExtractingParams.XPATH_EXPRESSION, "/xhtml:html/xhtml:body/xhtml:a/descendant::node()",
@@ -528,8 +545,9 @@ public class ExtractingRequestHandlerTest extends SolrTestCaseJ4 {
/** test arabic PDF extraction is functional */
@Test
public void testArabicPDF() throws Exception {
- ExtractingRequestHandler handler = (ExtractingRequestHandler)
- h.getCore().getRequestHandler("/update/extract");
+ SolrCore core = h.getCore();
+ ExtractingRequestHandler handler = (ExtractingRequestHandler) core.getRequestHandler("/update/extract");
+ core.close();
assertTrue("handler is null and it shouldn't be", handler != null);
loadLocal("extraction/arabic.pdf", "fmap.created", "extractedDate", "fmap.producer", "extractedProducer",
@@ -547,8 +565,9 @@ public class ExtractingRequestHandlerTest extends SolrTestCaseJ4 {
@Test
public void testTikaExceptionHandling() throws Exception {
- ExtractingRequestHandler handler = (ExtractingRequestHandler)
- h.getCore().getRequestHandler("/update/extract");
+ SolrCore core = h.getCore();
+ ExtractingRequestHandler handler = (ExtractingRequestHandler) core.getRequestHandler("/update/extract");
+ core.close();
assertTrue("handler is null and it shouldn't be", handler != null);
expectThrows(Exception.class, () -> {
@@ -577,7 +596,9 @@ public class ExtractingRequestHandlerTest extends SolrTestCaseJ4 {
@Test
public void testWrongStreamType() throws Exception {
- ExtractingRequestHandler handler = (ExtractingRequestHandler) h.getCore().getRequestHandler("/update/extract");
+ SolrCore core = h.getCore();
+ ExtractingRequestHandler handler = (ExtractingRequestHandler) core.getRequestHandler("/update/extract");
+ core.close();
assertTrue("handler is null and it shouldn't be", handler != null);
expectThrows(Exception.class, () -> {
@@ -598,7 +619,9 @@ public class ExtractingRequestHandlerTest extends SolrTestCaseJ4 {
}
public void testLiteralsOverride() throws Exception {
- ExtractingRequestHandler handler = (ExtractingRequestHandler) h.getCore().getRequestHandler("/update/extract");
+ SolrCore core = h.getCore();
+ ExtractingRequestHandler handler = (ExtractingRequestHandler) core.getRequestHandler("/update/extract");
+ core.close();
assertTrue("handler is null and it shouldn't be", handler != null);
assertQ(req("*:*"), "//*[@numFound='0']");
diff --git a/solr/contrib/langid/src/test/org/apache/solr/update/processor/LangDetectLanguageIdentifierUpdateProcessorFactoryTest.java b/solr/contrib/langid/src/test/org/apache/solr/update/processor/LangDetectLanguageIdentifierUpdateProcessorFactoryTest.java
index 1b6a085..acf6ac6 100644
--- a/solr/contrib/langid/src/test/org/apache/solr/update/processor/LangDetectLanguageIdentifierUpdateProcessorFactoryTest.java
+++ b/solr/contrib/langid/src/test/org/apache/solr/update/processor/LangDetectLanguageIdentifierUpdateProcessorFactoryTest.java
@@ -18,12 +18,15 @@ package org.apache.solr.update.processor;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.core.SolrCore;
import org.junit.Test;
public class LangDetectLanguageIdentifierUpdateProcessorFactoryTest extends LanguageIdentifierUpdateProcessorFactoryTestCase {
@Override
protected LanguageIdentifierUpdateProcessor createLangIdProcessor(ModifiableSolrParams parameters) throws Exception {
- return new LangDetectLanguageIdentifierUpdateProcessor(_parser.buildRequestFrom(h.getCore(), parameters, null), resp, null);
+ try (SolrCore core = h.getCore()) {
+ return new LangDetectLanguageIdentifierUpdateProcessor(_parser.buildRequestFrom(core, parameters, null), resp, null);
+ }
}
// this one actually works better it seems with short docs
diff --git a/solr/contrib/langid/src/test/org/apache/solr/update/processor/LanguageIdentifierUpdateProcessorFactoryTestCase.java b/solr/contrib/langid/src/test/org/apache/solr/update/processor/LanguageIdentifierUpdateProcessorFactoryTestCase.java
index 5fa010c..5f8232f 100644
--- a/solr/contrib/langid/src/test/org/apache/solr/update/processor/LanguageIdentifierUpdateProcessorFactoryTestCase.java
+++ b/solr/contrib/langid/src/test/org/apache/solr/update/processor/LanguageIdentifierUpdateProcessorFactoryTestCase.java
@@ -45,6 +45,7 @@ public abstract class LanguageIdentifierUpdateProcessorFactoryTestCase extends S
assertNotNull(chained);
chained = core.getUpdateProcessingChain("lang_id_opennlp");
assertNotNull(chained);
+ core.close();
}
@Override
diff --git a/solr/contrib/langid/src/test/org/apache/solr/update/processor/OpenNLPLangDetectUpdateProcessorFactoryTest.java b/solr/contrib/langid/src/test/org/apache/solr/update/processor/OpenNLPLangDetectUpdateProcessorFactoryTest.java
index 1d9dbeb..dfcb765 100644
--- a/solr/contrib/langid/src/test/org/apache/solr/update/processor/OpenNLPLangDetectUpdateProcessorFactoryTest.java
+++ b/solr/contrib/langid/src/test/org/apache/solr/update/processor/OpenNLPLangDetectUpdateProcessorFactoryTest.java
@@ -19,6 +19,7 @@ package org.apache.solr.update.processor;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.request.SolrQueryRequest;
import org.junit.Test;
@@ -33,11 +34,13 @@ public class OpenNLPLangDetectUpdateProcessorFactoryTest extends LanguageIdentif
if (parameters.get("langid.threshold") == null) { // handle superclass tests that don't provide confidence threshold
parameters.set("langid.threshold", "0.3");
}
- SolrQueryRequest req = _parser.buildRequestFrom(h.getCore(), new ModifiableSolrParams(), null);
- OpenNLPLangDetectUpdateProcessorFactory factory = new OpenNLPLangDetectUpdateProcessorFactory();
- factory.init(parameters.toNamedList());
- factory.inform(h.getCore());
- return (OpenNLPLangDetectUpdateProcessor)factory.getInstance(req, resp, null);
+ try (SolrCore core = h.getCore()) {
+ SolrQueryRequest req = _parser.buildRequestFrom(core, new ModifiableSolrParams(), null);
+ OpenNLPLangDetectUpdateProcessorFactory factory = new OpenNLPLangDetectUpdateProcessorFactory();
+ factory.init(parameters.toNamedList());
+ factory.inform(core);
+ return (OpenNLPLangDetectUpdateProcessor) factory.getInstance(req, resp, null);
+ }
}
// this one actually works better it seems with short docs
diff --git a/solr/contrib/langid/src/test/org/apache/solr/update/processor/TikaLanguageIdentifierUpdateProcessorFactoryTest.java b/solr/contrib/langid/src/test/org/apache/solr/update/processor/TikaLanguageIdentifierUpdateProcessorFactoryTest.java
index d4e68a8..821a0d9 100644
--- a/solr/contrib/langid/src/test/org/apache/solr/update/processor/TikaLanguageIdentifierUpdateProcessorFactoryTest.java
+++ b/solr/contrib/langid/src/test/org/apache/solr/update/processor/TikaLanguageIdentifierUpdateProcessorFactoryTest.java
@@ -18,12 +18,15 @@ package org.apache.solr.update.processor;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.core.SolrCore;
import org.junit.Test;
public class TikaLanguageIdentifierUpdateProcessorFactoryTest extends LanguageIdentifierUpdateProcessorFactoryTestCase {
@Override
protected LanguageIdentifierUpdateProcessor createLangIdProcessor(ModifiableSolrParams parameters) throws Exception {
- return new TikaLanguageIdentifierUpdateProcessor(_parser.buildRequestFrom(h.getCore(), parameters, null), resp, null);
+ try (SolrCore core = h.getCore()) {
+ return new TikaLanguageIdentifierUpdateProcessor(_parser.buildRequestFrom(core, parameters, null), resp, null);
+ }
}
diff --git a/solr/core/src/java/org/apache/solr/api/AnnotatedApi.java b/solr/core/src/java/org/apache/solr/api/AnnotatedApi.java
index f7c558b..fcf51eb 100644
--- a/solr/core/src/java/org/apache/solr/api/AnnotatedApi.java
+++ b/solr/core/src/java/org/apache/solr/api/AnnotatedApi.java
@@ -193,7 +193,7 @@ public class AnnotatedApi extends Api implements PermissionNameProvider {
final String command;
final Method method;
final Object obj;
- ObjectMapper mapper = SolrJacksonAnnotationInspector.createObjectMapper();
+ ObjectMapper mapper = SolrJacksonAnnotationInspector.INSTANCE.createObjectMapper();
int paramsCount;
Class c;
boolean isWrappedInPayloadObj = false;
diff --git a/solr/core/src/java/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java b/solr/core/src/java/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
index bf7c22b..1fd0b73 100644
--- a/solr/core/src/java/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
+++ b/solr/core/src/java/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
@@ -46,6 +46,7 @@ import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.ContentStreamBase;
+import org.apache.solr.common.util.IOUtils;
import org.apache.solr.common.util.JavaBinCodec;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.CoreContainer;
@@ -195,9 +196,11 @@ public class EmbeddedSolrServer extends SolrClient {
// Check for cores action
SolrQueryRequest req = null;
SolrCore core = null;
+ boolean closeCore = false;
try {
if (req == null) {
core = coreContainer.getCore(coreName);
+ closeCore = true;
} else {
core = req.getCore();
}
@@ -280,10 +283,9 @@ public class EmbeddedSolrServer extends SolrClient {
ParWork.propagateInterrupt(ex);
throw new SolrServerException(ex);
} finally {
- if (req != null) {
- req.close();
- } else {
- core.close();
+ IOUtils.closeQuietly(req);
+ if (closeCore) {
+ IOUtils.closeQuietly(core);
}
SolrRequestInfo.clearRequestInfo();
}
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java b/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
index fac8d25..6ec7248 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
@@ -108,7 +108,7 @@ public class ZkShardTerms implements Closeable {
this.zkClient = zkClient;
retryRegisterWatcher();
if (terms.get() == null) {
- terms.set(new ShardTerms(new ConcurrentHashMap<>(), -1));
+ terms.set(new ShardTerms(Collections.emptyMap(), -1));
}
assert ObjectReleaseTracker.track(this);
}
@@ -358,7 +358,12 @@ public class ZkShardTerms implements Closeable {
* Fetch latest terms from ZK
*/
public void refreshTerms(boolean setWatch, int version) throws KeeperException {
- lock.lock();
+ try {
+ lock.lockInterruptibly();
+ } catch (InterruptedException e) {
+ ParWork.propagateInterrupt(e);
+ throw new AlreadyClosedException(e);
+ }
try {
ShardTerms newTerms;
Watcher watcher = event -> {
@@ -384,7 +389,7 @@ public class ZkShardTerms implements Closeable {
try {
Stat stat = new Stat();
byte[] data = zkClient.getData(znodePath, setWatch ? watcher : null, stat, true);
- ConcurrentHashMap<String,Long> values = new ConcurrentHashMap<>((Map<String,Long>) Utils.fromJSON(data));
+ Map<String,Long> values = Collections.unmodifiableMap(new HashMap<>((Map<String,Long>) Utils.fromJSON(data)));
// nocommit
log.info("refresh shard terms to zk version {}", stat.getVersion());
newTerms = new ShardTerms(values, stat.getVersion());
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java b/solr/core/src/java/org/apache/solr/core/SolrCore.java
index cfa1301..c4eb8d3 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -714,7 +714,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
public SolrCore reload(ConfigSet coreConfig) throws IOException, InterruptedException {
log.info("Reload SolrCore");
- if (coreContainer.isShutDown() || isClosed() || closing) {
+ if (closing) {
throw new AlreadyClosedException();
}
// only one reload at a time
@@ -724,7 +724,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
try {
if (!locked && reloadyWaiting.get() > 1) {
log.info("Skipping recovery because there is another already queued");
- lock.lock();
+ lock.lockInterruptibly();
lock.unlock();
return null;
}
@@ -1731,7 +1731,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
public void closeAndWait() {
close();
- int timeouts = 180;
+ int timeouts = 30;
TimeOut timeout = new TimeOut(timeouts, TimeUnit.SECONDS, TimeSource.NANO_TIME);
int cnt = 0;
@@ -1739,9 +1739,9 @@ public final class SolrCore implements SolrInfoBean, Closeable {
cnt++;
try {
synchronized (closeAndWait) {
- closeAndWait.wait(1);
+ closeAndWait.wait(250);
}
- if (cnt >= 3 && !closing) {
+ if (cnt >= 2 && !closing) {
close();
}
log.warn("close count is {} {} closing={} isClosed={}", name, refCount.get(), closing, isClosed);
@@ -1760,7 +1760,12 @@ public final class SolrCore implements SolrInfoBean, Closeable {
try {
if (getUpdateHandler() != null && getUpdateHandler().getSolrCoreState() != null) {
reloadLock = getUpdateHandler().getSolrCoreState().getReloadLock();
- reloadLock.lock();
+ try {
+ reloadLock.lockInterruptibly();
+ } catch (InterruptedException e) {
+ ParWork.propagateInterrupt(e);
+ throw new AlreadyClosedException(e);
+ }
}
if (closing) {
@@ -2307,7 +2312,13 @@ public final class SolrCore implements SolrInfoBean, Closeable {
}
// use the searcher lock to prevent multiple people from trying to open at once
- openSearcherLock.lock();
+ try {
+ openSearcherLock.lockInterruptibly();
+ } catch (InterruptedException e) {
+ ParWork.propagateInterrupt(e);
+ throw new AlreadyClosedException(e);
+ }
+
try {
// try again
@@ -2351,7 +2362,12 @@ public final class SolrCore implements SolrInfoBean, Closeable {
if (coreContainer.isShutDown()) {
throw new AlreadyClosedException();
}
- openSearcherLock.lock();
+ try {
+ openSearcherLock.lockInterruptibly();
+ } catch (InterruptedException e) {
+ ParWork.propagateInterrupt(e);
+ throw new AlreadyClosedException(e);
+ }
try {
String newIndexDir = getNewIndexDir();
@@ -2482,7 +2498,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
ParWork.propagateInterrupt(e);
throw new SolrException(ErrorCode.SERVER_ERROR, "Error opening new searcher", e);
} finally {
- openSearcherLock.unlock();
+ if (openSearcherLock != null && openSearcherLock.isHeldByCurrentThread()) openSearcherLock.unlock();
if (newestSearcher != null) {
newestSearcher.decref();
}
@@ -2623,7 +2639,12 @@ public final class SolrCore implements SolrInfoBean, Closeable {
RefCounted<SolrIndexSearcher> searchHolder = null;
boolean success = false;
AtomicBoolean registered = new AtomicBoolean(false);
- openSearcherLock.lock();
+ try {
+ openSearcherLock.lockInterruptibly();
+ } catch (InterruptedException e) {
+ ParWork.propagateInterrupt(e);
+ throw new AlreadyClosedException(e);
+ }
Timer.Context timerContext = newSearcherTimer.time();
try {
searchHolder = openNewSearcher(updateHandlerReopens, false);
@@ -2797,7 +2818,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
} finally {
// we want to do this after we decrement onDeckSearchers so another thread
// doesn't increment first and throw a false warning.
- openSearcherLock.unlock();
+ if (openSearcherLock != null && openSearcherLock.isHeldByCurrentThread()) openSearcherLock.unlock();
}
}
diff --git a/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java b/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
index 6e81ce3..019f352 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
@@ -89,8 +89,6 @@ import javax.xml.xpath.XPathExpression;
public class SolrResourceLoader implements ResourceLoader, Closeable {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
-
private static final String base = "org.apache.solr";
private static final String[] packages = {
"", "analysis.", "schema.", "handler.", "handler.tagger.", "search.", "update.", "core.", "response.", "request.",
@@ -99,27 +97,18 @@ public class SolrResourceLoader implements ResourceLoader, Closeable {
};
private static final Charset UTF_8 = StandardCharsets.UTF_8;
public static final URL[] EMPTY_URL_ARRAY = new URL[0];
+ private static XPathFactoryImpl xpathFactory;
private final SystemIdResolver sysIdResolver;
- public volatile Configuration conf;
-
- public volatile XPathFactoryImpl xpathFactory;
-
-
- public XPathExpression shardHandlerFactoryExp;
- public XPathExpression counterExp;
- public XPathExpression meterExp;
- public XPathExpression timerExp;
- public XPathExpression histoExp;
- public XPathExpression historyExp;
- public XPathExpression transientCoreCacheFactoryExp;
- public XPathExpression tracerConfigExp;
+ public static XPathFactoryImpl getXpathFactory() {
+ return xpathFactory;
+ }
- public XPathExpression coreLoadThreadsExp;
- public XPathExpression persistentExp;
- public XPathExpression sharedLibExp;
- public XPathExpression zkHostExp;
- public XPathExpression coresExp;
+ static String luceneMatchVersionPath = "/config/" + IndexSchema.LUCENE_MATCH_VERSION_PARAM;
+ static String indexDefaultsPath = "/config/indexDefaults";
+ static String mainIndexPath = "/config/mainIndex";
+ static String nrtModePath = "/config/indexConfig/nrtmode";
+ static String unlockOnStartupPath = "/config/indexConfig/unlockOnStartup";
static String shardHandlerFactoryPath = "solr/shardHandlerFactory";
static String counterExpPath = "solr/metrics/suppliers/counter";
@@ -136,16 +125,6 @@ public class SolrResourceLoader implements ResourceLoader, Closeable {
static String zkHostPath = "solr/@zkHost";
static String coresPath = "solr/cores";
- public XPathExpression xpathOrExp;
- public XPathExpression schemaNameExp;
- public XPathExpression schemaVersionExp;
- public XPathExpression schemaSimExp;
- public XPathExpression defaultSearchFieldExp;
- public XPathExpression solrQueryParserDefaultOpExp;
- public XPathExpression schemaUniqueKeyExp;
- public XPathExpression fieldTypeXPathExpressionsExp;
- public XPathExpression copyFieldsExp;
-
public static String schemaNamePath = IndexSchema.stepsToPath(IndexSchema.SCHEMA, IndexSchema.AT + IndexSchema.NAME);
public static String schemaVersionPath = "/schema/@version";
@@ -161,29 +140,65 @@ public class SolrResourceLoader implements ResourceLoader, Closeable {
public static String schemaUniqueKeyPath = IndexSchema.stepsToPath(IndexSchema.SCHEMA, IndexSchema.UNIQUE_KEY, IndexSchema.TEXT_FUNCTION);
- public XPathExpression luceneMatchVersionExp;
- public XPathExpression indexDefaultsExp;
- public XPathExpression mainIndexExp;
- public XPathExpression nrtModeExp;
- public XPathExpression unlockOnStartupExp;
-
- static String luceneMatchVersionPath = "/config/" + IndexSchema.LUCENE_MATCH_VERSION_PARAM;
- static String indexDefaultsPath = "/config/indexDefaults";
- static String mainIndexPath = "/config/mainIndex";
- static String nrtModePath = "/config/indexConfig/nrtmode";
- static String unlockOnStartupPath = "/config/indexConfig/unlockOnStartup";
+ public static XPathExpression shardHandlerFactoryExp;
+ public static XPathExpression counterExp;
+ public static XPathExpression meterExp;
+ public static XPathExpression timerExp;
+ public static XPathExpression histoExp;
+ public static XPathExpression historyExp;
+ public static XPathExpression transientCoreCacheFactoryExp;
+ public static XPathExpression tracerConfigExp;
+
+ public static XPathExpression coreLoadThreadsExp;
+ public static XPathExpression persistentExp;
+ public static XPathExpression sharedLibExp;
+ public static XPathExpression zkHostExp;
+ public static XPathExpression coresExp;
+
+ public static XPathExpression xpathOrExp;
+ public static XPathExpression schemaNameExp;
+ public static XPathExpression schemaVersionExp;
+ public static XPathExpression schemaSimExp;
+ public static XPathExpression defaultSearchFieldExp;
+ public static XPathExpression solrQueryParserDefaultOpExp;
+ public static XPathExpression schemaUniqueKeyExp;
+ public static XPathExpression fieldTypeXPathExpressionsExp;
+ public static XPathExpression copyFieldsExp;
+
+ public static XPathExpression luceneMatchVersionExp;
+ public static XPathExpression indexDefaultsExp;
+ public static XPathExpression mainIndexExp;
+ public static XPathExpression nrtModeExp;
+ public static XPathExpression unlockOnStartupExp;
+
+ private final Configuration ourConf;
+
+ {
+ Configuration conf = Configuration.newConfiguration();
+ conf.setNamePool(this.conf.getNamePool());
+ conf.setDocumentNumberAllocator(this.conf.getDocumentNumberAllocator());
+ ourConf = conf;
+ }
+
+ static volatile Configuration conf;
+ static {
+ refreshConf();
+ }
- {
- conf = Configuration.newConfiguration();
+ public static void refreshConf() {
+ try {
+ if (conf != null) {
+ conf.close();
+ }
+ conf = Configuration.newConfiguration();
- conf.setValidation(false);
- conf.setXIncludeAware(true);
- conf.setExpandAttributeDefaults(true);
+ conf.setValidation(false);
+ conf.setXIncludeAware(true);
+ conf.setExpandAttributeDefaults(true);
- xpathFactory = new XPathFactoryImpl(conf.makePipelineConfiguration().getConfiguration());
+ xpathFactory = new XPathFactoryImpl(conf);
- try {
XPath xpath = xpathFactory.newXPath();
luceneMatchVersionExp = xpath.compile(luceneMatchVersionPath);
@@ -246,10 +261,10 @@ public class SolrResourceLoader implements ResourceLoader, Closeable {
} catch (Exception e) {
log.error("", e);
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
}
}
-
private String name = "";
protected volatile URLClassLoader classLoader;
protected volatile URLClassLoader resourceClassLoader;
@@ -371,7 +386,7 @@ public class SolrResourceLoader implements ResourceLoader, Closeable {
}
public Configuration getConf() {
- return conf;
+ return ourConf;
}
/**
@@ -996,6 +1011,6 @@ public class SolrResourceLoader implements ResourceLoader, Closeable {
}
public XPath getXPath() {
- return xpathFactory.newXPath();
+ return getXpathFactory().newXPath();
}
}
diff --git a/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java b/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
index acd84ee..e2568ca 100644
--- a/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
+++ b/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
@@ -154,6 +154,8 @@ public class XmlConfigFile { // formerly simply "Config"
ParseOptions po = plc.getParseOptions();
if (is.getSystemId() != null) {
po.setEntityResolver(loader.getSysIdResolver());
+ } else {
+ po.setEntityResolver(null);
}
po.setXIncludeAware(true);
po.setCheckEntityReferences(false);
@@ -162,7 +164,10 @@ public class XmlConfigFile { // formerly simply "Config"
po.setPleaseCloseAfterUse(true);
Sender.send(source, builder, po);
docTree = (TinyDocumentImpl) builder.getCurrentRoot();
- } finally {
+ } catch (Exception e) {
+ log.error("Exception handling xml doc", e);
+ throw e;
+ } finally {
builder.close();
builder.reset();
}
diff --git a/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java b/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
index a154061..a0500dc 100644
--- a/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
@@ -175,8 +175,6 @@ public class ReplicationHandler extends RequestHandlerBase implements SolrCoreAw
private final ReentrantLock indexFetchLock = new ReentrantLock(true);
- private final ExecutorService restoreExecutor = ParWork.getMyPerThreadExecutor();
-
private volatile Future<Boolean> restoreFuture;
private volatile String currentRestoreName;
@@ -407,7 +405,12 @@ public class ReplicationHandler extends RequestHandlerBase implements SolrCoreAw
String masterUrl = solrParams == null ? null : solrParams.get(MASTER_URL);
- indexFetchLock.lock();
+ try {
+ indexFetchLock.lockInterruptibly();
+ } catch (InterruptedException e) {
+ ParWork.propagateInterrupt(e);
+ throw new org.apache.solr.common.AlreadyClosedException(e);
+ }
log.info("Got index fetch lock");
try {
diff --git a/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java b/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java
index 42eebb6..fbc2588 100644
--- a/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java
+++ b/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java
@@ -70,7 +70,7 @@ public class PackageAPI {
public static final String ERR_MSG = "Package loading is not enabled , Start your nodes with -Denable.packages=true";
final CoreContainer coreContainer;
- private final ObjectMapper mapper = SolrJacksonAnnotationInspector.createObjectMapper();
+ private final ObjectMapper mapper = SolrJacksonAnnotationInspector.INSTANCE.createObjectMapper();
private final PackageLoader packageLoader;
Packages pkgs;
diff --git a/solr/core/src/java/org/apache/solr/request/LocalSolrQueryRequest.java b/solr/core/src/java/org/apache/solr/request/LocalSolrQueryRequest.java
index db07c36..aca4a6f 100644
--- a/solr/core/src/java/org/apache/solr/request/LocalSolrQueryRequest.java
+++ b/solr/core/src/java/org/apache/solr/request/LocalSolrQueryRequest.java
@@ -74,7 +74,7 @@ public class LocalSolrQueryRequest extends SolrQueryRequestBase {
public LocalSolrQueryRequest(SolrCore core, NamedList args, boolean closeCore) {
super(core, args.toSolrParams());
this.closeCore = closeCore;
- //assert ObjectReleaseTracker.track(this);
+ assert ObjectReleaseTracker.track(this);
}
public LocalSolrQueryRequest(SolrCore core, Map<String,String[]> args) {
diff --git a/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java b/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
index 0799598..af6eb02 100644
--- a/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
+++ b/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
@@ -89,6 +89,7 @@ import org.apache.solr.security.AuditEvent;
import org.apache.solr.security.AuthenticationPlugin;
import org.apache.solr.security.PKIAuthenticationPlugin;
import org.apache.solr.security.PublicKeyHandler;
+import org.apache.solr.util.SolrJacksonAnnotationInspector;
import org.apache.solr.util.StartupLoggingUtils;
import org.apache.solr.util.configuration.SSLConfigurationsFactory;
import org.apache.solr.util.tracing.GlobalTracer;
@@ -109,8 +110,8 @@ public class SolrDispatchFilter extends BaseSolrFilter {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
static {
- log.warn("expected pre init of xml factories {} {} {}",
- FieldTypeXmlAdapter.dbf, XMLResponseParser.inputFactory, XMLResponseParser.saxFactory);
+ log.warn("expected pre init of factories {} {} {} {}",
+ FieldTypeXmlAdapter.dbf, XMLResponseParser.inputFactory, XMLResponseParser.saxFactory, SolrJacksonAnnotationInspector.INSTANCE);
}
private volatile StopRunnable stopRunnable;
@@ -405,7 +406,7 @@ public class SolrDispatchFilter extends BaseSolrFilter {
@Override
public void destroy() {
- if (cores.isZooKeeperAware()) {
+ if (cores != null && cores.isZooKeeperAware()) {
MDCLoggingContext.setNode(cores.getZkController().getNodeName());
}
try {
@@ -541,8 +542,12 @@ public class SolrDispatchFilter extends BaseSolrFilter {
ExecutorUtil.setServerThreadFlag(null);
}
} catch(Exception e) {
- log.error("Solr ran into an unexpected problem and doesn't seem to know more about it.", e);
- response.sendError(500, e.getMessage());
+ log.error("Solr ran into an unexpected problem.", e);
+ int code = 500;
+ if (e instanceof SolrException) {
+ code = ((SolrException) e).code();
+ }
+ response.sendError(code, e.getClass().getName() + " " + e.getMessage());
} finally {
if (span != null) span.finish();
if (scope != null) scope.close();
diff --git a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
index 2b8859a..269a29f 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
@@ -333,9 +333,9 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
try {
doLocalAdd(cmd);
} catch (Exception e) {
- if (distFuture != null) {
+ if (distFuture != null && isLeader) {
distFuture.cancel(true);
- cancelCmds.add(cmd);
+ cancelCmds.add(cloneCmd);
}
if (e instanceof RuntimeException) {
throw (RuntimeException) e;
@@ -960,7 +960,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
} else {
t = e;
}
- if (distFuture != null) {
+ if (distFuture != null && isLeader) {
distFuture.cancel(true);
cancelCmds.add(cmd);
}
diff --git a/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
index d7d6d91..e701e26 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
@@ -1338,7 +1338,7 @@ public class DistributedZkUpdateProcessor extends DistributedUpdateProcessor {
return;
}
- if (zkController.getZkClient().isAlive()) {
+ if (!(isLeader || isSubShardLeader) || zkController.getZkClient().isAlive()) {
return;
}
diff --git a/solr/core/src/java/org/apache/solr/util/SafeXMLParsing.java b/solr/core/src/java/org/apache/solr/util/SafeXMLParsing.java
index 82563a7..f9db583 100644
--- a/solr/core/src/java/org/apache/solr/util/SafeXMLParsing.java
+++ b/solr/core/src/java/org/apache/solr/util/SafeXMLParsing.java
@@ -21,6 +21,7 @@ import org.apache.solr.common.EmptyEntityResolver;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.util.SuppressForbidden;
import org.apache.solr.common.util.XMLErrorLogger;
+import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.rest.schema.FieldTypeXmlAdapter;
import org.slf4j.Logger;
import org.w3c.dom.Document;
diff --git a/solr/core/src/java/org/apache/solr/util/SolrJacksonAnnotationInspector.java b/solr/core/src/java/org/apache/solr/util/SolrJacksonAnnotationInspector.java
index 1b59dce..8d2ef67 100644
--- a/solr/core/src/java/org/apache/solr/util/SolrJacksonAnnotationInspector.java
+++ b/solr/core/src/java/org/apache/solr/util/SolrJacksonAnnotationInspector.java
@@ -87,7 +87,7 @@ public class SolrJacksonAnnotationInspector extends AnnotationIntrospector {
return findNameForSerialization(a);
}
- public static ObjectMapper createObjectMapper(){
+ public ObjectMapper createObjectMapper(){
ObjectMapper mapper = new ObjectMapper();
mapper.setAnnotationIntrospector(INSTANCE);
return mapper;
diff --git a/solr/core/src/test/org/apache/solr/BasicFunctionalityTest.java b/solr/core/src/test/org/apache/solr/BasicFunctionalityTest.java
index f2ecb2a..d9cf23a 100644
--- a/solr/core/src/test/org/apache/solr/BasicFunctionalityTest.java
+++ b/solr/core/src/test/org/apache/solr/BasicFunctionalityTest.java
@@ -234,6 +234,7 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
assertU(h.simpleTag("rollback"));
assertU(commit());
+ core.close();
}
@@ -369,13 +370,15 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
msg1.contains(BAD_VALUE));
assertTrue("client error does not mention document id: " + msg1,
msg1.contains("[doc=100]"));
- SchemaField sf = h.getCore().getLatestSchema().getField(field);
+ SolrCore core = h.getCore();
+ SchemaField sf = core.getLatestSchema().getField(field);
+ core.close();
if (!sf.hasDocValues() && !sf.indexed()) {
continue;
}
SolrException e2 = expectThrows(SolrException.class,
"Didn't encounter an error trying to add a bad date: " + field,
- () -> h.query(req("q",field + ":" + BAD_VALUE))
+ () -> query(req("q",field + ":" + BAD_VALUE))
);
String msg2 = e2.toString();
assertTrue("not a (search) client error on field: " + field +" : "+ msg2,
@@ -385,7 +388,7 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
SolrException e3 = expectThrows(SolrException.class,
"Didn't encounter an error trying to add a bad date: " + field,
- () -> h.query(req("q",field + ":[NOW TO " + BAD_VALUE + "]"))
+ () -> query(req("q",field + ":[NOW TO " + BAD_VALUE + "]"))
);
String msg3 = e3.toString();
assertTrue("not a (search) client error on field: " + field +" : "+ msg3,
@@ -425,14 +428,16 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
msg1.contains(BAD_VALUE));
assertTrue("client error does not mention document id",
msg1.contains("[doc=100]"));
- SchemaField sf = h.getCore().getLatestSchema().getField(field);
+ SolrCore core = h.getCore();
+ SchemaField sf = core.getLatestSchema().getField(field);
+ core.close();
if (!sf.hasDocValues() && !sf.indexed()) {
continue;
}
SolrException e2 = expectThrows(SolrException.class,
"Didn't encounter an error trying to add a non-number: " + field,
- () -> h.query(req("q",field + ":" + BAD_VALUE))
+ () -> query(req("q",field + ":" + BAD_VALUE))
);
String msg2 = e2.toString();
assertTrue("not a (search) client error on field: " + field +" : "+ msg2,
@@ -442,7 +447,7 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
SolrException e3 = expectThrows(SolrException.class,
"Didn't encounter an error trying to add a non-number: " + field,
- () -> h.query(req("q",field + ":[10 TO " + BAD_VALUE + "]"))
+ () -> query(req("q",field + ":[10 TO " + BAD_VALUE + "]"))
);
String msg3 = e3.toString();
assertTrue("not a (search) client error on field: " + field +" : "+ msg3,
@@ -467,7 +472,7 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
handler.init(new NamedList());
SolrQueryResponse rsp = new SolrQueryResponse();
SolrQueryRequest req = req();
- h.getCore().execute(handler,
+ req.getCore().execute(handler,
req,
rsp);
assertNotNull("should have found an exception", rsp.getException());
@@ -500,7 +505,7 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
assertQ(req("text:hello")
,"//*[@numFound='2']"
);
- String resp = h.query(lrf.makeRequest("q", "text:hello", CommonParams.DEBUG_QUERY, "true"));
+ String resp = query(lrf.makeRequest("q", "text:hello", CommonParams.DEBUG_QUERY, "true"));
//System.out.println(resp);
// second doc ranked first
assertTrue( resp.indexOf("\"2\"") < resp.indexOf("\"1\"") );
@@ -519,7 +524,7 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
assertQ(req("text:hello"),
"//*[@numFound='2']"
);
- String resp = h.query(lrf.makeRequest("q", "text:hello", CommonParams.DEBUG_QUERY, "true"));
+ String resp = query(lrf.makeRequest("q", "text:hello", CommonParams.DEBUG_QUERY, "true"));
//System.out.println(resp);
// second doc ranked first
; assertTrue( resp.indexOf("\"2\"") < resp.indexOf("\"1\"") );
@@ -787,6 +792,7 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
SolrQueryRequest req = req("q", "id:7777", "fl", "id,title,test_hlt");
SolrQueryResponse rsp = new SolrQueryResponse();
core.execute(core.getRequestHandler(req.getParams().get(CommonParams.QT)), req, rsp);
+ core.close();
DocList dl = ((ResultContext) rsp.getResponse()).getDocList();
Document d = req.getSearcher().doc(dl.iterator().nextDoc());
@@ -812,6 +818,7 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
SolrQueryRequest req = req("q", "id:7777", "fl", "id,title");
SolrQueryResponse rsp = new SolrQueryResponse();
core.execute(core.getRequestHandler(req.getParams().get(CommonParams.QT)), req, rsp);
+ core.close();
DocList dl = ((ResultContext) rsp.getResponse()).getDocList();
DocIterator di = dl.iterator();
diff --git a/solr/core/src/test/org/apache/solr/ConvertedLegacyTest.java b/solr/core/src/test/org/apache/solr/ConvertedLegacyTest.java
index ed560d9..3462079 100644
--- a/solr/core/src/test/org/apache/solr/ConvertedLegacyTest.java
+++ b/solr/core/src/test/org/apache/solr/ConvertedLegacyTest.java
@@ -133,7 +133,7 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
);
args = new HashMap<>();
req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 2, 5 , args);
+ "/select", 2, 5 , args, true);
assertQ(req
,"//*[@numFound='3'] "
,"*[count(//doc)=1] "
@@ -142,28 +142,28 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
);
args = new HashMap<>();
req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 3, 5 , args);
+ "/select", 3, 5 , args, true);
assertQ(req
,"//*[@numFound='3'] "
,"*[count(//doc)=0]"
);
args = new HashMap<>();
req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 4, 5 , args);
+ "/select", 4, 5 , args, true);
assertQ(req
,"//*[@numFound='3'] "
,"*[count(//doc)=0]"
);
args = new HashMap<>();
req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 25, 5 , args);
+ "/select", 25, 5 , args, true);
assertQ(req
,"//*[@numFound='3'] "
,"*[count(//doc)=0]"
);
args = new HashMap<>();
req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 0, 1 , args);
+ "/select", 0, 1 , args, true);
assertQ(req
,"//*[@numFound='3'] "
,"*[count(//doc)=1] "
@@ -171,7 +171,7 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
);
args = new HashMap<>();
req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 0, 2 , args);
+ "/select", 0, 2 , args, true);
assertQ(req
,"//*[@numFound='3'] "
,"*[count(//doc)=2] "
@@ -179,7 +179,7 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
);
args = new HashMap<>();
req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 1, 1 , args);
+ "/select", 1, 1 , args, true);
assertQ(req
,"//*[@numFound='3'] "
,"*[count(//doc)=1] "
@@ -187,28 +187,28 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
);
args = new HashMap<>();
req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 3, 1 , args);
+ "/select", 3, 1 , args, true);
assertQ(req
,"//*[@numFound='3'] "
,"*[count(//doc)=0]"
);
args = new HashMap<>();
req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 4, 1 , args);
+ "/select", 4, 1 , args, true);
assertQ(req
,"//*[@numFound='3'] "
,"*[count(//doc)=0]"
);
args = new HashMap<>();
req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 1, 0 , args);
+ "/select", 1, 0 , args, true);
assertQ(req
,"//*[@numFound='3'] "
,"*[count(//doc)=0]"
);
args = new HashMap<>();
req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 0, 0 , args);
+ "/select", 0, 0 , args, true);
assertQ(req
,"//*[@numFound='3'] "
,"*[count(//doc)=0]"
@@ -216,7 +216,7 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
args = new HashMap<>();
args.put("sort","val_s1 asc");
req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 0, 0 , args);
+ "/select", 0, 0 , args, true);
assertQ(req
,"//*[@numFound='3'] "
,"*[count(//doc)=0]"
@@ -224,7 +224,7 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
args = new HashMap<>();
args.put("sort","val_s1 desc");
req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 0, 0 , args);
+ "/select", 0, 0 , args, true);
assertQ(req
,"//*[@numFound='3'] "
,"*[count(//doc)=0]"
@@ -1113,7 +1113,7 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
args = new HashMap<>();
args.put("fl","fname_s,arr_f ");
req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 10, args);
+ "/select", 0, 10, args, true);
assertQ(req
,"//str[.='Yonik'] "
,"//float[.='1.4142135']"
@@ -1121,7 +1121,7 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
args = new HashMap<>();
args.put("fl","fname_s,score");
req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 10, args);
+ "/select", 0, 10, args, true);
assertQ(req
,"//str[.='Yonik']"
,"//float[@name='score' and . > 0]"
@@ -1132,7 +1132,7 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
args = new HashMap<>();
args.put("fl","score,* ");
req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 10, args);
+ "/select", 0, 10, args, true);
assertQ(req
,"//str[.='Yonik'] "
,"//float[.='1.4142135'] "
@@ -1142,7 +1142,7 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
args = new HashMap<>();
args.put("fl","*,score ");
req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 10, args);
+ "/select", 0, 10, args, true);
assertQ(req
,"//str[.='Yonik'] "
,"//float[.='1.4142135'] "
@@ -1152,7 +1152,7 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
args = new HashMap<>();
args.put("fl","* ");
req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 10, args);
+ "/select", 0, 10, args, true);
assertQ(req
,"//str[.='Yonik'] "
,"//float[.='1.4142135'] "
@@ -1164,7 +1164,7 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
args = new HashMap<>();
args.put("fl","score ");
req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 10, args);
+ "/select", 0, 10, args, true);
assertQ(req
,"//result[@maxScore>0]"
);
@@ -1172,14 +1172,14 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
args.put("fl","score ");
args.put("sort","id desc");
req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 10, args);
+ "/select", 0, 10, args, true);
assertQ(req
,"//result[@maxScore>0]"
);
args = new HashMap<>();
args.put("fl","score ");
req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 10, args);
+ "/select", 0, 10, args, true);
assertQ(req
,"//@maxScore = //doc/float[@name='score']"
);
@@ -1195,7 +1195,7 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
args.put("fl","*,score");
args.put("sort","id desc");
req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 0 , args);
+ "/select", 0, 0 , args, true);
assertQ(req
,"//result[@maxScore>0]"
);
diff --git a/solr/core/src/test/org/apache/solr/DisMaxRequestHandlerTest.java b/solr/core/src/test/org/apache/solr/DisMaxRequestHandlerTest.java
index dbd4c64..76a9952 100644
--- a/solr/core/src/test/org/apache/solr/DisMaxRequestHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/DisMaxRequestHandlerTest.java
@@ -198,7 +198,7 @@ public class DisMaxRequestHandlerTest extends SolrTestCaseJ4 {
// surrounded by ()'s in the debug output
Pattern p = Pattern.compile("subject:hell\\s*subject:cool");
Pattern p_bool = Pattern.compile("\\(subject:hell\\s*subject:cool\\)");
- String resp = h.query(req("q", "cool stuff"
+ String resp = query(req("q", "cool stuff"
,"qt", "/dismax"
,CommonParams.VERSION, "2.2"
,"bq", "subject:hell OR subject:cool"
@@ -207,7 +207,7 @@ public class DisMaxRequestHandlerTest extends SolrTestCaseJ4 {
assertTrue(p.matcher(resp).find());
assertFalse(p_bool.matcher(resp).find());
- resp = h.query(req("q", "cool stuff"
+ resp = query(req("q", "cool stuff"
,"qt", "/dismax"
,CommonParams.VERSION, "2.2"
,"bq", "subject:hell OR subject:cool"
diff --git a/solr/core/src/test/org/apache/solr/TestJoin.java b/solr/core/src/test/org/apache/solr/TestJoin.java
index c54f162..40dbea0 100644
--- a/solr/core/src/test/org/apache/solr/TestJoin.java
+++ b/solr/core/src/test/org/apache/solr/TestJoin.java
@@ -19,6 +19,7 @@ package org.apache.solr;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.util.Utils;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.request.SolrQueryRequest;
import org.junit.After;
import org.junit.Before;
@@ -239,16 +240,19 @@ public class TestJoin extends SolrTestCaseJ4 {
pivot = createJoinMap(model, fromField, toField);
pivots.put(fromField+"/"+toField, pivot);
}
-
- Collection<Doc> fromDocs = model.values();
- Set<Comparable> docs = join(fromDocs, pivot);
- List<Doc> docList = new ArrayList<>(docs.size());
- for (Comparable id : docs) docList.add(model.get(id));
- Collections.sort(docList, createComparator("_docid_",true,false,false,false));
- List sortedDocs = new ArrayList();
- for (Doc doc : docList) {
- if (sortedDocs.size() >= 10) break;
- sortedDocs.add(doc.toObject(h.getCore().getLatestSchema()));
+ List<Doc> docList;
+ List sortedDocs;
+ try (SolrCore core = h.getCore()) {
+ Collection<Doc> fromDocs = model.values();
+ Set<Comparable> docs = join(fromDocs, pivot);
+ docList = new ArrayList<>(docs.size());
+ for (Comparable id : docs) docList.add(model.get(id));
+ Collections.sort(docList, createComparator("_docid_", true, false, false, false));
+ sortedDocs = new ArrayList();
+ for (Doc doc : docList) {
+ if (sortedDocs.size() >= 10) break;
+ sortedDocs.add(doc.toObject(core.getLatestSchema()));
+ }
}
Map<String,Object> resultSet = new LinkedHashMap<>();
@@ -265,7 +269,7 @@ public class TestJoin extends SolrTestCaseJ4 {
+"}*:*"
);
- String strResponse = h.query(req);
+ String strResponse = query(req);
Object realResponse = Utils.fromJSONString(strResponse);
String err = JSONTestUtil.matchObj("/response", realResponse, resultSet);
@@ -275,7 +279,7 @@ public class TestJoin extends SolrTestCaseJ4 {
);
// re-execute the request... good for putting a breakpoint here for debugging
- String rsp = h.query(req);
+ String rsp = query(req);
fail(err);
}
diff --git a/solr/core/src/test/org/apache/solr/TestRandomDVFaceting.java b/solr/core/src/test/org/apache/solr/TestRandomDVFaceting.java
index c048e31..ebbfef7 100644
--- a/solr/core/src/test/org/apache/solr/TestRandomDVFaceting.java
+++ b/solr/core/src/test/org/apache/solr/TestRandomDVFaceting.java
@@ -26,13 +26,13 @@ import java.util.Random;
import org.apache.lucene.util.TestUtil;
import org.apache.lucene.util.LuceneTestCase.Slow;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.schema.TrieIntField;
import org.apache.solr.schema.IntPointField;
import org.junit.After;
import org.junit.Before;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -57,22 +57,15 @@ public class TestRandomDVFaceting extends SolrTestCaseJ4 {
initCore("solrconfig-basic.xml","schema-docValuesFaceting.xml");
- assertEquals("DocValues: Schema assumptions are broken",
- false, h.getCore().getLatestSchema().getField("foo_i").hasDocValues());
- assertEquals("DocValues: Schema assumptions are broken",
- true, h.getCore().getLatestSchema().getField("foo_i_dv").hasDocValues());
- assertEquals("DocValues: Schema assumptions are broken",
- true, h.getCore().getLatestSchema().getField("foo_i_p").hasDocValues());
-
- assertEquals("Type: Schema assumptions are broken",
- TrieIntField.class,
- h.getCore().getLatestSchema().getField("foo_i").getType().getClass());
- assertEquals("Type: Schema assumptions are broken",
- TrieIntField.class,
- h.getCore().getLatestSchema().getField("foo_i_dv").getType().getClass());
- assertEquals("Type: Schema assumptions are broken",
- IntPointField.class,
- h.getCore().getLatestSchema().getField("foo_i_p").getType().getClass());
+ try (SolrCore core = h.getCore()) {
+ assertEquals("DocValues: Schema assumptions are broken", false, core.getLatestSchema().getField("foo_i").hasDocValues());
+ assertEquals("DocValues: Schema assumptions are broken", true, core.getLatestSchema().getField("foo_i_dv").hasDocValues());
+ assertEquals("DocValues: Schema assumptions are broken", true, core.getLatestSchema().getField("foo_i_p").hasDocValues());
+
+ assertEquals("Type: Schema assumptions are broken", TrieIntField.class, core.getLatestSchema().getField("foo_i").getType().getClass());
+ assertEquals("Type: Schema assumptions are broken", TrieIntField.class, core.getLatestSchema().getField("foo_i_dv").getType().getClass());
+ assertEquals("Type: Schema assumptions are broken", IntPointField.class, core.getLatestSchema().getField("foo_i_p").getType().getClass());
+ }
}
@@ -275,7 +268,7 @@ public class TestRandomDVFaceting extends SolrTestCaseJ4 {
// if (random().nextBoolean()) params.set("facet.mincount", "1"); // uncomment to test that validation fails
- String strResponse = h.query(req(params));
+ String strResponse = query(req(params));
// Object realResponse = ObjectBuilder.fromJSON(strResponse);
// System.out.println(strResponse);
@@ -283,16 +276,16 @@ public class TestRandomDVFaceting extends SolrTestCaseJ4 {
}
// If there is a PointField option for this test, also test it
// Don't check points if facet.mincount=0
- if (h.getCore().getLatestSchema().getFieldOrNull(facet_field + "_p") != null
- && params.get("facet.mincount") != null
- && params.getInt("facet.mincount").intValue() > 0) {
- params.set("facet.field", "{!key="+facet_field+"}"+facet_field+"_p");
- String strResponse = h.query(req(params));
- responses.add(strResponse);
+ try (SolrCore core = h.getCore()) {
+ if (core.getLatestSchema().getFieldOrNull(facet_field + "_p") != null && params.get("facet.mincount") != null && params.getInt("facet.mincount").intValue() > 0) {
+ params.set("facet.field", "{!key=" + facet_field + "}" + facet_field + "_p");
+ String strResponse = query(req(params));
+ responses.add(strResponse);
+ }
}
/**
- String strResponse = h.query(req(params));
+ String strResponse = query(req(params));
Object realResponse = ObjectBuilder.fromJSON(strResponse);
**/
diff --git a/solr/core/src/test/org/apache/solr/TestTrie.java b/solr/core/src/test/org/apache/solr/TestTrie.java
index 0f21ff8..5d71669 100644
--- a/solr/core/src/test/org/apache/solr/TestTrie.java
+++ b/solr/core/src/test/org/apache/solr/TestTrie.java
@@ -26,7 +26,6 @@ import org.apache.solr.schema.TrieField;
import org.apache.solr.util.DateMathParser;
import org.junit.After;
import org.junit.BeforeClass;
-import org.junit.Ignore;
import org.junit.Test;
/**
@@ -38,7 +37,6 @@ import org.junit.Test;
* @deprecated Trie fields are deprecated as of Solr 7.0
*/
@Deprecated
-@Ignore // MRM-TEST TODO: finish closing things right
public class TestTrie extends SolrTestCaseJ4 {
@BeforeClass
public static void beforeClass() throws Exception {
@@ -260,12 +258,19 @@ public class TestTrie extends SolrTestCaseJ4 {
"facet.field", "tfloat",
"facet.field", "tdouble");
testFacetField(req, "tint", "0", "2");
+ h.getCore();
testFacetField(req, "tint", "5", "1");
+ h.getCore();
testFacetField(req, "tlong", String.valueOf(Integer.MAX_VALUE), "2");
+ h.getCore();
testFacetField(req, "tlong", String.valueOf(Integer.MAX_VALUE+5L), "1");
+ h.getCore();
testFacetField(req, "tfloat", String.valueOf(31.11f), "2");
+ h.getCore();
testFacetField(req, "tfloat", String.valueOf(5*5*31.11f), "1");
+ h.getCore();
testFacetField(req, "tdouble", String.valueOf(2.33d), "2");
+ h.getCore();
testFacetField(req, "tdouble", String.valueOf(5*2.33d), "1");
}
diff --git a/solr/core/src/test/org/apache/solr/analysis/TestReversedWildcardFilterFactory.java b/solr/core/src/test/org/apache/solr/analysis/TestReversedWildcardFilterFactory.java
index 447b830..0486abe 100644
--- a/solr/core/src/test/org/apache/solr/analysis/TestReversedWildcardFilterFactory.java
+++ b/solr/core/src/test/org/apache/solr/analysis/TestReversedWildcardFilterFactory.java
@@ -237,5 +237,6 @@ public class TestReversedWildcardFilterFactory extends SolrTestCaseJ4 {
parser.getReversedWildcardFilterFactory(typeSpy);
// but it should reach only once
verify(typeSpy, times(1)).getIndexAnalyzer();
+ req.close();
}
}
diff --git a/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderTest.java b/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderTest.java
index 7079840..0dc7e8f 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderTest.java
@@ -44,7 +44,7 @@ import java.util.Set;
import java.util.concurrent.TimeUnit;
@Slow
-@LuceneTestCase.Nightly // TODO convert to bridge test class
+@LuceneTestCase.Nightly // MRM TODO: finish compare against control, look at setErrorHook
public class ChaosMonkeySafeLeaderTest extends SolrCloudBridgeTestCase {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
diff --git a/solr/core/src/test/org/apache/solr/cloud/overseer/ZkCollectionPropsCachingTest.java b/solr/core/src/test/org/apache/solr/cloud/overseer/ZkCollectionPropsCachingTest.java
index 6799001..7964c7b 100644
--- a/solr/core/src/test/org/apache/solr/cloud/overseer/ZkCollectionPropsCachingTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/overseer/ZkCollectionPropsCachingTest.java
@@ -29,7 +29,6 @@ import org.apache.solr.common.cloud.CollectionProperties;
import org.apache.solr.common.cloud.ZkStateReader;
import org.junit.Before;
import org.junit.BeforeClass;
-import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -73,12 +72,12 @@ public class ZkCollectionPropsCachingTest extends SolrCloudTestCase {
collectionProps.setCollectionProperty(collectionName, "property1", "value1");
checkValue("property1", "value1"); //Should be no cache, so the change should take effect immediately
- zkStateReader.getCollectionProperties(collectionName,900);
+ zkStateReader.getCollectionProperties(collectionName,100);
zkStateReader.getZkClient().close();
assertFalse(zkStateReader.isClosed());
checkValue("property1", "value1"); //Should be cached, so the change should not try to hit zk
- Thread.sleep(1000); // test the timeout feature
+ Thread.sleep(300); // test the timeout feature
try {
checkValue("property1", "value1"); //Should not be cached anymore
fail("cache should have expired, prev line should throw an exception trying to access zookeeper after closed");
diff --git a/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java b/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java
index cdaa9bd..9c18cbc 100644
--- a/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java
+++ b/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java
@@ -102,17 +102,19 @@ public class TestCoreContainer extends SolrTestCaseJ4 {
@Test
public void testReloadSequential() throws Exception {
- SolrResourceLoader loader = h.getCore().getResourceLoader();
- final CoreContainer cc = init(loader, CONFIGSETS_SOLR_XML);
- try {
- cc.create("core1", ImmutableMap.of("configSet", "minimal"));
- cc.reload("core1");
- cc.reload("core1");
- cc.reload("core1");
- cc.reload("core1");
+ try (SolrCore core = h.getCore()) {
+ SolrResourceLoader loader = core.getResourceLoader();
+ final CoreContainer cc = init(loader, CONFIGSETS_SOLR_XML);
+ try {
+ cc.create("core1", ImmutableMap.of("configSet", "minimal"));
+ cc.reload("core1");
+ cc.reload("core1");
+ cc.reload("core1");
+ cc.reload("core1");
- } finally {
- cc.shutdown();
+ } finally {
+ cc.shutdown();
+ }
}
}
diff --git a/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java b/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
index 41eef1e..5b87e69 100644
--- a/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
@@ -174,13 +174,15 @@ public class JsonLoaderTest extends SolrTestCaseJ4 {
JsonLoader loader = new JsonLoader();
String invalidJsonString = "}{";
- SolrException ex = expectThrows(SolrException.class, () -> {
- loader.load(req(), rsp, new ContentStreamBase.StringStream(invalidJsonString), p);
- });
- assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
- assertTrue(ex.getMessage().contains("Cannot parse"));
- assertTrue(ex.getMessage().contains("JSON"));
- p.close();
+ try (SolrQueryRequest req = req()) {
+ SolrException ex = expectThrows(SolrException.class, () -> {
+ loader.load(req, rsp, new ContentStreamBase.StringStream(invalidJsonString), p);
+ });
+ assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
+ assertTrue(ex.getMessage().contains("Cannot parse"));
+ assertTrue(ex.getMessage().contains("JSON"));
+ p.close();
+ }
}
public void testSimpleFormatInAdd() throws Exception
@@ -260,6 +262,7 @@ public class JsonLoaderTest extends SolrTestCaseJ4 {
loader.load(req, rsp, new ContentStreamBase.StringStream(doc), p);
assertEquals( 2, p.addCommands.size() );
p.close();
+ req.close();
}
public void testJsonDocFormat() throws Exception{
@@ -295,6 +298,7 @@ public class JsonLoaderTest extends SolrTestCaseJ4 {
p = new BufferingRequestProcessor(null);
loader = new JsonLoader();
loader.load(req, rsp, new ContentStreamBase.StringStream(doc), p);
+ req.close();
assertEquals( 2, p.addCommands.size() );
@@ -324,6 +328,7 @@ public class JsonLoaderTest extends SolrTestCaseJ4 {
loader = new JsonLoader();
loader.load(req, rsp, new ContentStreamBase.StringStream(doc), p);
assertEquals( 2, p.addCommands.size() );
+ req.close();
content = (String) p.addCommands.get(0).solrDoc.getFieldValue("_src_");
assertNotNull(content);
@@ -343,6 +348,7 @@ public class JsonLoaderTest extends SolrTestCaseJ4 {
req.getContext().put("path","/update/json/docs");
rsp = new SolrQueryResponse();
p.close();
+ req.close();
p = new BufferingRequestProcessor(null);
loader = new JsonLoader();
loader.load(req, rsp, new ContentStreamBase.StringStream(json), p);
@@ -453,6 +459,7 @@ public class JsonLoaderTest extends SolrTestCaseJ4 {
}
}
p.close();
+ req.close();
}
private static void assertOnlyValue(String expected, SolrInputDocument doc, String field) {
diff --git a/solr/core/src/test/org/apache/solr/handler/TestCSVLoader.java b/solr/core/src/test/org/apache/solr/handler/TestCSVLoader.java
index 292ffc9..5dabf69 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestCSVLoader.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestCSVLoader.java
@@ -93,7 +93,7 @@ public class TestCSVLoader extends SolrTestCaseJ4 {
f.setContentType("text/csv");
cs.add(f);
req.setContentStreams(cs);
- h.query("/update",req);
+ query("/update",req);
}
@Test
diff --git a/solr/core/src/test/org/apache/solr/handler/TestCoreBackup.java b/solr/core/src/test/org/apache/solr/handler/TestCoreBackup.java
index bf7bf00..fc17bdf 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestCoreBackup.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestCoreBackup.java
@@ -29,7 +29,9 @@ import org.apache.lucene.util.TestUtil;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.params.CoreAdminParams;
import org.apache.solr.core.CoreContainer;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.handler.admin.CoreAdminHandler;
+import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.junit.After;
import org.junit.Before;
@@ -66,10 +68,9 @@ public class TestCoreBackup extends SolrTestCaseJ4 {
final CoreContainer cores = h.getCoreContainer();
try (final CoreAdminHandler admin = new CoreAdminHandler(cores)) {
SolrQueryResponse resp = new SolrQueryResponse();
- admin.handleRequestBody
- (req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.BACKUPCORE.toString(),
- "core", DEFAULT_TEST_COLLECTION_NAME, "name", snapshotName, "location", location)
- , resp);
+ SolrQueryRequest req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.BACKUPCORE.toString(), "core", DEFAULT_TEST_COLLECTION_NAME, "name", snapshotName, "location", location);
+ admin.handleRequestBody(req, resp);
+ req.close();
assertNull("Backup should have succeeded", resp.getException());
simpleBackupCheck(new File(location, "snapshot." + snapshotName), 2);
}
@@ -100,12 +101,12 @@ public class TestCoreBackup extends SolrTestCaseJ4 {
{ // first a backup before we've ever done *anything*...
SolrQueryResponse resp = new SolrQueryResponse();
- admin.handleRequestBody
- (req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.BACKUPCORE.toString(),
- "core", DEFAULT_TEST_COLLECTION_NAME,
- "name", "empty_backup1",
- "location", backupDir.getAbsolutePath()),
- resp);
+ SolrQueryRequest req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.BACKUPCORE.toString(),
+ "core", DEFAULT_TEST_COLLECTION_NAME,
+ "name", "empty_backup1",
+ "location", backupDir.getAbsolutePath());
+ admin.handleRequestBody(req, resp);
+ req.close();
assertNull("Backup should have succeeded", resp.getException());
simpleBackupCheck(new File(backupDir, "snapshot.empty_backup1"),
0, initialEmptyIndexSegmentFileName);
@@ -113,11 +114,11 @@ public class TestCoreBackup extends SolrTestCaseJ4 {
{ // Empty (named) snapshot..
SolrQueryResponse resp = new SolrQueryResponse();
- admin.handleRequestBody
- (req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.CREATESNAPSHOT.toString(),
- "core", DEFAULT_TEST_COLLECTION_NAME,
- "commitName", "empty_snapshotA"),
- resp);
+ SolrQueryRequest req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.CREATESNAPSHOT.toString(),
+ "core", DEFAULT_TEST_COLLECTION_NAME,
+ "commitName", "empty_snapshotA");
+ admin.handleRequestBody(req, resp);
+ req.close();
assertNull("Snapshot A should have succeeded", resp.getException());
}
@@ -125,12 +126,12 @@ public class TestCoreBackup extends SolrTestCaseJ4 {
{ // second backup w/uncommited docs
SolrQueryResponse resp = new SolrQueryResponse();
- admin.handleRequestBody
- (req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.BACKUPCORE.toString(),
- "core", DEFAULT_TEST_COLLECTION_NAME,
- "name", "empty_backup2",
- "location", backupDir.getAbsolutePath()),
- resp);
+ SolrQueryRequest req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.BACKUPCORE.toString(),
+ "core", DEFAULT_TEST_COLLECTION_NAME,
+ "name", "empty_backup2",
+ "location", backupDir.getAbsolutePath());
+ admin.handleRequestBody(req, resp);
+ req.close();
assertNull("Backup should have succeeded", resp.getException());
simpleBackupCheck(new File(backupDir, "snapshot.empty_backup2"),
0, initialEmptyIndexSegmentFileName);
@@ -138,11 +139,11 @@ public class TestCoreBackup extends SolrTestCaseJ4 {
{ // Second empty (named) snapshot..
SolrQueryResponse resp = new SolrQueryResponse();
- admin.handleRequestBody
- (req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.CREATESNAPSHOT.toString(),
- "core", DEFAULT_TEST_COLLECTION_NAME,
- "commitName", "empty_snapshotB"),
- resp);
+ SolrQueryRequest req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.CREATESNAPSHOT.toString(),
+ "core", DEFAULT_TEST_COLLECTION_NAME,
+ "commitName", "empty_snapshotB");
+ admin.handleRequestBody(req, resp);
+ req.close();
assertNull("Snapshot A should have succeeded", resp.getException());
}
@@ -158,14 +159,12 @@ public class TestCoreBackup extends SolrTestCaseJ4 {
for (String snapName : Arrays.asList("empty_snapshotA", "empty_snapshotB")) {
String name = "empty_backup_from_" + snapName;
SolrQueryResponse resp = new SolrQueryResponse();
-
+ SolrQueryRequest req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.BACKUPCORE.toString(), "core", DEFAULT_TEST_COLLECTION_NAME, "name", name,
+ "commitName", snapName, "location", backupDir.getAbsolutePath());
admin.handleRequestBody
- (req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.BACKUPCORE.toString(),
- "core", DEFAULT_TEST_COLLECTION_NAME,
- "name", name,
- "commitName", snapName,
- "location", backupDir.getAbsolutePath()),
+ (req,
resp);
+ req.close();
assertNull("Backup "+name+" should have succeeded", resp.getException());
simpleBackupCheck(new File(backupDir, "snapshot." + name),
0, initialEmptyIndexSegmentFileName);
@@ -202,12 +201,12 @@ public class TestCoreBackup extends SolrTestCaseJ4 {
{ // take an initial 'backup1a' containing our 1 document
final SolrQueryResponse resp = new SolrQueryResponse();
- admin.handleRequestBody
- (req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.BACKUPCORE.toString(),
- "core", DEFAULT_TEST_COLLECTION_NAME,
- "name", "backup1a",
- "location", backupDir.getAbsolutePath()),
- resp);
+ SolrQueryRequest req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.BACKUPCORE.toString(),
+ "core", DEFAULT_TEST_COLLECTION_NAME,
+ "name", "backup1a",
+ "location", backupDir.getAbsolutePath());
+ admin.handleRequestBody(req, resp);
+ req.close();
assertNull("Backup should have succeeded", resp.getException());
simpleBackupCheck(new File(backupDir, "snapshot.backup1a"),
1, oneDocSegmentFile);
@@ -215,11 +214,9 @@ public class TestCoreBackup extends SolrTestCaseJ4 {
{ // and an initial "snapshot1a' that should eventually match
SolrQueryResponse resp = new SolrQueryResponse();
- admin.handleRequestBody
- (req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.CREATESNAPSHOT.toString(),
- "core", DEFAULT_TEST_COLLECTION_NAME,
- "commitName", "snapshot1a"),
- resp);
+ SolrQueryRequest req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.CREATESNAPSHOT.toString(), "core", DEFAULT_TEST_COLLECTION_NAME, "commitName", "snapshot1a");
+ admin.handleRequestBody(req, resp);
+ req.close();
assertNull("Snapshot 1A should have succeeded", resp.getException());
}
@@ -235,12 +232,12 @@ public class TestCoreBackup extends SolrTestCaseJ4 {
{ // we now have an index with two searchable docs, but a new 'backup1b' should still
// be identical to the previous backup...
final SolrQueryResponse resp = new SolrQueryResponse();
- admin.handleRequestBody
- (req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.BACKUPCORE.toString(),
- "core", DEFAULT_TEST_COLLECTION_NAME,
- "name", "backup1b",
- "location", backupDir.getAbsolutePath()),
- resp);
+ SolrQueryRequest req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.BACKUPCORE.toString(),
+ "core", DEFAULT_TEST_COLLECTION_NAME,
+ "name", "backup1b",
+ "location", backupDir.getAbsolutePath());
+ admin.handleRequestBody(req, resp);
+ req.close();
assertNull("Backup should have succeeded", resp.getException());
simpleBackupCheck(new File(backupDir, "snapshot.backup1b"),
1, oneDocSegmentFile);
@@ -248,11 +245,11 @@ public class TestCoreBackup extends SolrTestCaseJ4 {
{ // and a second "snapshot1b' should also still be identical
SolrQueryResponse resp = new SolrQueryResponse();
- admin.handleRequestBody
- (req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.CREATESNAPSHOT.toString(),
- "core", DEFAULT_TEST_COLLECTION_NAME,
- "commitName", "snapshot1b"),
- resp);
+ SolrQueryRequest req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.CREATESNAPSHOT.toString(),
+ "core", DEFAULT_TEST_COLLECTION_NAME,
+ "commitName", "snapshot1b");
+ admin.handleRequestBody(req, resp);
+ req.close();
assertNull("Snapshot 1B should have succeeded", resp.getException());
}
@@ -266,12 +263,12 @@ public class TestCoreBackup extends SolrTestCaseJ4 {
{ // But we should be able to confirm both docs appear in a new backup (not based on a previous snapshot)
final SolrQueryResponse resp = new SolrQueryResponse();
- admin.handleRequestBody
- (req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.BACKUPCORE.toString(),
- "core", DEFAULT_TEST_COLLECTION_NAME,
- "name", "backup2",
- "location", backupDir.getAbsolutePath()),
- resp);
+ SolrQueryRequest req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.BACKUPCORE.toString(),
+ "core", DEFAULT_TEST_COLLECTION_NAME,
+ "name", "backup2",
+ "location", backupDir.getAbsolutePath());
+ admin.handleRequestBody(req, resp);
+ req.close();
assertNull("Backup should have succeeded", resp.getException());
simpleBackupCheck(new File(backupDir, "snapshot.backup2"), 2);
}
@@ -282,13 +279,10 @@ public class TestCoreBackup extends SolrTestCaseJ4 {
for (String snapName : Arrays.asList("snapshot1a", "snapshot1b")) {
String name = "backup_from_" + snapName;
SolrQueryResponse resp = new SolrQueryResponse();
- admin.handleRequestBody
- (req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.BACKUPCORE.toString(),
- "core", DEFAULT_TEST_COLLECTION_NAME,
- "name", name,
- "commitName", snapName,
- "location", backupDir.getAbsolutePath()),
- resp);
+ SolrQueryRequest req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.BACKUPCORE.toString(), "core", DEFAULT_TEST_COLLECTION_NAME, "name", name, "commitName", snapName, "location",
+ backupDir.getAbsolutePath());
+ admin.handleRequestBody(req, resp);
+ req.close();
assertNull("Backup "+name+" should have succeeded", resp.getException());
simpleBackupCheck(new File(backupDir, "snapshot." + name),
1, oneDocSegmentFile);
@@ -331,20 +325,20 @@ public class TestCoreBackup extends SolrTestCaseJ4 {
// verify it's "searchable" ...
assertQ(req("q", "id:42"), "//result[@numFound='1']");
- // sanity check what the searcher/reader of this empty index report about current commit
- IndexCommit oneDoc = h.getCore().withSearcher(s -> {
+ try (SolrCore core = h.getCore()) {
+ // sanity check what the searcher/reader of this empty index report about current commit
+ IndexCommit oneDoc = core.withSearcher(s -> {
// sanity check this really is the searcher/reader that has the new doc...
assertEquals(1L, (long) s.getIndexReader().numDocs());
-
+
final IndexCommit commit = s.getIndexReader().getIndexCommit();
// WTF: how/why does this reader still have the same commit generation as before ? ? ? ? ?
- assertEquals("WTF: This Reader (claims) the same generation as our previous pre-softCommif (empty) reader",
- EXPECTED_GEN_OF_EMPTY_INDEX, (long) commit.getGeneration());
+ assertEquals("WTF: This Reader (claims) the same generation as our previous pre-softCommif (empty) reader", EXPECTED_GEN_OF_EMPTY_INDEX, (long) commit.getGeneration());
return commit;
});
- assertEquals("WTF: Our two IndexCommits, which we know have different docs, claim to be equals",
- empty, oneDoc);
+ assertEquals("WTF: Our two IndexCommits, which we know have different docs, claim to be equals", empty, oneDoc);
+ }
}
diff --git a/solr/core/src/test/org/apache/solr/handler/XmlUpdateRequestHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/XmlUpdateRequestHandlerTest.java
index 45f93a3..231d961 100644
--- a/solr/core/src/test/org/apache/solr/handler/XmlUpdateRequestHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/XmlUpdateRequestHandlerTest.java
@@ -190,8 +190,9 @@ public class XmlUpdateRequestHandlerTest extends SolrTestCaseJ4 {
p.expectDelete("500", null, -1, 42, "shard1");
XMLLoader loader = new XMLLoader().init(null);
- loader.load(req(), new SolrQueryResponse(), new ContentStreamBase.StringStream(xml), p);
-
+ SolrQueryRequest req = req();
+ loader.load(req, new SolrQueryResponse(), new ContentStreamBase.StringStream(xml), p);
+ req.close();
p.assertNoCommandsPending();
p.close();
}
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminCreateDiscoverTest.java b/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminCreateDiscoverTest.java
index e38e3ca..9926666 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminCreateDiscoverTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminCreateDiscoverTest.java
@@ -30,6 +30,7 @@ import org.apache.solr.common.params.CoreAdminParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.CorePropertiesLocator;
import org.apache.solr.core.SolrResourceLoader;
+import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.junit.AfterClass;
import org.junit.BeforeClass;
@@ -95,16 +96,13 @@ public class CoreAdminCreateDiscoverTest extends SolrTestCaseJ4 {
System.setProperty("DATA_TEST", "data_diff");
SolrQueryResponse resp = new SolrQueryResponse();
+ SolrQueryRequest req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.CREATE.toString(), CoreAdminParams.NAME, coreSysProps, CoreAdminParams.INSTANCE_DIR, "${INSTDIR_TEST}",
+ CoreAdminParams.CONFIG, "${CONFIG_TEST}", CoreAdminParams.SCHEMA, "${SCHEMA_TEST}", CoreAdminParams.DATA_DIR, "${DATA_TEST}");
admin.handleRequestBody
- (req(CoreAdminParams.ACTION,
- CoreAdminParams.CoreAdminAction.CREATE.toString(),
- CoreAdminParams.NAME, coreSysProps,
- CoreAdminParams.INSTANCE_DIR, "${INSTDIR_TEST}",
- CoreAdminParams.CONFIG, "${CONFIG_TEST}",
- CoreAdminParams.SCHEMA, "${SCHEMA_TEST}",
- CoreAdminParams.DATA_DIR, "${DATA_TEST}"),
+ (req,
resp);
assertNull("Exception on create", resp.getException());
+ req.close();
// verify props are in persisted file
@@ -156,16 +154,13 @@ public class CoreAdminCreateDiscoverTest extends SolrTestCaseJ4 {
// Create one core
SolrQueryResponse resp = new SolrQueryResponse();
+ SolrQueryRequest req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.CREATE.toString(), CoreAdminParams.NAME, coreDuplicate, CoreAdminParams.INSTANCE_DIR, workDir.getAbsolutePath(),
+ CoreAdminParams.CONFIG, "solrconfig_ren.xml", CoreAdminParams.SCHEMA, "schema_ren.xml", CoreAdminParams.DATA_DIR, data.getAbsolutePath());
admin.handleRequestBody
- (req(CoreAdminParams.ACTION,
- CoreAdminParams.CoreAdminAction.CREATE.toString(),
- CoreAdminParams.NAME, coreDuplicate,
- CoreAdminParams.INSTANCE_DIR, workDir.getAbsolutePath(),
- CoreAdminParams.CONFIG, "solrconfig_ren.xml",
- CoreAdminParams.SCHEMA, "schema_ren.xml",
- CoreAdminParams.DATA_DIR, data.getAbsolutePath()),
+ (req,
resp);
assertNull("Exception on create", resp.getException());
+ req.close();
// Try to create another core with a different name, but the same instance dir
// nocommit disabled at the moment
@@ -194,23 +189,22 @@ public class CoreAdminCreateDiscoverTest extends SolrTestCaseJ4 {
// Create one core
SolrQueryResponse resp = new SolrQueryResponse();
+ SolrQueryRequest req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.CREATE.toString(), CoreAdminParams.NAME, "testInstanceDirAsPropertyParam",
+ "property.instanceDir", workDir.getAbsolutePath(), CoreAdminParams.CONFIG, "solrconfig_ren.xml", CoreAdminParams.SCHEMA, "schema_ren.xml", CoreAdminParams.DATA_DIR, data.getAbsolutePath());
admin.handleRequestBody
- (req(CoreAdminParams.ACTION,
- CoreAdminParams.CoreAdminAction.CREATE.toString(),
- CoreAdminParams.NAME, "testInstanceDirAsPropertyParam",
- "property.instanceDir", workDir.getAbsolutePath(),
- CoreAdminParams.CONFIG, "solrconfig_ren.xml",
- CoreAdminParams.SCHEMA, "schema_ren.xml",
- CoreAdminParams.DATA_DIR, data.getAbsolutePath()),
+ (req,
resp);
assertNull("Exception on create", resp.getException());
+ req.close();
resp = new SolrQueryResponse();
+ req = req(CoreAdminParams.ACTION,
+ CoreAdminParams.CoreAdminAction.STATUS.toString(),
+ CoreAdminParams.CORE, "testInstanceDirAsPropertyParam");
admin.handleRequestBody
- (req(CoreAdminParams.ACTION,
- CoreAdminParams.CoreAdminAction.STATUS.toString(),
- CoreAdminParams.CORE, "testInstanceDirAsPropertyParam"),
+ (req,
resp);
+ req.close();
NamedList status = (NamedList) resp.getValues().get("status");
assertNotNull(status);
NamedList coreProps = (NamedList) status.get("testInstanceDirAsPropertyParam");
@@ -231,16 +225,13 @@ public class CoreAdminCreateDiscoverTest extends SolrTestCaseJ4 {
File data = new File(workDir, "data");
SolrQueryResponse resp = new SolrQueryResponse();
+ SolrQueryRequest req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.CREATE.toString(), CoreAdminParams.NAME, coreNormal, CoreAdminParams.INSTANCE_DIR, workDir.getAbsolutePath(),
+ CoreAdminParams.CONFIG, "solrconfig_ren.xml", CoreAdminParams.SCHEMA, "schema_ren.xml", CoreAdminParams.DATA_DIR, data.getAbsolutePath());
admin.handleRequestBody
- (req(CoreAdminParams.ACTION,
- CoreAdminParams.CoreAdminAction.CREATE.toString(),
- CoreAdminParams.NAME, coreNormal,
- CoreAdminParams.INSTANCE_DIR, workDir.getAbsolutePath(),
- CoreAdminParams.CONFIG, "solrconfig_ren.xml",
- CoreAdminParams.SCHEMA, "schema_ren.xml",
- CoreAdminParams.DATA_DIR, data.getAbsolutePath()),
+ (req,
resp);
assertNull("Exception on create", resp.getException());
+ req.close();
// verify props are in persisted file
Properties props = new Properties();
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminRequestStatusTest.java b/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminRequestStatusTest.java
index 4152d37..1c600b2 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminRequestStatusTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminRequestStatusTest.java
@@ -26,6 +26,7 @@ import org.apache.solr.common.params.CommonAdminParams;
import org.apache.solr.common.params.CoreAdminParams;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.SolrCore;
+import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -58,41 +59,39 @@ public class CoreAdminRequestStatusTest extends SolrTestCaseJ4{
// create a new core (using CoreAdminHandler) w/ properties
SolrQueryResponse resp = new SolrQueryResponse();
+ SolrQueryRequest req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.CREATE.toString(), CoreAdminParams.INSTANCE_DIR, instPropFile.getAbsolutePath(), CoreAdminParams.NAME,
+ "dummycore", CommonAdminParams.ASYNC, "42");
admin.handleRequestBody
- (req(CoreAdminParams.ACTION,
- CoreAdminParams.CoreAdminAction.CREATE.toString(),
- CoreAdminParams.INSTANCE_DIR, instPropFile.getAbsolutePath(),
- CoreAdminParams.NAME, "dummycore",
- CommonAdminParams.ASYNC, "42"),
+ (req,
resp);
+ req.close();
assertNull("Exception on create", resp.getException());
int maxRetries = 10;
while(maxRetries-- > 0) {
resp = new SolrQueryResponse();
+ req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.REQUESTSTATUS.toString(), CoreAdminParams.REQUESTID, "42");
admin.handleRequestBody
- (req(CoreAdminParams.ACTION,
- CoreAdminParams.CoreAdminAction.REQUESTSTATUS.toString(),
- CoreAdminParams.REQUESTID, "42"),
+ (req,
resp
);
+ req.close();
if(resp.getValues().get("STATUS") != null && resp.getValues().get("STATUS").equals("completed"))
break;
- Thread.sleep(1000);
+ Thread.sleep(250);
}
assertEquals("The status of request was expected to be completed",
"completed", resp.getValues().get("STATUS"));
resp = new SolrQueryResponse();
+ req = req(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.REQUESTSTATUS.toString(), CoreAdminParams.REQUESTID, "9999999");
admin.handleRequestBody
- (req(CoreAdminParams.ACTION,
- CoreAdminParams.CoreAdminAction.REQUESTSTATUS.toString(),
- CoreAdminParams.REQUESTID, "9999999"),
+ (req,
resp
);
-
+ req.close();
assertEquals("Was expecting it to be invalid but found a task with the id.",
"notfound", resp.getValues().get("STATUS"));
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/CoreMergeIndexesAdminHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/CoreMergeIndexesAdminHandlerTest.java
index 339da22..8f65c2f 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/CoreMergeIndexesAdminHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/CoreMergeIndexesAdminHandlerTest.java
@@ -28,6 +28,7 @@ import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.DirectoryFactory;
import org.apache.solr.core.MockFSDirectoryFactory;
import org.apache.solr.core.SolrCore;
+import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -71,15 +72,15 @@ public class CoreMergeIndexesAdminHandlerTest extends SolrTestCaseJ4 {
DirectoryFactory df = core.getDirectoryFactory();
FailingDirectoryFactory dirFactory = (FailingDirectoryFactory) df;
- try {
+ try (SolrQueryRequest req = req(CoreAdminParams.ACTION,
+ CoreAdminParams.CoreAdminAction.MERGEINDEXES.toString(),
+ CoreAdminParams.CORE, "collection1",
+ CoreAdminParams.INDEX_DIR, workDir.getAbsolutePath())) {
dirFactory.fail = true;
ignoreException(WRAPPED_FAILING_MSG);
SolrException e = expectThrows(SolrException.class, () -> {
admin.handleRequestBody
- (req(CoreAdminParams.ACTION,
- CoreAdminParams.CoreAdminAction.MERGEINDEXES.toString(),
- CoreAdminParams.CORE, "collection1",
- CoreAdminParams.INDEX_DIR, workDir.getAbsolutePath()),
+ (req,
new SolrQueryResponse());
});
assertEquals(FailingDirectoryFactory.FailingDirectoryFactoryException.class, e.getCause().getClass());
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/InfoHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/InfoHandlerTest.java
index df86bee..060af71 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/InfoHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/InfoHandlerTest.java
@@ -154,10 +154,11 @@ public class InfoHandlerTest extends SolrTestCaseJ4 {
private SolrQueryResponse handleRequest(InfoHandler infoHandler, String path)
throws Exception {
SolrQueryResponse rsp = new SolrQueryResponse();
- SolrQueryRequest req = req();
- req.getContext().put("path", path);
- infoHandler.handleRequestBody(req, rsp);
- return rsp;
+ try (SolrQueryRequest req = req()) {
+ req.getContext().put("path", path);
+ infoHandler.handleRequestBody(req, rsp);
+ return rsp;
+ }
}
}
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/LukeRequestHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/LukeRequestHandlerTest.java
index 878fe06..f75d7c6 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/LukeRequestHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/LukeRequestHandlerTest.java
@@ -22,6 +22,7 @@ import java.util.EnumSet;
import javax.xml.xpath.XPathConstants;
import org.apache.solr.common.luke.FieldFlag;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.schema.CustomAnalyzerStrField; // jdoc
import org.apache.solr.schema.IndexSchema;
@@ -116,20 +117,17 @@ public class LukeRequestHandlerTest extends SolrTestCaseJ4 {
}
- // diff loop for checking 'index' flags,
- // only valid for fields that are indexed & stored
- for (String f : Arrays.asList("solr_t","solr_s","solr_ti",
- "solr_td","solr_dt","solr_b")) {
- if (h.getCore().getLatestSchema().getField(f).getType().isPointField()) continue;
- final String xp = getFieldXPathPrefix(f);
- assertQ("Not as many index flags as expected ("+numFlags+") for " + f,
- req("qt","/admin/luke", "fl", f),
- numFlags+"=string-length("+xp+"[@name='index'])");
+ try (SolrCore core = h.getCore()) {
+ // diff loop for checking 'index' flags,
+ // only valid for fields that are indexed & stored
+ for (String f : Arrays.asList("solr_t", "solr_s", "solr_ti", "solr_td", "solr_dt", "solr_b")) {
+ if (core.getLatestSchema().getField(f).getType().isPointField()) continue;
+ final String xp = getFieldXPathPrefix(f);
+ assertQ("Not as many index flags as expected (" + numFlags + ") for " + f, req("qt", "/admin/luke", "fl", f), numFlags + "=string-length(" + xp + "[@name='index'])");
- final String hxp = getFieldXPathHistogram(f);
- assertQ("Historgram field should be present for field "+f,
- req("qt", "/admin/luke", "fl", f),
- hxp+"[@name='histogram']");
+ final String hxp = getFieldXPathHistogram(f);
+ assertQ("Historgram field should be present for field " + f, req("qt", "/admin/luke", "fl", f), hxp + "[@name='histogram']");
+ }
}
}
@@ -163,6 +161,7 @@ public class LukeRequestHandlerTest extends SolrTestCaseJ4 {
try {
// First, determine that the two fields ARE there
String response = h.query(req);
+ req.close();
assertNull(TestHarness.validateXPath(solrConfig.getResourceLoader(), response,
getFieldXPathPrefix("solr_t") + "[@name='index']",
getFieldXPathPrefix("solr_s") + "[@name='index']"
@@ -181,10 +180,11 @@ public class LukeRequestHandlerTest extends SolrTestCaseJ4 {
response = h.query(req);
for (String f : Arrays.asList("solr_t", "solr_s", "solr_ti",
"solr_td", "solr_dt", "solr_b")) {
- if (h.getCore().getLatestSchema().getField(f).getType().isPointField()) continue;
+ if (req.getCore().getLatestSchema().getField(f).getType().isPointField()) continue;
assertNull(TestHarness.validateXPath(solrConfig.getResourceLoader(), response,
getFieldXPathPrefix(f) + "[@name='index']"));
}
+ req.close();
} catch (Exception e) {
fail("Caught unexpected exception " + e.getMessage());
}
@@ -238,6 +238,7 @@ public class LukeRequestHandlerTest extends SolrTestCaseJ4 {
SolrQueryRequest req = req("qt", "/admin/luke", "show", "schema");
String xml = h.query(req);
+ req.close();
String r = TestHarness.validateXPath
(solrConfig.getResourceLoader(), xml,
field("text") + "/arr[@name='copySources']/str[.='title']",
@@ -268,6 +269,7 @@ public class LukeRequestHandlerTest extends SolrTestCaseJ4 {
SolrQueryRequest req = req("qt", "/admin/luke", "show", "schema", "indent", "on");
String xml = h.query(req);
+ req.close();
String result = TestHarness.validateXPath(solrConfig.getResourceLoader(), xml, field("bday") + "/arr[@name='copyDests']/str[.='catchall_t']");
assertNull(xml, result);
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
index 18b75591a..6fa3213 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
@@ -33,6 +33,7 @@ import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrInfoBean;
import org.apache.solr.metrics.SolrMetricsContext;
import org.apache.solr.request.LocalSolrQueryRequest;
+import org.apache.solr.request.SolrQueryRequest;
import org.junit.BeforeClass;
import org.junit.Test;
import org.slf4j.Logger;
@@ -49,11 +50,14 @@ public class MBeansHandlerTest extends SolrTestCaseJ4 {
@Test
public void testDiff() throws Exception {
- String xml = h.query(req(
+ String xml;
+ try (SolrQueryRequest req = req(
CommonParams.QT,"/admin/mbeans",
"stats","true",
CommonParams.WT,"xml"
- ));
+ )) {
+ xml = h.query(req);
+ }
List<ContentStream> streams = new ArrayList<>();
streams.add(new ContentStreamBase.StringStream(xml));
@@ -65,6 +69,7 @@ public class MBeansHandlerTest extends SolrTestCaseJ4 {
req.setContentStreams(streams);
xml = h.query(req);
+ req.close();
NamedList<NamedList<NamedList<Object>>> diff = SolrInfoMBeanHandler.fromXML(xml);
// The stats bean for SolrInfoMBeanHandler
@@ -83,22 +88,28 @@ public class MBeansHandlerTest extends SolrTestCaseJ4 {
int now = Integer.parseInt(m.group("now"));
assertEquals(1, now - was);
- xml = h.query(req(
+ try (SolrQueryRequest req2 = req(
CommonParams.QT,"/admin/mbeans",
"stats","true",
"key","org.apache.solr.handler.admin.CollectionsHandler"
- ));
- NamedList<NamedList<NamedList<Object>>> nl = SolrInfoMBeanHandler.fromXML(xml);
- assertNotNull( nl.get("ADMIN").get("org.apache.solr.handler.admin.CollectionsHandler"));
+ )) {
+ xml = h.query(req2);
+ NamedList<NamedList<NamedList<Object>>> nl = SolrInfoMBeanHandler.fromXML(xml);
+ assertNotNull(nl.get("ADMIN").get("org.apache.solr.handler.admin.CollectionsHandler"));
+ }
}
@Test
public void testAddedMBeanDiff() throws Exception {
- String xml = h.query(req(
+
+ String xml;
+ try (SolrQueryRequest req = req(
CommonParams.QT,"/admin/mbeans",
"stats","true",
CommonParams.WT,"xml"
- ));
+ )) {
+ xml = h.query(req);
+ }
// Artificially convert a long value to a null, to trigger the ADD case in SolrInfoMBeanHandler.diffObject()
xml = xml.replaceFirst("<long\\s+(name\\s*=\\s*\"ADMIN./admin/mbeans.totalTime\"\\s*)>[^<]*</long>", "<null $1/>");
@@ -110,6 +121,7 @@ public class MBeansHandlerTest extends SolrTestCaseJ4 {
"diff","true");
req.setContentStreams(Collections.singletonList(new ContentStreamBase.StringStream(xml)));
xml = h.query(req);
+ req.close();
NamedList<NamedList<NamedList<Object>>> nl = SolrInfoMBeanHandler.fromXML(xml);
assertNotNull(((NamedList)nl.get("ADMIN").get("/admin/mbeans").get("stats")).get("ADMIN./admin/mbeans.totalTime"));
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/PropertiesRequestHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/PropertiesRequestHandlerTest.java
index 34ab7eb..feefd1b 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/PropertiesRequestHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/PropertiesRequestHandlerTest.java
@@ -22,6 +22,7 @@ import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.util.RedactionUtils;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -61,11 +62,9 @@ public class PropertiesRequestHandlerTest extends SolrTestCaseJ4 {
}
private NamedList<NamedList<NamedList<Object>>> readProperties() throws Exception {
- String xml = h.query(req(
- CommonParams.QT, "/admin/properties",
- CommonParams.WT, "xml"
- ));
-
+ SolrQueryRequest req = req(CommonParams.QT, "/admin/properties", CommonParams.WT, "xml");
+ String xml = h.query(req);
+ req.close();
XMLResponseParser parser = new XMLResponseParser();
return (NamedList<NamedList<NamedList<Object>>>)
parser.processResponse(new StringReader(xml)).get("system.properties");
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/ShowFileRequestHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/ShowFileRequestHandlerTest.java
index 82fe992..0f8e34a 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/ShowFileRequestHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/ShowFileRequestHandlerTest.java
@@ -24,6 +24,7 @@ import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrCore;
+import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.junit.After;
import org.junit.Before;
@@ -71,8 +72,10 @@ public class ShowFileRequestHandlerTest extends SolrJettyTestBase {
// response.
SolrCore core = h.getCore();
SolrQueryResponse rsp = new SolrQueryResponse();
+ SolrQueryRequest req = req("file", "does-not-exist-404.txt");
core.execute(core.getRequestHandler("/admin/file"),
- req("file", "does-not-exist-404.txt"), rsp);
+ req, rsp);
+ req.close();
assertNotNull("no exception in response", rsp.getException());
assertTrue("wrong type of exception: " + rsp.getException().getClass(),
rsp.getException() instanceof SolrException);
diff --git a/solr/core/src/test/org/apache/solr/handler/component/DebugComponentTest.java b/solr/core/src/test/org/apache/solr/handler/component/DebugComponentTest.java
index 0062fcf..e593897 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/DebugComponentTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/DebugComponentTest.java
@@ -218,6 +218,7 @@ public class DebugComponentTest extends SolrTestCaseJ4 {
}
component.prepare(rb);
ensureRidPresent(rb, null);
+ req.close();
}
req = req("q", "test query", "distrib", "true", CommonParams.REQUEST_ID, "123");
@@ -226,6 +227,7 @@ public class DebugComponentTest extends SolrTestCaseJ4 {
rb.setDebug(true);
component.prepare(rb);
ensureRidPresent(rb, "123");
+ req.close();
}
@SuppressWarnings("unchecked")
diff --git a/solr/core/src/test/org/apache/solr/handler/component/ResponseBuilderTest.java b/solr/core/src/test/org/apache/solr/handler/component/ResponseBuilderTest.java
index 28bad7a..af97220 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/ResponseBuilderTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/ResponseBuilderTest.java
@@ -22,11 +22,13 @@ import java.util.ArrayList;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
+import org.junit.After;
+import org.junit.Before;
import org.junit.BeforeClass;
public class ResponseBuilderTest extends SolrTestCaseJ4 {
- SolrQueryRequest req = req("q", "title:test");
+ SolrQueryRequest req;
SolrQueryResponse rsp = new SolrQueryResponse();
@BeforeClass
@@ -34,6 +36,19 @@ public class ResponseBuilderTest extends SolrTestCaseJ4 {
initCore("solrconfig.xml", "schema.xml");
}
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ req = req("q", "title:test");
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ super.tearDown();
+ req.close();
+ req = null;
+ }
+
//This test is being added to verify responseBuilder.isDistributed() exists and is visible.
public void testIsDistrib(){
ResponseBuilder responseBuilder = new ResponseBuilder(req, rsp, new ArrayList<>(0));
diff --git a/solr/core/src/test/org/apache/solr/handler/component/SuggestComponentContextFilterQueryTest.java b/solr/core/src/test/org/apache/solr/handler/component/SuggestComponentContextFilterQueryTest.java
index 53aef11..9621a9e 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/SuggestComponentContextFilterQueryTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/SuggestComponentContextFilterQueryTest.java
@@ -18,8 +18,6 @@ package org.apache.solr.handler.component;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.spelling.suggest.SuggesterParams;
-import org.junit.Before;
-import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
@@ -83,7 +81,7 @@ public class SuggestComponentContextFilterQueryTest extends SolrTestCaseJ4 {
@Test
public void testBuildThrowsIllegalArgumentExceptionWhenContextIsConfiguredButNotImplemented() throws Exception {
IllegalArgumentException ex = expectThrows(IllegalArgumentException.class, () -> {
- h.query(req("qt", rh, SuggesterParams.SUGGEST_BUILD, "true",
+ query(req("qt", rh, SuggesterParams.SUGGEST_BUILD, "true",
SuggesterParams.SUGGEST_DICT, "suggest_context_filtering_not_implemented",
SuggesterParams.SUGGEST_Q, "examp"));
});
diff --git a/solr/core/src/test/org/apache/solr/handler/component/TestExpandComponent.java b/solr/core/src/test/org/apache/solr/handler/component/TestExpandComponent.java
index 7f23d68..5d86454 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/TestExpandComponent.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/TestExpandComponent.java
@@ -490,38 +490,38 @@ public class TestExpandComponent extends SolrTestCaseJ4 {
// expand with grouping
SolrException e = expectThrows(SolrException.class, () -> {
- h.query(req("q", "*:*", "expand", "true", "expand.field", "id", "group", "true", "group.field", "id"));
+ query(req("q", "*:*", "expand", "true", "expand.field", "id", "group", "true", "group.field", "id"));
});
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
assertEquals("Can not use expand with Grouping enabled", e.getMessage());
// no expand field
- e = expectThrows(SolrException.class, () -> h.query(req("q", "*:*", "expand", "true")));
+ e = expectThrows(SolrException.class, () -> query(req("q", "*:*", "expand", "true")));
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
assertEquals("missing expand field", e.getMessage());
// query and filter syntax errors
- e = expectThrows(SolrException.class, () -> h.query(req("q", "*:*", "expand", "true",
+ e = expectThrows(SolrException.class, () -> query(req("q", "*:*", "expand", "true",
"expand.field", "term_s", "expand.q", "{!")));
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
assertTrue(e.getMessage().contains("Expected identifier at pos 2 str='{!'"));
- e = expectThrows(SolrException.class, () -> h.query(req("q", "*:*", "expand", "true",
+ e = expectThrows(SolrException.class, () -> query(req("q", "*:*", "expand", "true",
"expand.field", "term_s", "expand.q", "*:*", "expand.fq", "{!")));
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
assertTrue(e.getMessage().contains("Expected identifier at pos 2 str='{!'"));
- e = expectThrows(SolrException.class, () -> h.query(req("q", "*:*", "expand", "true",
+ e = expectThrows(SolrException.class, () -> query(req("q", "*:*", "expand", "true",
"expand.field", "term_s", "expand.q", "*:*", "expand.fq", "{!")));
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
assertTrue(e.getMessage().contains("Expected identifier at pos 2 str='{!'"));
- e = expectThrows(SolrException.class, () -> h.query(req("q", "*:*", "expand", "true",
+ e = expectThrows(SolrException.class, () -> query(req("q", "*:*", "expand", "true",
"expand.field", "term_s", "expand.q", "*:*", "expand.sort", "bleh")));
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
assertTrue(e.getMessage().contains("Can't determine a Sort Order (asc or desc) in sort spec 'bleh'"));
- e = expectThrows(SolrException.class, () -> h.query(req("q", "*:*", "expand", "true",
+ e = expectThrows(SolrException.class, () -> query(req("q", "*:*", "expand", "true",
"expand.field", "text_t", "expand.q", "*:*")));
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
assertEquals("Expand not supported for fieldType:'text'", e.getMessage());
diff --git a/solr/core/src/test/org/apache/solr/handler/export/TestExportWriter.java b/solr/core/src/test/org/apache/solr/handler/export/TestExportWriter.java
index c3f81be..0948987 100644
--- a/solr/core/src/test/org/apache/solr/handler/export/TestExportWriter.java
+++ b/solr/core/src/test/org/apache/solr/handler/export/TestExportWriter.java
@@ -34,6 +34,7 @@ import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.util.SuppressForbidden;
import org.apache.solr.common.util.Utils;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.index.LogDocMergePolicyFactory;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.schema.SchemaField;
@@ -73,7 +74,7 @@ public class TestExportWriter extends SolrTestCaseJ4 {
assertU(adoc("id","2"));
assertU(commit());
- String resp = h.query(req("q", "*:*", "qt", "/export", "fl", "id,field2_i_p", "sort", "field2_i_p asc"));
+ String resp = query(req("q", "*:*", "qt", "/export", "fl", "id,field2_i_p", "sort", "field2_i_p asc"));
assertJsonEquals(resp, "{\n" +
" \"responseHeader\":{\"status\":0},\n" +
" \"response\":{\n" +
@@ -98,15 +99,12 @@ public class TestExportWriter extends SolrTestCaseJ4 {
List<String> fieldNames = new ArrayList<>(Arrays.asList("floatdv", "intdv", "stringdv", "longdv", "doubledv",
"datedv", "booleandv", "field1_s_dv", "field2_i_p", "field3_l_p"));
for (String sortField : fieldNames) {
- String resp = h.query(req("q", "*:*", "qt", "/export", "fl", "id," + sortField, "sort", sortField + " desc"));
- assertJsonEquals(resp, "{\n" +
- " \"responseHeader\":{\"status\":0},\n" +
- " \"response\":{\n" +
- " \"numFound\":1,\n" +
- " \"docs\":[{\n" +
- " \"id\":\"1\"}]}}");
+ String resp;
+ try (SolrQueryRequest req = req("q", "*:*", "qt", "/export", "fl", "id," + sortField, "sort", sortField + " desc")) {
+ resp = h.query(req);
+ }
+ assertJsonEquals(resp, "{\n" + " \"responseHeader\":{\"status\":0},\n" + " \"response\":{\n" + " \"numFound\":1,\n" + " \"docs\":[{\n" + " \"id\":\"1\"}]}}");
}
-
}
public static void createIndex() {
@@ -250,7 +248,7 @@ public class TestExportWriter extends SolrTestCaseJ4 {
//Test single value DocValue output
//Expected for asc sort doc3 -> doc2 -> doc1
- String s = h.query(req("q", "*:*", "qt", "/export", "fl", "id", "sort", "field1_i_p asc,field2_i_p asc"));
+ String s = query(req("q", "*:*", "qt", "/export", "fl", "id", "sort", "field1_i_p asc,field2_i_p asc"));
assertJsonEquals(s, "{\n" +
" \"responseHeader\":{\"status\":0},\n" +
" \"response\":{\n" +
@@ -301,7 +299,7 @@ public class TestExportWriter extends SolrTestCaseJ4 {
"field8_i_p","6"));
assertU(commit());
- s = h.query(req("q", "*:*", "qt", "/export", "fl", "id", "sort", "field1_i_p asc,field2_i_p asc,field3_i_p asc,field4_i_p asc,field5_i_p desc,field6_i_p desc,field7_i_p desc,field8_i_p asc"));
+ s = query(req("q", "*:*", "qt", "/export", "fl", "id", "sort", "field1_i_p asc,field2_i_p asc,field3_i_p asc,field4_i_p asc,field5_i_p desc,field6_i_p desc,field7_i_p desc,field8_i_p asc"));
assertJsonEquals(s, "{\n" +
" \"responseHeader\":{\"status\":0},\n" +
" \"response\":{\n" +
@@ -342,10 +340,10 @@ public class TestExportWriter extends SolrTestCaseJ4 {
" ,{\n" +
" \"id\":\"4\"}]}}";
- String s = h.query(req("q", "*:*", "qt", "/export", "fl", "id", "sort", "stringdv asc"));
+ String s = query(req("q", "*:*", "qt", "/export", "fl", "id", "sort", "stringdv asc"));
assertJsonEquals(s, expectedResult);
- s = h.query(req("q", "*:*", "qt", "/export", "fl", "id", "sort", "stringdv desc"));
+ s = query(req("q", "*:*", "qt", "/export", "fl", "id", "sort", "stringdv desc"));
assertJsonEquals(s, expectedResult);
}
@@ -364,7 +362,7 @@ public class TestExportWriter extends SolrTestCaseJ4 {
assertU(commit());
- String s = h.query(req("q", "*:*", "qt", "/export", "fl", "id", "sort", "stringdv desc"));
+ String s = query(req("q", "*:*", "qt", "/export", "fl", "id", "sort", "stringdv desc"));
assertJsonEquals(s, "{\n" +
" \"responseHeader\":{\"status\":0},\n" +
" \"response\":{\n" +
@@ -391,7 +389,7 @@ public class TestExportWriter extends SolrTestCaseJ4 {
"booleandv","false"));
assertU(commit());
- String s = h.query(req("q", "*:*", "qt", "/export", "fl", "id", "sort", "booleandv asc"));
+ String s = query(req("q", "*:*", "qt", "/export", "fl", "id", "sort", "booleandv asc"));
assertJsonEquals(s, "{\n" +
" \"responseHeader\":{\"status\":0},\n" +
" \"response\":{\n" +
@@ -401,7 +399,7 @@ public class TestExportWriter extends SolrTestCaseJ4 {
" ,{\n" +
" \"id\":\"1\"}]}}");
- s = h.query(req("q", "*:*", "qt", "/export", "fl", "id", "sort", "booleandv desc"));
+ s = query(req("q", "*:*", "qt", "/export", "fl", "id", "sort", "booleandv desc"));
assertJsonEquals(s, "{\n" +
" \"responseHeader\":{\"status\":0},\n" +
" \"response\":{\n" +
@@ -415,104 +413,104 @@ public class TestExportWriter extends SolrTestCaseJ4 {
private void testSortingOutput() throws Exception {
//Test single value DocValue output
- String s = h.query(req("q", "id:1", "qt", "/export", "fl", "floatdv,intdv,stringdv,longdv,doubledv", "sort", "intdv asc"));
+ String s = query(req("q", "id:1", "qt", "/export", "fl", "floatdv,intdv,stringdv,longdv,doubledv", "sort", "intdv asc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":1, \"docs\":[{\"floatdv\":2.1,\"intdv\":1,\"stringdv\":\"hello world\",\"longdv\":323223232323,\"doubledv\":2344.345}]}}");
//Test null value string:
- s = h.query(req("q", "id:7", "qt", "/export", "fl", "floatdv,intdv,stringdv,longdv,doubledv", "sort", "intdv asc"));
+ s = query(req("q", "id:7", "qt", "/export", "fl", "floatdv,intdv,stringdv,longdv,doubledv", "sort", "intdv asc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":1, \"docs\":[{\"floatdv\":2.1,\"intdv\":7,\"longdv\":323223232323,\"doubledv\":2344.345}]}}");
//Test multiValue docValues output
- s = h.query(req("q", "id:1", "qt", "/export", "fl", "intdv_m,floatdv_m,doubledv_m,longdv_m,stringdv_m", "sort", "intdv asc"));
+ s = query(req("q", "id:1", "qt", "/export", "fl", "intdv_m,floatdv_m,doubledv_m,longdv_m,stringdv_m", "sort", "intdv asc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":1, \"docs\":[{\"intdv_m\":[100,250],\"floatdv_m\":[123.321,345.123],\"doubledv_m\":[3444.222,23232.2],\"longdv_m\":[343332,43434343434],\"stringdv_m\":[\"Everton\",\"liverpool\",\"manchester \\\"city\\\"\"]}]}}");
//Test multiValues docValues output with nulls
- s = h.query(req("q", "id:7", "qt", "/export", "fl", "intdv_m,floatdv_m,doubledv_m,longdv_m,stringdv_m", "sort", "intdv asc"));
+ s = query(req("q", "id:7", "qt", "/export", "fl", "intdv_m,floatdv_m,doubledv_m,longdv_m,stringdv_m", "sort", "intdv asc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":1, \"docs\":[{\"floatdv_m\":[123.321,345.123],\"doubledv_m\":[3444.222,23232.2],\"longdv_m\":[343332,43434343434]}]}}");
//Test single sort param is working
- s = h.query(req("q", "id:(1 2)", "qt", "/export", "fl", "intdv", "sort", "intdv desc"));
+ s = query(req("q", "id:(1 2)", "qt", "/export", "fl", "intdv", "sort", "intdv desc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":2, \"docs\":[{\"intdv\":2},{\"intdv\":1}]}}");
- s = h.query(req("q", "id:(1 2)", "qt", "/export", "fl", "intdv", "sort", "intdv asc"));
+ s = query(req("q", "id:(1 2)", "qt", "/export", "fl", "intdv", "sort", "intdv asc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":2, \"docs\":[{\"intdv\":1},{\"intdv\":2}]}}");
// Test sort on String will null value. Null value should sort last on desc and first on asc.
- s = h.query(req("q", "id:(1 7)", "qt", "/export", "fl", "intdv", "sort", "stringdv desc"));
+ s = query(req("q", "id:(1 7)", "qt", "/export", "fl", "intdv", "sort", "stringdv desc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":2, \"docs\":[{\"intdv\":1},{\"intdv\":7}]}}");
- s = h.query(req("q", "id:(1 7)", "qt", "/export", "fl", "intdv", "sort", "stringdv asc"));
+ s = query(req("q", "id:(1 7)", "qt", "/export", "fl", "intdv", "sort", "stringdv asc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":2, \"docs\":[{\"intdv\":7},{\"intdv\":1}]}}");
//Test multi-sort params
- s = h.query(req("q", "id:(1 2)", "qt", "/export", "fl", "intdv", "sort", "floatdv asc,intdv desc"));
+ s = query(req("q", "id:(1 2)", "qt", "/export", "fl", "intdv", "sort", "floatdv asc,intdv desc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":2, \"docs\":[{\"intdv\":2},{\"intdv\":1}]}}");
- s = h.query(req("q", "id:(1 2)", "qt", "/export", "fl", "intdv", "sort", "floatdv desc,intdv asc"));
+ s = query(req("q", "id:(1 2)", "qt", "/export", "fl", "intdv", "sort", "floatdv desc,intdv asc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":2, \"docs\":[{\"intdv\":1},{\"intdv\":2}]}}");
//Test three sort fields
- s = h.query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv asc,stringdv asc,intdv desc"));
+ s = query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv asc,stringdv asc,intdv desc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":3, \"docs\":[{\"intdv\":3},{\"intdv\":2},{\"intdv\":1}]}}");
//Test three sort fields
- s = h.query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv asc,stringdv desc,intdv asc"));
+ s = query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv asc,stringdv desc,intdv asc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":3, \"docs\":[{\"intdv\":1},{\"intdv\":2},{\"intdv\":3}]}}");
//Test four sort fields
- s = h.query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv asc,floatdv desc,floatdv asc,intdv desc"));
+ s = query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv asc,floatdv desc,floatdv asc,intdv desc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":3, \"docs\":[{\"intdv\":3},{\"intdv\":2},{\"intdv\":1}]}}");
//Test five sort fields
- s = h.query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "intdv desc,floatdv asc,floatdv desc,floatdv asc,intdv desc"));
+ s = query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "intdv desc,floatdv asc,floatdv desc,floatdv asc,intdv desc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":3, \"docs\":[{\"intdv\":3},{\"intdv\":2},{\"intdv\":1}]}}");
- s = h.query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv desc,intdv asc,floatdv desc,floatdv desc,intdv desc"));
+ s = query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv desc,intdv asc,floatdv desc,floatdv desc,intdv desc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":3, \"docs\":[{\"intdv\":1},{\"intdv\":2},{\"intdv\":3}]}}");
//Test six sort fields
- s = h.query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv asc,intdv desc,floatdv asc,floatdv desc,floatdv asc,intdv asc"));
+ s = query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv asc,intdv desc,floatdv asc,floatdv desc,floatdv asc,intdv asc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":3, \"docs\":[{\"intdv\":3},{\"intdv\":2},{\"intdv\":1}]}}");
//Test seven sort fields
- s = h.query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv desc,intdv asc,floatdv desc,floatdv asc,floatdv desc,floatdv asc,intdv desc"));
+ s = query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv desc,intdv asc,floatdv desc,floatdv asc,floatdv desc,floatdv asc,intdv desc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":3, \"docs\":[{\"intdv\":1},{\"intdv\":2},{\"intdv\":3}]}}");
//Test eight sort fields
- s = h.query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv asc,intdv desc,floatdv asc,floatdv desc,floatdv asc,floatdv desc,floatdv asc,intdv asc"));
+ s = query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv asc,intdv desc,floatdv asc,floatdv desc,floatdv asc,floatdv desc,floatdv asc,intdv asc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":3, \"docs\":[{\"intdv\":3},{\"intdv\":2},{\"intdv\":1}]}}");
- s = h.query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "intdv asc,floatdv desc,floatdv asc,floatdv desc,floatdv asc,floatdv desc,floatdv asc,intdv desc"));
+ s = query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "intdv asc,floatdv desc,floatdv asc,floatdv desc,floatdv asc,floatdv desc,floatdv asc,intdv desc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":3, \"docs\":[{\"intdv\":1},{\"intdv\":2},{\"intdv\":3}]}}");
//Test nine sort fields
- s = h.query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "intdv asc,floatdv desc,floatdv asc,floatdv desc,floatdv asc,floatdv desc,intdv asc,intdv desc,floatdv asc"));
+ s = query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "intdv asc,floatdv desc,floatdv asc,floatdv desc,floatdv asc,floatdv desc,intdv asc,intdv desc,floatdv asc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":3, \"docs\":[{\"intdv\":1},{\"intdv\":2},{\"intdv\":3}]}}");
- s = h.query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv asc,intdv desc,floatdv asc,floatdv desc,floatdv asc,floatdv desc,intdv desc,intdv asc,floatdv asc"));
+ s = query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv asc,intdv desc,floatdv asc,floatdv desc,floatdv asc,floatdv desc,intdv desc,intdv asc,floatdv asc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":3, \"docs\":[{\"intdv\":3},{\"intdv\":2},{\"intdv\":1}]}}");
//Test ten sort fields
- s = h.query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "intdv asc,floatdv desc,floatdv asc,floatdv desc,floatdv asc,floatdv desc,intdv asc,intdv desc,floatdv desc,floatdv asc"));
+ s = query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "intdv asc,floatdv desc,floatdv asc,floatdv desc,floatdv asc,floatdv desc,intdv asc,intdv desc,floatdv desc,floatdv asc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":3, \"docs\":[{\"intdv\":1},{\"intdv\":2},{\"intdv\":3}]}}");
- s = h.query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv asc,intdv desc,floatdv asc,floatdv desc,floatdv asc,floatdv desc,intdv desc,intdv asc,floatdv desc,floatdv asc"));
+ s = query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "floatdv asc,intdv desc,floatdv asc,floatdv desc,floatdv asc,floatdv desc,intdv desc,intdv asc,floatdv desc,floatdv asc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":3, \"docs\":[{\"intdv\":3},{\"intdv\":2},{\"intdv\":1}]}}");
- s = h.query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "doubledv desc"));
+ s = query(req("q", "id:(1 2 3)", "qt", "/export", "fl", "intdv", "sort", "doubledv desc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":3, \"docs\":[{\"intdv\":3},{\"intdv\":1},{\"intdv\":2}]}}");
- s = h.query(req("q", "intdv:[2 TO 1000]", "qt", "/export", "fl", "intdv", "sort", "doubledv desc"));
+ s = query(req("q", "intdv:[2 TO 1000]", "qt", "/export", "fl", "intdv", "sort", "doubledv desc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":3, \"docs\":[{\"intdv\":3},{\"intdv\":7},{\"intdv\":2}]}}");
- s = h.query(req("q", "stringdv:blah", "qt", "/export", "fl", "intdv", "sort", "doubledv desc"));
+ s = query(req("q", "stringdv:blah", "qt", "/export", "fl", "intdv", "sort", "doubledv desc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":0, \"docs\":[]}}");
- s = h.query(req("q", "id:8", "qt", "/export", "fl", "stringdv", "sort", "intdv asc"));
+ s = query(req("q", "id:8", "qt", "/export", "fl", "stringdv", "sort", "intdv asc"));
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":1, \"docs\":[{\"stringdv\":\"chello \\\"world\\\"\"}]}}");
// Test sortable text fields:
- s = h.query(req("q", "id:(1 OR 3 OR 8)", "qt", "/export", "fl", "sortabledv_m_udvas,sortabledv_udvas", "sort", "sortabledv_udvas asc"));
+ s = query(req("q", "id:(1 OR 3 OR 8)", "qt", "/export", "fl", "sortabledv_m_udvas,sortabledv_udvas", "sort", "sortabledv_udvas asc"));
assertJsonEquals(s, "{\n" +
" \"responseHeader\":{\"status\":0},\n" +
" \"response\":{\n" +
@@ -529,11 +527,11 @@ public class TestExportWriter extends SolrTestCaseJ4 {
" ,\"this is some text two_2\"],\n" +
" \"sortabledv_udvas\":\"this is some text_2\"}]}}");
- s = h.query(req("q", "id:(1 OR 3 OR 8)", "qt", "/export", "fl", "sortabledv_m", "sort", "sortabledv_udvas asc"));
+ s = query(req("q", "id:(1 OR 3 OR 8)", "qt", "/export", "fl", "sortabledv_m", "sort", "sortabledv_udvas asc"));
assertTrue("Should have 400 status when exporting sortabledv_m, it does not have useDocValuesAsStored='true'", s.contains("\"status\":400}"));
assertTrue("Should have a cause when exporting sortabledv_m, it does not have useDocValuesAsStored='true'", s.contains("Must have useDocValuesAsStored='true' to be used with export writer"));
- s = h.query(req("q", "id:(1 OR 3 OR 8)", "qt", "/export", "fl", "sortabledv", "sort", "sortabledv_udvas asc"));
+ s = query(req("q", "id:(1 OR 3 OR 8)", "qt", "/export", "fl", "sortabledv", "sort", "sortabledv_udvas asc"));
assertTrue("Should have 400 status when exporting sortabledv, it does not have useDocValuesAsStored='true'", s.contains("\"status\":400}"));
assertTrue("Should have a cause when exporting sortabledv, it does not have useDocValuesAsStored='true'", s.contains("Must have useDocValuesAsStored='true' to be used with export writer"));
@@ -549,32 +547,39 @@ public class TestExportWriter extends SolrTestCaseJ4 {
//String s = h.query(req("q", "id:1", "qt", "/export", "fl", "floatdv,intdv,stringdv,longdv,doubledv", "sort", "intdv asc"));
String s;
- s = h.query(req("qt", "/export"));
+ s = query(req("qt", "/export"));
assertTrue("Should have had a sort error", s.contains("No sort criteria"));
- s = h.query(req("sort", "intdv asc", "qt", "/export"));
+ s = query(req("sort", "intdv asc", "qt", "/export"));
assertTrue("Should have had fl error", s.contains("export field list (fl) must be specified"));
- s = h.query(req("sort", "intdv asc", "qt", "/export", "fl", "stringdv"));
+ s = query(req("sort", "intdv asc", "qt", "/export", "fl", "stringdv"));
// Interesting you don't even need to specify a "q" parameter.
}
private void testDates() throws Exception {
- String s = h.query(req("q", "id:1", "qt", "/export", "fl", "datedv", "sort", "datedv asc"));
+ SolrQueryRequest req = req("q", "id:1", "qt", "/export", "fl", "datedv", "sort", "datedv asc");
+ String s = h.query(req);
+ req.close();
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":1, \"docs\":[{\"datedv\":\"2017-06-16T07:00:00Z\"}]}}");
- s = h.query(req("q", "id:1", "qt", "/export", "fl", "datedv_m", "sort", "datedv asc"));
+
+ req = req("q", "id:1", "qt", "/export", "fl", "datedv_m", "sort", "datedv asc");
+ s = h.query(req);
+ req.close();
assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":1, \"docs\":[{\"datedv_m\":[\"2017-06-16T01:00:00Z\",\"2017-06-16T02:00:00Z\",\"2017-06-16T03:00:00Z\",\"2017-06-16T04:00:00Z\"]}]}}");
}
private void testDuplicates() throws Exception {
// see SOLR-10924
- String expected = h.getCore().getLatestSchema().getField("int_is_t").getType().isPointField()
- ? "1,1,1,1" : "1";
- String s = h.query(req("q", "id:3", "qt", "/export", "fl", "int_is_t", "sort", "intdv asc"));
- assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":1, \"docs\":[{\"int_is_t\":["+expected+"]}]}}");
- expected = h.getCore().getLatestSchema().getField("int_is_p").getType().isPointField()
- ? "1,1,1,1" : "1";
- s = h.query(req("q", "id:8", "qt", "/export", "fl", "int_is_p", "sort", "intdv asc"));
- assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":1, \"docs\":[{\"int_is_p\":[1,1,1,1]}]}}");
+ try (SolrCore core = h.getCore()) {
+ String expected = core.getLatestSchema().getField("int_is_t").getType().isPointField() ? "1,1,1,1" : "1";
+ String s = query(req("q", "id:3", "qt", "/export", "fl", "int_is_t", "sort", "intdv asc"));
+ assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":1, \"docs\":[{\"int_is_t\":[" + expected + "]}]}}");
+
+ expected = core.getLatestSchema().getField("int_is_p").getType().isPointField() ? "1,1,1,1" : "1";
+
+ s = query(req("q", "id:8", "qt", "/export", "fl", "int_is_p", "sort", "intdv asc"));
+ assertJsonEquals(s, "{\"responseHeader\": {\"status\": 0}, \"response\":{\"numFound\":1, \"docs\":[{\"int_is_p\":[1,1,1,1]}]}}");
+ }
}
/**
@@ -589,21 +594,23 @@ public class TestExportWriter extends SolrTestCaseJ4 {
assertU(commit());
List<String> trieFields = new ArrayList<String>();
List<String> pointFields = new ArrayList<String>();
- for (String mv:new String[]{"s", ""}) {
- for (String indexed:new String[]{"_ni", ""}) {
- for (String type:new String[]{"i", "l", "f", "d", "dt"}) {
- String field = "number_" + type + mv + indexed;
- SchemaField sf = h.getCore().getLatestSchema().getField(field + "_t");
- assertTrue(sf.hasDocValues());
- assertTrue(sf.getType().getNumberType() != null);
-
- sf = h.getCore().getLatestSchema().getField(field + "_p");
- assertTrue(sf.hasDocValues());
- assertTrue(sf.getType().getNumberType() != null);
- assertTrue(sf.getType().isPointField());
-
- trieFields.add(field + "_t");
- pointFields.add(field + "_p");
+ try (SolrCore core = h.getCore()) {
+ for (String mv : new String[] {"s", ""}) {
+ for (String indexed : new String[] {"_ni", ""}) {
+ for (String type : new String[] {"i", "l", "f", "d", "dt"}) {
+ String field = "number_" + type + mv + indexed;
+ SchemaField sf = core.getLatestSchema().getField(field + "_t");
+ assertTrue(sf.hasDocValues());
+ assertTrue(sf.getType().getNumberType() != null);
+
+ sf = core.getLatestSchema().getField(field + "_p");
+ assertTrue(sf.hasDocValues());
+ assertTrue(sf.getType().getNumberType() != null);
+ assertTrue(sf.getType().isPointField());
+
+ trieFields.add(field + "_t");
+ pointFields.add(field + "_p");
+ }
}
}
}
@@ -747,7 +754,7 @@ public class TestExportWriter extends SolrTestCaseJ4 {
);
}
req = req("q", "*:*", "qt", "/export", "fl", "id,sortabledv_udvas", "sort", "sortabledv_udvas asc", "expr", "unique(input(),over=\"sortabledv_udvas\")");
- String rsp = h.query(req);
+ String rsp = query(req);
Map<String, Object> rspMap = mapper.readValue(rsp, HashMap.class);
List<Map<String, Object>> docs = (List<Map<String, Object>>) Utils.getObjectByPath(rspMap, false, "/response/docs");
assertNotNull("missing document results: " + rspMap, docs);
@@ -787,12 +794,12 @@ public class TestExportWriter extends SolrTestCaseJ4 {
String sortStr = String.join(",", fieldWithOrderStrs); // sort : field1 asc, field2 desc
String fieldsStr = String.join(",", fieldStrs); // fl : field1, field2
- String resp = h.query(req("q", "*:*", "qt", "/export", "fl", "id," + fieldsStr, "sort", sortStr));
+ String resp = query(req("q", "*:*", "qt", "/export", "fl", "id," + fieldsStr, "sort", sortStr));
HashMap respMap = mapper.readValue(resp, HashMap.class);
List docs = (ArrayList) ((HashMap) respMap.get("response")).get("docs");
SolrQueryRequest selectReq = req("q", "*:*", "qt", "/select", "fl", "id," + fieldsStr, "sort", sortStr, "rows", Integer.toString(numDocs), "wt", "json");
- String response = h.query(selectReq);
+ String response = query(selectReq);
Map rsp = (Map)Utils.fromJSONString(response);
List doclist = (List)(((Map)rsp.get("response")).get("docs"));
@@ -867,8 +874,8 @@ public class TestExportWriter extends SolrTestCaseJ4 {
String trieFieldsFl = String.join(",", trieFields);
String pointFieldsFl = String.join(",", pointFields);
String sort = pickRandom((String)pickRandom(trieFields.toArray()), (String)pickRandom(pointFields.toArray())).replace("s_", "_") + pickRandom(" asc", " desc");
- String resultPoints = h.query(req("q", query, "qt", "/export", "fl", pointFieldsFl, "sort", sort));
- String resultTries = h.query(req("q", query, "qt", "/export", "fl", trieFieldsFl, "sort", sort));
+ String resultPoints = query(req("q", query, "qt", "/export", "fl", pointFieldsFl, "sort", sort));
+ String resultTries = query(req("q", query, "qt", "/export", "fl", trieFieldsFl, "sort", sort));
assertJsonEquals(resultPoints.replaceAll("_p", ""), resultTries.replaceAll("_t", ""));
}
diff --git a/solr/core/src/test/org/apache/solr/handler/tagger/TaggerTestCase.java b/solr/core/src/test/org/apache/solr/handler/tagger/TaggerTestCase.java
index c38a502..766f79a 100644
--- a/solr/core/src/test/org/apache/solr/handler/tagger/TaggerTestCase.java
+++ b/solr/core/src/test/org/apache/solr/handler/tagger/TaggerTestCase.java
@@ -42,6 +42,7 @@ import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.ContentStreamBase;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrQueryRequestBase;
import org.apache.solr.response.SolrQueryResponse;
@@ -184,11 +185,14 @@ public abstract class TaggerTestCase extends SolrTestCaseJ4 {
/** REMEMBER to close() the result req object. */
protected SolrQueryRequest reqDoc(String doc, SolrParams moreParams) {
log.debug("Test doc: {}", doc);
- SolrParams params = SolrParams.wrapDefaults(moreParams, baseParams);
- SolrQueryRequestBase req = new SolrQueryRequestBase(h.getCore(), params) {};
- Iterable<ContentStream> stream = Collections.singleton((ContentStream)new ContentStreamBase.StringStream(doc));
- req.setContentStreams(stream);
- return req;
+ try (SolrCore core = h.getCore()) {
+ SolrParams params = SolrParams.wrapDefaults(moreParams, baseParams);
+ SolrQueryRequestBase req = new SolrQueryRequestBase(core, params) {
+ };
+ Iterable<ContentStream> stream = Collections.singleton((ContentStream) new ContentStreamBase.StringStream(doc));
+ req.setContentStreams(stream);
+ return req;
+ }
}
/** Asserts the sorted arrays are equals, with a helpful error message when not.*/
diff --git a/solr/core/src/test/org/apache/solr/highlight/HighlighterTest.java b/solr/core/src/test/org/apache/solr/highlight/HighlighterTest.java
index b6c585e..d3334e0 100644
--- a/solr/core/src/test/org/apache/solr/highlight/HighlighterTest.java
+++ b/solr/core/src/test/org/apache/solr/highlight/HighlighterTest.java
@@ -97,7 +97,7 @@ public class HighlighterTest extends SolrTestCaseJ4 {
assertU(commit());
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> {
- h.query(req("q", "long", "hl.method", "postings", "df", field, "hl", "true"));
+ query(req("q", "long", "hl.method", "postings", "df", field, "hl", "true"));
});
assertTrue("Should warn no offsets", e.getMessage().contains("indexed without offsets"));
// note: the default schema.xml has no offsets in postings to test the PostingsHighlighter. Leave that for another
diff --git a/solr/core/src/test/org/apache/solr/highlight/TestPostingsSolrHighlighter.java b/solr/core/src/test/org/apache/solr/highlight/TestPostingsSolrHighlighter.java
index 72686b9..949f7be 100644
--- a/solr/core/src/test/org/apache/solr/highlight/TestPostingsSolrHighlighter.java
+++ b/solr/core/src/test/org/apache/solr/highlight/TestPostingsSolrHighlighter.java
@@ -117,7 +117,7 @@ public class TestPostingsSolrHighlighter extends SolrTestCaseJ4 {
public void testMisconfiguredField() {
ignoreException("was indexed without offsets");
expectThrows(Exception.class, () ->
- h.query(req("q", "text2:document", "sort", "id asc", "hl", "true", "hl.fl", "text2")));
+ query(req("q", "text2:document", "sort", "id asc", "hl", "true", "hl.fl", "text2")));
resetExceptionIgnores();
}
diff --git a/solr/core/src/test/org/apache/solr/highlight/TestUnifiedSolrHighlighter.java b/solr/core/src/test/org/apache/solr/highlight/TestUnifiedSolrHighlighter.java
index 9d890b1..1609242 100644
--- a/solr/core/src/test/org/apache/solr/highlight/TestUnifiedSolrHighlighter.java
+++ b/solr/core/src/test/org/apache/solr/highlight/TestUnifiedSolrHighlighter.java
@@ -72,7 +72,7 @@ public class TestUnifiedSolrHighlighter extends SolrTestCaseJ4 {
public void testImpossibleOffsetSource() {
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> {
- h.query(req("q", "text2:document", "hl.offsetSource", "postings",
+ query(req("q", "text2:document", "hl.offsetSource", "postings",
"hl.fl", "text2", "sort", "id asc", "hl", "true"));
});
assertTrue("Should warn no offsets", e.getMessage().contains("indexed without offsets"));
diff --git a/solr/core/src/test/org/apache/solr/metrics/SolrMetricsIntegrationTest.java b/solr/core/src/test/org/apache/solr/metrics/SolrMetricsIntegrationTest.java
index cb53deb..3fbf998 100644
--- a/solr/core/src/test/org/apache/solr/metrics/SolrMetricsIntegrationTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/SolrMetricsIntegrationTest.java
@@ -33,6 +33,7 @@ import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.NodeConfig;
import org.apache.solr.core.PluginInfo;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrInfoBean;
import org.apache.solr.core.SolrXmlConfig;
import org.apache.solr.metrics.reporters.MockMetricReporter;
@@ -88,7 +89,9 @@ public class SolrMetricsIntegrationTest extends SolrTestCaseJ4 {
h.coreName = DEFAULT_TEST_CORENAME;
jmxReporter = 1;
metricManager = cc.getMetricManager();
- tag = h.getCore().getCoreMetricManager().getTag();
+ try (SolrCore core = h.getCore()) {
+ tag = core.getCoreMetricManager().getTag();
+ }
// initially there are more reporters, because two of them are added via a matching collection name
Map<String, SolrMetricReporter> reporters = metricManager.getReporters("solr.core." + DEFAULT_TEST_CORENAME);
assertEquals(INITIAL_REPORTERS.length + jmxReporter, reporters.size());
@@ -121,45 +124,46 @@ public class SolrMetricsIntegrationTest extends SolrTestCaseJ4 {
if (null == metricManager) {
return; // test failed to init, nothing to cleanup
}
-
- SolrCoreMetricManager coreMetricManager = h.getCore().getCoreMetricManager();
- Map<String, SolrMetricReporter> reporters = metricManager.getReporters(coreMetricManager.getRegistryName());
-
+ try (SolrCore core = h.getCore()) {
+ SolrCoreMetricManager coreMetricManager = core.getCoreMetricManager();
+ Map<String,SolrMetricReporter> reporters = metricManager.getReporters(coreMetricManager.getRegistryName());
+ }
deleteCore();
}
@Test
public void testConfigureReporter() throws Exception {
Random random = random();
-
- String metricName = SolrMetricManager.mkName(METRIC_NAME, HANDLER_CATEGORY.toString(), HANDLER_NAME);
- SolrCoreMetricManager coreMetricManager = h.getCore().getCoreMetricManager();
- Timer timer = (Timer) metricManager.timer(null, coreMetricManager.getRegistryName(), metricName);
-
- long initialCount = timer.getCount();
-
- int iterations = TestUtil.nextInt(random, 0, MAX_ITERATIONS);
- for (int i = 0; i < iterations; ++i) {
- h.query(req("*"));
- }
-
- long finalCount = timer.getCount();
- // nocommit - those timers are disabled right now
- // assertEquals("metric counter incorrect", iterations, finalCount - initialCount);
- Map<String, SolrMetricReporter> reporters = metricManager.getReporters(coreMetricManager.getRegistryName());
- assertEquals(RENAMED_REPORTERS.length + jmxReporter, reporters.size());
-
- // SPECIFIC and MULTIREGISTRY were skipped because they were
- // specific to collection1
- for (String reporterName : RENAMED_REPORTERS) {
- SolrMetricReporter reporter = reporters.get(reporterName + "@" + tag);
- assertNotNull("Reporter " + reporterName + " was not found.", reporter);
- assertTrue(reporter instanceof MockMetricReporter);
-
- MockMetricReporter mockReporter = (MockMetricReporter) reporter;
- assertTrue("Reporter " + reporterName + " was not initialized: " + mockReporter, mockReporter.didInit);
- assertTrue("Reporter " + reporterName + " was not validated: " + mockReporter, mockReporter.didValidate);
- assertFalse("Reporter " + reporterName + " was incorrectly closed: " + mockReporter, mockReporter.didClose);
+ try (SolrCore core = h.getCore()) {
+ String metricName = SolrMetricManager.mkName(METRIC_NAME, HANDLER_CATEGORY.toString(), HANDLER_NAME);
+ SolrCoreMetricManager coreMetricManager = core.getCoreMetricManager();
+ Timer timer = (Timer) metricManager.timer(null, coreMetricManager.getRegistryName(), metricName);
+
+ long initialCount = timer.getCount();
+
+ int iterations = TestUtil.nextInt(random, 0, MAX_ITERATIONS);
+ for (int i = 0; i < iterations; ++i) {
+ query(req("*"));
+ }
+
+ long finalCount = timer.getCount();
+ // nocommit - those timers are disabled right now
+ // assertEquals("metric counter incorrect", iterations, finalCount - initialCount);
+ Map<String,SolrMetricReporter> reporters = metricManager.getReporters(coreMetricManager.getRegistryName());
+ assertEquals(RENAMED_REPORTERS.length + jmxReporter, reporters.size());
+
+ // SPECIFIC and MULTIREGISTRY were skipped because they were
+ // specific to collection1
+ for (String reporterName : RENAMED_REPORTERS) {
+ SolrMetricReporter reporter = reporters.get(reporterName + "@" + tag);
+ assertNotNull("Reporter " + reporterName + " was not found.", reporter);
+ assertTrue(reporter instanceof MockMetricReporter);
+
+ MockMetricReporter mockReporter = (MockMetricReporter) reporter;
+ assertTrue("Reporter " + reporterName + " was not initialized: " + mockReporter, mockReporter.didInit);
+ assertTrue("Reporter " + reporterName + " was not validated: " + mockReporter, mockReporter.didValidate);
+ assertFalse("Reporter " + reporterName + " was incorrectly closed: " + mockReporter, mockReporter.didClose);
+ }
}
}
diff --git a/solr/core/src/test/org/apache/solr/request/TestFaceting.java b/solr/core/src/test/org/apache/solr/request/TestFaceting.java
index 2d5f33e..12460ef 100644
--- a/solr/core/src/test/org/apache/solr/request/TestFaceting.java
+++ b/solr/core/src/test/org/apache/solr/request/TestFaceting.java
@@ -136,6 +136,7 @@ public class TestFaceting extends SolrTestCaseJ4 {
}
@Test
+ @Nightly
public void testTermEnum() throws Exception {
doTermEnum(0);
doTermEnum(1);
diff --git a/solr/core/src/test/org/apache/solr/request/TestIntervalFaceting.java b/solr/core/src/test/org/apache/solr/request/TestIntervalFaceting.java
index 8fd9350..e6c5cfa 100644
--- a/solr/core/src/test/org/apache/solr/request/TestIntervalFaceting.java
+++ b/solr/core/src/test/org/apache/solr/request/TestIntervalFaceting.java
@@ -34,6 +34,7 @@ import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.request.IntervalFacets.FacetInterval;
import org.apache.solr.request.IntervalFacets.IntervalCompareResult;
import org.apache.solr.response.SolrQueryResponse;
@@ -155,8 +156,8 @@ public class TestIntervalFaceting extends SolrTestCaseJ4 {
}
private int getNumberOfReaders() {
- try {
- return h.getCore().withSearcher(searcher -> searcher.getTopReaderContext().leaves().size());
+ try (SolrCore core = h.getCore()) {
+ return core.withSearcher(searcher -> searcher.getTopReaderContext().leaves().size());
} catch (IOException e) {
throw new RuntimeException(e);
}
@@ -252,9 +253,10 @@ public class TestIntervalFaceting extends SolrTestCaseJ4 {
@Test
@Slow
+ @Nightly
public void testRandom() throws Exception {
// All field values will be a number between 0 and cardinality
- int cardinality = TEST_NIGHTLY ? 10000 : 1000;
+ int cardinality = TEST_NIGHTLY ? 10000 : 100;
// Fields to use for interval faceting
String[] fields = new String[]{
"test_s_dv", "test_i_dv", "test_l_dv", "test_f_dv", "test_d_dv", "test_dt_dv",
@@ -262,7 +264,7 @@ public class TestIntervalFaceting extends SolrTestCaseJ4 {
"test_l", "test_f", "test_d", "test_dt", "test_ss", "test_is", "test_fs", "test_ls", "test_ds", "test_dts",
"test_i_p", "test_is_p", "test_l_p", "test_ls_p", "test_f_p", "test_fs_p", "test_d_p", "test_ds_p", "test_dts_p"
};
- for (int i = 0; i < atLeast(TEST_NIGHTLY ? 500 : 100); i++) {
+ for (int i = 0; i < atLeast(TEST_NIGHTLY ? 500 : 10); i++) {
if (random().nextInt(50) == 0) {
//have some empty docs
assertU(adoc("id", String.valueOf(i)));
@@ -432,61 +434,63 @@ public class TestIntervalFaceting extends SolrTestCaseJ4 {
* The range could also contain "*" as beginning and/or end of the range
*/
private String[] getRandomRange(int max, String fieldName) {
- Number[] values = new Number[2];
- FieldType ft = h.getCore().getLatestSchema().getField(fieldName).getType();
- if (ft.getNumberType() == null) {
- assert ft instanceof StrField;
- values[0] = randomInt(max);
- values[1] = randomInt(max);
- Arrays.sort(values, (o1, o2) -> String.valueOf(o1).compareTo(String.valueOf(o2)));
- } else {
- switch (ft.getNumberType()) {
- case DOUBLE:
- values[0] = raondomDouble(max);
- values[1] = raondomDouble(max);
- break;
- case FLOAT:
- values[0] = randomFloat(max);
- values[1] = randomFloat(max);
- break;
- case INTEGER:
- values[0] = randomInt(max);
- values[1] = randomInt(max);
- break;
- case LONG:
- values[0] = randomLong(max);
- values[1] = randomLong(max);
- break;
- case DATE:
- values[0] = randomMs(max);
- values[1] = randomMs(max);
- break;
- default:
- throw new AssertionError("Unexpected number type");
-
+ try (SolrCore core = h.getCore()) {
+ Number[] values = new Number[2];
+ FieldType ft = core.getLatestSchema().getField(fieldName).getType();
+ if (ft.getNumberType() == null) {
+ assert ft instanceof StrField;
+ values[0] = randomInt(max);
+ values[1] = randomInt(max);
+ Arrays.sort(values, (o1, o2) -> String.valueOf(o1).compareTo(String.valueOf(o2)));
+ } else {
+ switch (ft.getNumberType()) {
+ case DOUBLE:
+ values[0] = raondomDouble(max);
+ values[1] = raondomDouble(max);
+ break;
+ case FLOAT:
+ values[0] = randomFloat(max);
+ values[1] = randomFloat(max);
+ break;
+ case INTEGER:
+ values[0] = randomInt(max);
+ values[1] = randomInt(max);
+ break;
+ case LONG:
+ values[0] = randomLong(max);
+ values[1] = randomLong(max);
+ break;
+ case DATE:
+ values[0] = randomMs(max);
+ values[1] = randomMs(max);
+ break;
+ default:
+ throw new AssertionError("Unexpected number type");
+
+ }
+ Arrays.sort(values);
}
- Arrays.sort(values);
- }
- String[] stringValues = new String[2];
- if (rarely()) {
- stringValues[0] = "*";
- } else {
- if (ft.getNumberType() == NumberType.DATE) {
- stringValues[0] = dateFormat.format(values[0]);
+ String[] stringValues = new String[2];
+ if (rarely()) {
+ stringValues[0] = "*";
} else {
- stringValues[0] = String.valueOf(values[0]);
+ if (ft.getNumberType() == NumberType.DATE) {
+ stringValues[0] = dateFormat.format(values[0]);
+ } else {
+ stringValues[0] = String.valueOf(values[0]);
+ }
}
- }
- if (rarely()) {
- stringValues[1] = "*";
- } else {
- if (ft.getNumberType() == NumberType.DATE) {
- stringValues[1] = dateFormat.format(values[1]);
+ if (rarely()) {
+ stringValues[1] = "*";
} else {
- stringValues[1] = String.valueOf(values[1]);
+ if (ft.getNumberType() == NumberType.DATE) {
+ stringValues[1] = dateFormat.format(values[1]);
+ } else {
+ stringValues[1] = String.valueOf(values[1]);
+ }
}
+ return stringValues;
}
- return stringValues;
}
@Test
@@ -678,54 +682,54 @@ public class TestIntervalFaceting extends SolrTestCaseJ4 {
private void assertStringInterval(String fieldName, String intervalStr,
String expectedStart, String expectedEnd) throws SyntaxError {
- SchemaField f = h.getCore().getLatestSchema().getField(fieldName);
- FacetInterval interval = new FacetInterval(f, intervalStr, new ModifiableSolrParams());
+ try (SolrCore core = h.getCore()) {
+ SchemaField f = core.getLatestSchema().getField(fieldName);
+ FacetInterval interval = new FacetInterval(f, intervalStr, new ModifiableSolrParams());
- assertEquals("Expected start " + expectedStart + " but found " + f.getType().toObject(f, interval.start),
- interval.start, new BytesRef(f.getType().toInternal(expectedStart)));
+ assertEquals("Expected start " + expectedStart + " but found " + f.getType().toObject(f, interval.start), interval.start, new BytesRef(f.getType().toInternal(expectedStart)));
- assertEquals("Expected end " + expectedEnd + " but found " + f.getType().toObject(f, interval.end),
- interval.end, new BytesRef(f.getType().toInternal(expectedEnd)));
+ assertEquals("Expected end " + expectedEnd + " but found " + f.getType().toObject(f, interval.end), interval.end, new BytesRef(f.getType().toInternal(expectedEnd)));
+ }
}
private void assertBadInterval(String fieldName, String intervalStr, String errorMsg) {
- SchemaField f = h.getCore().getLatestSchema().getField(fieldName);
- SyntaxError e = expectThrows(SyntaxError.class, () -> new FacetInterval(f, intervalStr, new ModifiableSolrParams()));
- assertTrue("Unexpected error message for interval String: " + intervalStr + ": " +
- e.getMessage(), e.getMessage().contains(errorMsg));
+ try (SolrCore core = h.getCore()) {
+ SchemaField f = core.getLatestSchema().getField(fieldName);
+ SyntaxError e = expectThrows(SyntaxError.class, () -> new FacetInterval(f, intervalStr, new ModifiableSolrParams()));
+ assertTrue("Unexpected error message for interval String: " + intervalStr + ": " + e.getMessage(), e.getMessage().contains(errorMsg));
+ }
}
private void assertInterval(String fieldName, String intervalStr, long[] included, long[] lowerThanStart, long[] graterThanEnd) throws SyntaxError {
- SchemaField f = h.getCore().getLatestSchema().getField(fieldName);
- FacetInterval interval = new FacetInterval(f, intervalStr, new ModifiableSolrParams());
- for (long l : included) {
- assertEquals("Value " + l + " should be INCLUDED for interval" + interval,
- IntervalCompareResult.INCLUDED, interval.includes(l));
- }
- for (long l : lowerThanStart) {
- assertEquals("Value " + l + " should be LOWER_THAN_START for inteval " + interval,
- IntervalCompareResult.LOWER_THAN_START, interval.includes(l));
- }
- for (long l : graterThanEnd) {
- assertEquals("Value " + l + " should be GRATER_THAN_END for inteval " + interval,
- IntervalCompareResult.GREATER_THAN_END, interval.includes(l));
+ try (SolrCore core = h.getCore()) {
+ SchemaField f = core.getLatestSchema().getField(fieldName);
+ FacetInterval interval = new FacetInterval(f, intervalStr, new ModifiableSolrParams());
+ for (long l : included) {
+ assertEquals("Value " + l + " should be INCLUDED for interval" + interval, IntervalCompareResult.INCLUDED, interval.includes(l));
+ }
+ for (long l : lowerThanStart) {
+ assertEquals("Value " + l + " should be LOWER_THAN_START for inteval " + interval, IntervalCompareResult.LOWER_THAN_START, interval.includes(l));
+ }
+ for (long l : graterThanEnd) {
+ assertEquals("Value " + l + " should be GRATER_THAN_END for inteval " + interval, IntervalCompareResult.GREATER_THAN_END, interval.includes(l));
+ }
}
-
}
private void assertIntervalKey(String fieldName, String intervalStr,
String expectedKey, String...params) throws SyntaxError {
- assert (params.length&1)==0:"Params must have an even number of elements";
- SchemaField f = h.getCore().getLatestSchema().getField(fieldName);
- ModifiableSolrParams solrParams = new ModifiableSolrParams();
- for (int i = 0; i < params.length - 1;) {
- solrParams.set(params[i], params[i+1]);
- i+=2;
+ try (SolrCore core = h.getCore()) {
+ assert (params.length & 1) == 0 : "Params must have an even number of elements";
+ SchemaField f = core.getLatestSchema().getField(fieldName);
+ ModifiableSolrParams solrParams = new ModifiableSolrParams();
+ for (int i = 0; i < params.length - 1; ) {
+ solrParams.set(params[i], params[i + 1]);
+ i += 2;
+ }
+ FacetInterval interval = new FacetInterval(f, intervalStr, solrParams);
+
+ assertEquals("Expected key " + expectedKey + " but found " + interval.getKey(), expectedKey, interval.getKey());
}
- FacetInterval interval = new FacetInterval(f, intervalStr, solrParams);
-
- assertEquals("Expected key " + expectedKey + " but found " + interval.getKey(),
- expectedKey, interval.getKey());
}
public void testChangeKey() {
diff --git a/solr/core/src/test/org/apache/solr/response/TestGeoJSONResponseWriter.java b/solr/core/src/test/org/apache/solr/response/TestGeoJSONResponseWriter.java
index 82261f9..c2dc0f9 100644
--- a/solr/core/src/test/org/apache/solr/response/TestGeoJSONResponseWriter.java
+++ b/solr/core/src/test/org/apache/solr/response/TestGeoJSONResponseWriter.java
@@ -24,7 +24,6 @@ import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.SolrException;
import org.junit.After;
import org.junit.Before;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.locationtech.spatial4j.context.SpatialContext;
import org.locationtech.spatial4j.io.SupportedFormats;
@@ -116,7 +115,7 @@ public class TestGeoJSONResponseWriter extends SolrTestCaseJ4 {
// Make sure we select the field
try {
- h.query(req(
+ query(req(
"q","*:*",
"wt","geojson",
"fl","*"));
@@ -127,7 +126,7 @@ public class TestGeoJSONResponseWriter extends SolrTestCaseJ4 {
// non-spatial fields *must* be stored as JSON
try {
- h.query(req(
+ query(req(
"q","id:S.X",
"wt","geojson",
"fl","*",
@@ -142,7 +141,7 @@ public class TestGeoJSONResponseWriter extends SolrTestCaseJ4 {
public void testGeoJSONAtRoot() throws Exception {
// Try reading the whole resposne
- String json = h.query(req(
+ String json = query(req(
"q","*:*",
"wt","geojson",
"rows","2",
@@ -155,7 +154,7 @@ public class TestGeoJSONResponseWriter extends SolrTestCaseJ4 {
assertNotNull(rsp.get("responseHeader"));
assertNotNull(rsp.get("response"));
- json = h.query(req(
+ json = query(req(
"q","*:*",
"wt","geojson",
"rows","2",
@@ -176,7 +175,7 @@ public class TestGeoJSONResponseWriter extends SolrTestCaseJ4 {
public void testGeoJSONOutput() throws Exception {
// Try reading the whole resposne
- readJSON(h.query(req(
+ readJSON(query(req(
"q","*:*",
"wt","geojson",
"fl","*",
@@ -184,7 +183,7 @@ public class TestGeoJSONResponseWriter extends SolrTestCaseJ4 {
"indent","true")));
// Multivalued Valued Point
- Map<String,Object> json = readJSON(h.query(req(
+ Map<String,Object> json = readJSON(query(req(
"q","id:H.B",
"wt","geojson",
"fl","*",
@@ -208,7 +207,7 @@ public class TestGeoJSONResponseWriter extends SolrTestCaseJ4 {
};
for(String[] args : check) {
- json = readJSON(h.query(req(
+ json = readJSON(query(req(
"q",args[0],
"wt","geojson",
"fl","*",
@@ -265,7 +264,7 @@ public class TestGeoJSONResponseWriter extends SolrTestCaseJ4 {
for(String fmt : checkFormats) {
- String json = h.query(req(
+ String json = query(req(
"q","id:test",
"wt","json",
"indent", "true",
diff --git a/solr/core/src/test/org/apache/solr/response/TestRawResponseWriter.java b/solr/core/src/test/org/apache/solr/response/TestRawResponseWriter.java
index 7995efa..d6b4e88 100644
--- a/solr/core/src/test/org/apache/solr/response/TestRawResponseWriter.java
+++ b/solr/core/src/test/org/apache/solr/response/TestRawResponseWriter.java
@@ -28,6 +28,7 @@ import org.apache.solr.client.solrj.impl.BinaryResponseParser;
import org.apache.solr.common.util.ContentStreamBase.ByteArrayStream;
import org.apache.solr.common.util.ContentStreamBase.StringStream;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.request.SolrQueryRequest;
import org.junit.BeforeClass;
import org.junit.AfterClass;
@@ -83,12 +84,13 @@ public class TestRawResponseWriter extends SolrTestCaseJ4 {
stream.setContentType(TestUtil.randomSimpleString(random()));
rsp.add(RawResponseWriter.CONTENT, stream);
-
- for (RawResponseWriter writer : allWriters) {
- assertEquals(stream.getContentType(), writer.getContentType(req(), rsp));
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- writer.write(out, req(), rsp);
- assertArrayEquals(data, out.toByteArray());
+ try (SolrQueryRequest req = req()) {
+ for (RawResponseWriter writer : allWriters) {
+ assertEquals(stream.getContentType(), writer.getContentType(req, rsp));
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ write(rsp, out, writer);
+ assertArrayEquals(data, out.toByteArray());
+ }
}
}
@@ -103,19 +105,20 @@ public class TestRawResponseWriter extends SolrTestCaseJ4 {
stream.setContentType(TestUtil.randomSimpleString(random()));
rsp.add(RawResponseWriter.CONTENT, stream);
-
- for (RawResponseWriter writer : allWriters) {
- assertEquals(stream.getContentType(), writer.getContentType(req(), rsp));
-
- // we should have the same string if we use a Writer
- StringWriter sout = new StringWriter();
- writer.write(sout, req(), rsp);
- assertEquals(data, sout.toString());
-
- // we should have UTF-8 Bytes if we use an OutputStream
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- writer.write(bout, req(), rsp);
- assertEquals(data, bout.toString(StandardCharsets.UTF_8.toString()));
+ try (SolrQueryRequest req = req()) {
+ for (RawResponseWriter writer : allWriters) {
+ assertEquals(stream.getContentType(), writer.getContentType(req, rsp));
+
+ // we should have the same string if we use a Writer
+ StringWriter sout = new StringWriter();
+ write(rsp, sout, writer);
+ assertEquals(data, sout.toString());
+
+ // we should have UTF-8 Bytes if we use an OutputStream
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ write(rsp, bout, writer);
+ assertEquals(data, bout.toString(StandardCharsets.UTF_8.toString()));
+ }
}
}
@@ -129,11 +132,12 @@ public class TestRawResponseWriter extends SolrTestCaseJ4 {
rsp.add(RawResponseWriter.CONTENT, "test");
rsp.add("foo", "bar");
- // check Content-Type against each writer
- assertEquals("application/xml; charset=UTF-8", writerNoBase.getContentType(req(), rsp));
- assertEquals("application/xml; charset=UTF-8", writerXmlBase.getContentType(req(), rsp));
- assertEquals("application/json; charset=UTF-8", writerJsonBase.getContentType(req(), rsp));
- assertEquals("application/octet-stream", writerBinBase.getContentType(req(), rsp));
+ // check Content-Type against each writer
+ try (SolrQueryRequest req = req()) {
+ assertEquals("application/xml; charset=UTF-8", writerNoBase.getContentType(req, rsp)); assertEquals("application/xml; charset=UTF-8", writerXmlBase.getContentType(req, rsp));
+ assertEquals("application/json; charset=UTF-8", writerJsonBase.getContentType(req, rsp));
+ assertEquals("application/octet-stream", writerBinBase.getContentType(req, rsp));
+ }
// check response against each writer
@@ -145,17 +149,17 @@ public class TestRawResponseWriter extends SolrTestCaseJ4 {
"<str name=\"foo\">bar</str>\n" +
"</response>\n";
StringWriter xmlSout = new StringWriter();
- writerXmlBase.write(xmlSout, req(), rsp);
+ write(rsp, xmlSout, writerXmlBase);
assertEquals(xml, xmlSout.toString());
ByteArrayOutputStream xmlBout = new ByteArrayOutputStream();
- writerXmlBase.write(xmlBout, req(), rsp);
+ write(rsp, xmlBout, writerXmlBase);
assertEquals(xml, xmlBout.toString(StandardCharsets.UTF_8.toString()));
//
StringWriter noneSout = new StringWriter();
- writerNoBase.write(noneSout, req(), rsp);
+ write(rsp, noneSout, writerNoBase);
assertEquals(xml, noneSout.toString());
ByteArrayOutputStream noneBout = new ByteArrayOutputStream();
- writerNoBase.write(noneBout, req(), rsp);
+ write(rsp, noneBout, writerNoBase);
assertEquals(xml, noneBout.toString(StandardCharsets.UTF_8.toString()));
// json
@@ -163,15 +167,15 @@ public class TestRawResponseWriter extends SolrTestCaseJ4 {
" \"content\":\"test\",\n" +
" \"foo\":\"bar\"}\n";
StringWriter jsonSout = new StringWriter();
- writerJsonBase.write(jsonSout, req(), rsp);
+ write(rsp, jsonSout, writerJsonBase);
assertEquals(json, jsonSout.toString());
ByteArrayOutputStream jsonBout = new ByteArrayOutputStream();
- writerJsonBase.write(jsonBout, req(), rsp);
+ write(rsp, jsonBout, writerJsonBase);
assertEquals(json, jsonBout.toString(StandardCharsets.UTF_8.toString()));
// javabin
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
- writerBinBase.write(bytes, req(), rsp);
+ write(rsp, bytes, writerBinBase);
BinaryResponseParser parser = new BinaryResponseParser();
NamedList<Object> out = parser.processResponse
(new ByteArrayInputStream(bytes.toByteArray()), /* encoding irrelevant */ null);
@@ -182,6 +186,18 @@ public class TestRawResponseWriter extends SolrTestCaseJ4 {
}
+ private void write(SolrQueryResponse rsp, ByteArrayOutputStream jsonBout, RawResponseWriter writerJsonBase) throws IOException {
+ try (SolrQueryRequest req = req()) {
+ writerJsonBase.write(jsonBout, req, rsp);
+ }
+ }
+
+ private void write(SolrQueryResponse rsp, StringWriter xmlSout, RawResponseWriter writerXmlBase) throws IOException {
+ try (SolrQueryRequest req = req()) {
+ writerXmlBase.write(xmlSout, req, rsp);
+ }
+ }
+
/**
* Generates a new {@link RawResponseWriter} wrapping the specified baseWriter name
* (which much either be an implicitly defined response writer, or one explicitly
diff --git a/solr/core/src/test/org/apache/solr/response/TestRawTransformer.java b/solr/core/src/test/org/apache/solr/response/TestRawTransformer.java
index ea5619f..228e9ed 100644
--- a/solr/core/src/test/org/apache/solr/response/TestRawTransformer.java
+++ b/solr/core/src/test/org/apache/solr/response/TestRawTransformer.java
@@ -56,12 +56,12 @@ public class TestRawTransformer extends SolrTestCaseJ4 {
assertQ(req("q", "*:*"), "//*[@numFound='" + max + "']");
SolrQueryRequest req = req("q", "*:*", "fl", "subject:[json]", "wt", "json");
- String strResponse = h.query(req);
+ String strResponse = query(req);
assertTrue("response does not contain right JSON encoding: " + strResponse,
strResponse.contains("\"subject\":[{poffL:[{offL:[{oGUID:\"7"));
req = req("q", "*:*", "fl", "id,subject", "wt", "json");
- strResponse = h.query(req);
+ strResponse = query(req);
assertTrue("response does not contain right JSON encoding: " + strResponse,
strResponse.contains("subject\":[\""));
}
diff --git a/solr/core/src/test/org/apache/solr/response/TestRetrieveFieldsOptimizer.java b/solr/core/src/test/org/apache/solr/response/TestRetrieveFieldsOptimizer.java
index 6fa6bf1..f504f0f 100644
--- a/solr/core/src/test/org/apache/solr/response/TestRetrieveFieldsOptimizer.java
+++ b/solr/core/src/test/org/apache/solr/response/TestRetrieveFieldsOptimizer.java
@@ -39,7 +39,6 @@ import org.apache.solr.search.SolrReturnFields;
import org.apache.solr.util.RefCounted;
import org.junit.After;
import org.junit.Before;
-import org.junit.BeforeClass;
import org.junit.Test;
import static junit.framework.Assert.fail;
@@ -75,11 +74,12 @@ public class TestRetrieveFieldsOptimizer extends SolrTestCaseJ4 {
System.setProperty("enable.update.log", "false");
typesHolder = new FieldTypeHolder();
initCore("solrconfig-managed-schema.xml", "ignoredSchemaName");
+ try (SolrCore core = h.getCore()) {
+ IndexSchema schema = core.getLatestSchema();
+ setupAllFields();
- IndexSchema schema = h.getCore().getLatestSchema();
- setupAllFields();
-
- h.getCore().setLatestSchema(schema);
+ core.setLatestSchema(schema);
+ }
}
@After
@@ -156,26 +156,27 @@ public class TestRetrieveFieldsOptimizer extends SolrTestCaseJ4 {
}
schema = fieldsHolder.addFields(schema);
- h.getCore().setLatestSchema(schema);
+ try (SolrCore core = h.getCore()) {
+ core.setLatestSchema(schema);
- // All that setup work and we're only going to add a very few docs!
- for (int idx = 0; idx < 10; ++idx) {
- addDocWithAllFields(idx);
- }
- assertU(commit());
- // Now we need to massage the expected values returned based on the docValues type 'cause it's weird.
- final RefCounted<SolrIndexSearcher> refCounted = h.getCore().getNewestSearcher(true);
- try {
- //static Map<String, Map<String, List<String>>>
- for (Map<String, List<String>> docFieldsEnt : allFieldValuesInput.values()) {
- for (Map.Entry<String, List<String>> oneField : docFieldsEnt.entrySet()) {
- RetrieveField field = fieldsHolder.getTestField(oneField.getKey());
- field.expectedValsAsStrings(refCounted.get().getSlowAtomicReader().getFieldInfos().fieldInfo(field.name),
- oneField.getValue());
+ // All that setup work and we're only going to add a very few docs!
+ for (int idx = 0; idx < 10; ++idx) {
+ addDocWithAllFields(idx);
+ }
+ assertU(commit());
+ // Now we need to massage the expected values returned based on the docValues type 'cause it's weird.
+ final RefCounted<SolrIndexSearcher> refCounted = core.getNewestSearcher(true);
+ try {
+ //static Map<String, Map<String, List<String>>>
+ for (Map<String,List<String>> docFieldsEnt : allFieldValuesInput.values()) {
+ for (Map.Entry<String,List<String>> oneField : docFieldsEnt.entrySet()) {
+ RetrieveField field = fieldsHolder.getTestField(oneField.getKey());
+ field.expectedValsAsStrings(refCounted.get().getSlowAtomicReader().getFieldInfos().fieldInfo(field.name), oneField.getValue());
+ }
}
+ } finally {
+ refCounted.decref();
}
- } finally {
- refCounted.decref();
}
}
@@ -315,7 +316,7 @@ public class TestRetrieveFieldsOptimizer extends SolrTestCaseJ4 {
BinaryQueryResponseWriter writer = (BinaryQueryResponseWriter) core.getQueryResponseWriter("javabin");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
writer.write(baos, req, rsp);
-
+ req.close();
// This is really the main point!
assertEquals("We didn't get the values from the expected places! ",
source, ((SolrReturnFields) rsp.returnFields).getFieldSources());
diff --git a/solr/core/src/test/org/apache/solr/response/transform/TestChildDocTransformer.java b/solr/core/src/test/org/apache/solr/response/transform/TestChildDocTransformer.java
index 4b985cf..cfdfea6 100644
--- a/solr/core/src/test/org/apache/solr/response/transform/TestChildDocTransformer.java
+++ b/solr/core/src/test/org/apache/solr/response/transform/TestChildDocTransformer.java
@@ -113,7 +113,7 @@ public class TestChildDocTransformer extends SolrTestCaseJ4 {
"fl", "id, subject,[child parentFilter=\"subject:parentDocument\" childFilter=\"title:bar\" limit=2]"), test3);
SolrException e = expectThrows(SolrException.class, () -> {
- h.query(req("q", "*:*", "fq", "subject:\"parentDocument\" ",
+ query(req("q", "*:*", "fq", "subject:\"parentDocument\" ",
"fl", "id, subject,[child parentFilter=\"subject:bleh\" childFilter=\"title:bar\" limit=2]"));
});
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
@@ -121,7 +121,7 @@ public class TestChildDocTransformer extends SolrTestCaseJ4 {
containsString("Parent filter 'QueryBitSetProducer(subject:bleh)' doesn't match any parent documents"));
e = expectThrows(SolrException.class, () -> {
- h.query(req("q", "*:*", "fq", "subject:\"parentDocument\" ",
+ query(req("q", "*:*", "fq", "subject:\"parentDocument\" ",
"fl", "id, subject,[child parentFilter=e childFilter=\"title:bar\" limit=2]"));
});
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
@@ -129,7 +129,7 @@ public class TestChildDocTransformer extends SolrTestCaseJ4 {
containsString("Parent filter 'QueryBitSetProducer(text:e)' doesn't match any parent documents"));
e = expectThrows(SolrException.class, () -> {
- h.query(req("q", "*:*", "fq", "subject:\"parentDocument\" ",
+ query(req("q", "*:*", "fq", "subject:\"parentDocument\" ",
"fl", "id, subject,[child parentFilter=\"\"]"));
});
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
diff --git a/solr/core/src/test/org/apache/solr/response/transform/TestSubQueryTransformer.java b/solr/core/src/test/org/apache/solr/response/transform/TestSubQueryTransformer.java
index a9e5fa9..039a04d 100644
--- a/solr/core/src/test/org/apache/solr/response/transform/TestSubQueryTransformer.java
+++ b/solr/core/src/test/org/apache/solr/response/transform/TestSubQueryTransformer.java
@@ -186,7 +186,7 @@ public class TestSubQueryTransformer extends SolrTestCaseJ4 {
@Test
public void testRowsStartForSubqueryAndScores() throws Exception {
- String johnDeptsIds = h.query(req(new String[]{"q","{!join from=dept_ss_dv to=dept_id_s}name_s:john",
+ String johnDeptsIds = query(req(new String[]{"q","{!join from=dept_ss_dv to=dept_id_s}name_s:john",
"wt","csv",
"csv.header","false",
"fl","id",
@@ -244,7 +244,7 @@ public class TestSubQueryTransformer extends SolrTestCaseJ4 {
for (String dept : new String[] {"Engineering", "Support"}) { //dept_id_s_dv">Engineering
ArrayList<Object> deptWorkers = Collections.list(
- new StringTokenizer( h.query(req(
+ new StringTokenizer(query(req(
"q","dept_ss_dv:"+dept ,//dept_id_i_dv
"wt","csv",
"csv.header","false",
diff --git a/solr/core/src/test/org/apache/solr/schema/CopyFieldTest.java b/solr/core/src/test/org/apache/solr/schema/CopyFieldTest.java
index 105f9a2..d6923d7 100644
--- a/solr/core/src/test/org/apache/solr/schema/CopyFieldTest.java
+++ b/solr/core/src/test/org/apache/solr/schema/CopyFieldTest.java
@@ -184,7 +184,7 @@ public class CopyFieldTest extends SolrTestCaseJ4 {
args.put( CommonParams.Q, "text:AAM46" );
args.put( "indent", "true" );
core = h.getCore();
- SolrQueryRequest req = new LocalSolrQueryRequest( core, new MapSolrParams( args) );
+ SolrQueryRequest req = new LocalSolrQueryRequest( core, new MapSolrParams( args), true );
assertQ("sku2 copied to text", req
,"//*[@numFound='1']"
,"//result/doc[1]/str[@name='id'][.='5']"
@@ -194,7 +194,7 @@ public class CopyFieldTest extends SolrTestCaseJ4 {
args.put( CommonParams.Q, "1_s:10-1839ACX-93" );
args.put( "indent", "true" );
core = h.getCore();
- req = new LocalSolrQueryRequest( core, new MapSolrParams( args) );
+ req = new LocalSolrQueryRequest( core, new MapSolrParams( args), true );
assertQ("sku1 copied to dynamic dest *_s", req
,"//*[@numFound='1']"
,"//result/doc[1]/str[@name='id'][.='5']"
@@ -205,7 +205,7 @@ public class CopyFieldTest extends SolrTestCaseJ4 {
args.put( CommonParams.Q, "1_dest_sub_s:10-1839ACX-93" );
args.put( "indent", "true" );
core = h.getCore();
- req = new LocalSolrQueryRequest( core, new MapSolrParams( args) );
+ req = new LocalSolrQueryRequest( core, new MapSolrParams( args), true );
assertQ("sku1 copied to *_dest_sub_s (*_s subset pattern)", req
,"//*[@numFound='1']");
@@ -213,7 +213,7 @@ public class CopyFieldTest extends SolrTestCaseJ4 {
args.put( CommonParams.Q, "dest_sub_no_ast_s:AAM46" );
args.put( "indent", "true" );
core = h.getCore();
- req = new LocalSolrQueryRequest( core, new MapSolrParams( args) );
+ req = new LocalSolrQueryRequest( core, new MapSolrParams( args), true );
assertQ("sku2 copied to dest_sub_no_ast_s (*_s subset pattern no asterisk)", req
,"//*[@numFound='1']");
}
@@ -224,7 +224,7 @@ public class CopyFieldTest extends SolrTestCaseJ4 {
// SOLR-4650: copyField source globs should not have to match an explicit or dynamic field
SolrCore core = h.getCore();
IndexSchema schema = core.getLatestSchema();
-
+ core.close();
assertNull("'testing123_*' should not be (or match) a dynamic or explicit field", schema.getFieldOrNull("testing123_*"));
assertTrue("schema should contain dynamic field '*_s'", schema.getDynamicPattern("*_s").equals("*_s"));
@@ -236,7 +236,7 @@ public class CopyFieldTest extends SolrTestCaseJ4 {
args.put( CommonParams.Q, "text:AAM46" );
args.put( "indent", "true" );
core = h.getCore();
- SolrQueryRequest req = new LocalSolrQueryRequest( core, new MapSolrParams( args) );
+ SolrQueryRequest req = new LocalSolrQueryRequest( core, new MapSolrParams( args), true );
assertQ("sku2 copied to text", req
,"//*[@numFound='1']"
,"//result/doc[1]/str[@name='id'][.='5']"
diff --git a/solr/core/src/test/org/apache/solr/schema/TestSchemaField.java b/solr/core/src/test/org/apache/solr/schema/TestSchemaField.java
index a7cd08e..11912e3 100644
--- a/solr/core/src/test/org/apache/solr/schema/TestSchemaField.java
+++ b/solr/core/src/test/org/apache/solr/schema/TestSchemaField.java
@@ -18,6 +18,7 @@
package org.apache.solr.schema;
import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.core.SolrCore;
import org.junit.Before;
import org.junit.BeforeClass;
@@ -72,13 +73,11 @@ public class TestSchemaField extends SolrTestCaseJ4 {
}
private void assertFieldFormats(String fieldName, String expectedPostingsFormat, String expectedDocValuesFormat) {
- SchemaField f = h.getCore().getLatestSchema().getField(fieldName);
- assertNotNull("Field " + fieldName + " not found - schema got changed?", f);
- assertEquals("Field " + f.getName() + " wrong " + FieldProperties.POSTINGS_FORMAT
- + " - schema got changed?",
- expectedPostingsFormat, f.getPostingsFormat());
- assertEquals("Field " + f.getName() + " wrong " + FieldProperties.DOC_VALUES_FORMAT
- + " - schema got changed?",
- expectedDocValuesFormat, f.getDocValuesFormat());
+ try (SolrCore core = h.getCore()) {
+ SchemaField f = core.getLatestSchema().getField(fieldName);
+ assertNotNull("Field " + fieldName + " not found - schema got changed?", f);
+ assertEquals("Field " + f.getName() + " wrong " + FieldProperties.POSTINGS_FORMAT + " - schema got changed?", expectedPostingsFormat, f.getPostingsFormat());
+ assertEquals("Field " + f.getName() + " wrong " + FieldProperties.DOC_VALUES_FORMAT + " - schema got changed?", expectedDocValuesFormat, f.getDocValuesFormat());
+ }
}
}
diff --git a/solr/core/src/test/org/apache/solr/schema/TestSortableTextField.java b/solr/core/src/test/org/apache/solr/schema/TestSortableTextField.java
index abdb21b..9cc1ac8 100644
--- a/solr/core/src/test/org/apache/solr/schema/TestSortableTextField.java
+++ b/solr/core/src/test/org/apache/solr/schema/TestSortableTextField.java
@@ -392,17 +392,17 @@ public class TestSortableTextField extends SolrTestCaseJ4 {
// unlike most field types, SortableTextField should default to useDocValuesAsStored==false
// (check a handful that should have the default behavior)
try (SolrCore core = h.getCore()) {
- for (String n : Arrays.asList("keyword_stxt", "whitespace_max0_stxt", "whitespace_max6_stxt")) {
- {
- FieldType ft = core.getLatestSchema().getFieldTypeByName(n);
- assertEquals("type " + ft.getTypeName() + " should not default to useDocValuesAsStored", false, ft.useDocValuesAsStored());
- }
- {
- SchemaField sf = core.getLatestSchema().getField(n);
- assertEquals("field " + sf.getName() + " should not default to useDocValuesAsStored", false, sf.useDocValuesAsStored());
+ for (String n : Arrays.asList("keyword_stxt", "whitespace_max0_stxt", "whitespace_max6_stxt")) {
+ {
+ FieldType ft = core.getLatestSchema().getFieldTypeByName(n);
+ assertEquals("type " + ft.getTypeName() + " should not default to useDocValuesAsStored", false, ft.useDocValuesAsStored());
+ }
+ {
+ SchemaField sf = core.getLatestSchema().getField(n);
+ assertEquals("field " + sf.getName() + " should not default to useDocValuesAsStored", false, sf.useDocValuesAsStored());
+ }
}
}
- }
// but it should be possible to set useDocValuesAsStored=true explicitly on types...
int num_types_found = 0;
@@ -421,52 +421,49 @@ public class TestSortableTextField extends SolrTestCaseJ4 {
// ...and it should be possible to set/override useDocValuesAsStored=true on fields...
int num_fields_found = 0;
List<String> xpaths = new ArrayList<>(42);
- for (Map.Entry<String,SchemaField> entry : h.getCore().getLatestSchema().getFields().entrySet()) {
- if (entry.getKey().endsWith("_usedvs")) {
- num_fields_found++;
- final SchemaField sf = entry.getValue();
- final String name = sf.getName();
-
- // some sanity check before we move on with the rest of our testing...
- assertFalse("schema change? field should not be stored=true: " + name, sf.stored());
- final boolean usedvs = name.endsWith("_has_usedvs");
- assertTrue("schema change broke assumptions: field must be '*_has_usedvs' or '*_negates_usedvs': " +
- name, usedvs ^ name.endsWith("_negates_usedvs"));
- final boolean max6 = name.startsWith("max6_");
- assertTrue("schema change broke assumptions: field must be 'max6_*' or 'max0_*': " +
- name, max6 ^ name.startsWith("max0_"));
-
- assertEquals("Unexpected useDocValuesAsStored value for field: " + name,
- usedvs, sf.useDocValuesAsStored()) ;
-
- final String docid = ""+num_fields_found;
- if (usedvs && max6) {
- // if useDocValuesAsStored==true and maxCharsForDocValues=N then longer values should fail
-
- final String doc = adoc("id", docid, name, "apple pear orange");
- SolrException ex = expectThrows(SolrException.class, () -> { assertU(doc); });
- for (String expect : Arrays.asList("field " + name,
- "length=17",
- "useDocValuesAsStored=true",
- "maxCharsForDocValues=6")) {
- assertTrue("exception must mention " + expect + ": " + ex.getMessage(),
- ex.getMessage().contains(expect));
- }
- } else {
- // otherwise (useDocValuesAsStored==false *OR* maxCharsForDocValues=0) any value
- // should be fine when adding a doc and we should be able to search for it later...
- final String val = docid + " apple pear orange " + BIG_CONST;
- assertU(adoc("id", docid, name, val));
- String doc_xpath = "//result/doc[str[@name='id'][.='"+docid+"']]";
-
- if (usedvs) {
- // ...and if it *does* usedvs, then we should defnitely see our value when searching...
- doc_xpath = doc_xpath + "[str[@name='"+name+"'][.='"+val+"']]";
+ try (SolrCore core = h.getCore()) {
+ for (Map.Entry<String,SchemaField> entry : core.getLatestSchema().getFields().entrySet()) {
+ if (entry.getKey().endsWith("_usedvs")) {
+ num_fields_found++;
+ final SchemaField sf = entry.getValue();
+ final String name = sf.getName();
+
+ // some sanity check before we move on with the rest of our testing...
+ assertFalse("schema change? field should not be stored=true: " + name, sf.stored());
+ final boolean usedvs = name.endsWith("_has_usedvs");
+ assertTrue("schema change broke assumptions: field must be '*_has_usedvs' or '*_negates_usedvs': " + name, usedvs ^ name.endsWith("_negates_usedvs"));
+ final boolean max6 = name.startsWith("max6_");
+ assertTrue("schema change broke assumptions: field must be 'max6_*' or 'max0_*': " + name, max6 ^ name.startsWith("max0_"));
+
+ assertEquals("Unexpected useDocValuesAsStored value for field: " + name, usedvs, sf.useDocValuesAsStored());
+
+ final String docid = "" + num_fields_found;
+ if (usedvs && max6) {
+ // if useDocValuesAsStored==true and maxCharsForDocValues=N then longer values should fail
+
+ final String doc = adoc("id", docid, name, "apple pear orange");
+ SolrException ex = expectThrows(SolrException.class, () -> {
+ assertU(doc);
+ });
+ for (String expect : Arrays.asList("field " + name, "length=17", "useDocValuesAsStored=true", "maxCharsForDocValues=6")) {
+ assertTrue("exception must mention " + expect + ": " + ex.getMessage(), ex.getMessage().contains(expect));
+ }
} else {
- // ...but if not, then we should definitely not see any value for our field...
- doc_xpath = doc_xpath + "[not(str[@name='"+name+"'])]";
+ // otherwise (useDocValuesAsStored==false *OR* maxCharsForDocValues=0) any value
+ // should be fine when adding a doc and we should be able to search for it later...
+ final String val = docid + " apple pear orange " + BIG_CONST;
+ assertU(adoc("id", docid, name, val));
+ String doc_xpath = "//result/doc[str[@name='id'][.='" + docid + "']]";
+
+ if (usedvs) {
+ // ...and if it *does* usedvs, then we should defnitely see our value when searching...
+ doc_xpath = doc_xpath + "[str[@name='" + name + "'][.='" + val + "']]";
+ } else {
+ // ...but if not, then we should definitely not see any value for our field...
+ doc_xpath = doc_xpath + "[not(str[@name='" + name + "'])]";
+ }
+ xpaths.add(doc_xpath);
}
- xpaths.add(doc_xpath);
}
}
}
diff --git a/solr/core/src/test/org/apache/solr/search/QueryParsingTest.java b/solr/core/src/test/org/apache/solr/search/QueryParsingTest.java
index 3ec66fc..8711153 100644
--- a/solr/core/src/test/org/apache/solr/search/QueryParsingTest.java
+++ b/solr/core/src/test/org/apache/solr/search/QueryParsingTest.java
@@ -100,42 +100,58 @@ public class QueryParsingTest extends SolrTestCaseJ4 {
public void testGetQParser() throws Exception {
// invalid defType
- SolrException exception = expectThrows(SolrException.class, () -> h.query(req("q", "ad", "defType", "bleh")));
- assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
- assertEquals("invalid query parser 'bleh' for query 'ad'", exception.getMessage());
+ SolrException exception;
+ try (SolrQueryRequest req = req("q", "ad", "defType", "bleh")) {
+ exception = expectThrows(SolrException.class, () -> h.query(req));
+ assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
+ assertEquals("invalid query parser 'bleh' for query 'ad'", exception.getMessage());
+ }
// invalid qparser override in the local params
- exception = expectThrows(SolrException.class, () -> h.query(req("q", "{!bleh}")));
- assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
- assertEquals("invalid query parser 'bleh' for query '{!bleh}'", exception.getMessage());
+ try (SolrQueryRequest req = req("q", "{!bleh}")) {
+ exception = expectThrows(SolrException.class, () -> h.query(req));
+ assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
+ assertEquals("invalid query parser 'bleh' for query '{!bleh}'", exception.getMessage());
+ }
// invalid qParser with fq params
- exception = expectThrows(SolrException.class, () -> h.query(req("q", "*:*", "fq", "{!some}")));
- assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
- assertEquals("invalid query parser 'some' for query '{!some}'", exception.getMessage());
+ try (SolrQueryRequest req = req("q", "*:*", "fq", "{!some}")) {
+ exception = expectThrows(SolrException.class, () -> h.query(req));
+ assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
+ assertEquals("invalid query parser 'some' for query '{!some}'", exception.getMessage());
+ }
// invalid qparser with function queries
- exception = expectThrows(SolrException.class, () -> h.query(req("q", "*:*", "defType", "edismax", "boost", "{!hmm}")));
- assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
- assertEquals("invalid query parser 'hmm' for query '{!hmm}'", exception.getMessage());
+ try (SolrQueryRequest req = req("q", "*:*", "defType", "edismax", "boost", "{!hmm}")) {
+ exception = expectThrows(SolrException.class, () -> h.query(req));
+ assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
+ assertEquals("invalid query parser 'hmm' for query '{!hmm}'", exception.getMessage());
+ }
- exception = expectThrows(SolrException.class, () -> h.query(req("q", "*:*", "defType", "edismax", "boost", "query({!bleh v=ak})")));
- assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
- assertEquals("invalid query parser 'bleh' for query '{!bleh v=ak}'", exception.getMessage());
+ try (SolrQueryRequest req = req("q", "*:*", "defType", "edismax", "boost", "query({!bleh v=ak})")) {
+ exception = expectThrows(SolrException.class, () -> h.query(req));
+ assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
+ assertEquals("invalid query parser 'bleh' for query '{!bleh v=ak}'", exception.getMessage());
+ }
- exception = expectThrows(SolrException.class, () ->
- h.query(req("q", "*:*", "defType", "edismax", "boost", "query($qq)", "qq", "{!bleh v=a}")));
- assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
- assertEquals("invalid query parser 'bleh' for query '{!bleh v=a}'", exception.getMessage());
+ try (SolrQueryRequest req = req("q", "*:*", "defType", "edismax", "boost", "query($qq)", "qq", "{!bleh v=a}")) {
+ exception = expectThrows(SolrException.class, () -> h.query(req));
+ assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
+ assertEquals("invalid query parser 'bleh' for query '{!bleh v=a}'", exception.getMessage());
+ }
// ranking doesn't use defType
- exception = expectThrows(SolrException.class, () -> h.query(req("q", "*:*", "rq", "{!bleh}")));
- assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
- assertEquals("invalid query parser 'bleh' for query '{!bleh}'", exception.getMessage());
+ try (SolrQueryRequest req = req("q", "*:*", "rq", "{!bleh}")) {
+ exception = expectThrows(SolrException.class, () -> h.query(req));
+ assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
+ assertEquals("invalid query parser 'bleh' for query '{!bleh}'", exception.getMessage());
+ }
// with stats.field
- exception = expectThrows(SolrException.class, () -> h.query(req("q", "*:*", "stats", "true", "stats.field", "{!bleh}")));
- assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
- assertEquals("invalid query parser 'bleh' for query '{!bleh}'", exception.getMessage());
+ try (SolrQueryRequest req = req("q", "*:*", "stats", "true", "stats.field", "{!bleh}")) {
+ exception = expectThrows(SolrException.class, () -> h.query(req));
+ assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
+ assertEquals("invalid query parser 'bleh' for query '{!bleh}'", exception.getMessage());
+ }
}
}
diff --git a/solr/core/src/test/org/apache/solr/search/SolrIndexSearcherTest.java b/solr/core/src/test/org/apache/solr/search/SolrIndexSearcherTest.java
index d1f557e..1f1a4d5 100644
--- a/solr/core/src/test/org/apache/solr/search/SolrIndexSearcherTest.java
+++ b/solr/core/src/test/org/apache/solr/search/SolrIndexSearcherTest.java
@@ -26,6 +26,7 @@ import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TotalHits;
import org.apache.lucene.search.Weight;
import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.core.SolrCore;
import org.junit.Before;
import org.junit.BeforeClass;
@@ -109,143 +110,160 @@ public class SolrIndexSearcherTest extends SolrTestCaseJ4 {
}
public void testLowMinExactCountGeneratesApproximation() throws IOException {
- h.getCore().withSearcher(searcher -> {
- QueryCommand cmd = createBasicQueryCommand(NUM_DOCS / 2, 10, "field1_s", "foo");
- assertMatchesGreaterThan(NUM_DOCS, searcher, cmd);
- return null;
- });
-
- h.getCore().withSearcher(searcher -> {
- QueryCommand cmd = createBasicQueryCommand(1, 1, "field2_s", "1");
- assertMatchesGreaterThan(NUM_DOCS/2, searcher, cmd);
- return null;
- });
+ try (SolrCore core = h.getCore()) {
+ core.withSearcher(searcher -> {
+ QueryCommand cmd = createBasicQueryCommand(NUM_DOCS / 2, 10, "field1_s", "foo");
+ assertMatchesGreaterThan(NUM_DOCS, searcher, cmd);
+ return null;
+ });
+
+ core.withSearcher(searcher -> {
+ QueryCommand cmd = createBasicQueryCommand(1, 1, "field2_s", "1");
+ assertMatchesGreaterThan(NUM_DOCS / 2, searcher, cmd);
+ return null;
+ });
+ }
}
public void testHighMinExactCountGeneratesExactCount() throws IOException {
- h.getCore().withSearcher(searcher -> {
- QueryCommand cmd = createBasicQueryCommand(NUM_DOCS, 10, "field1_s", "foo");
- assertMatchesEqual(NUM_DOCS, searcher, cmd);
- return null;
- });
-
- h.getCore().withSearcher(searcher -> {
- QueryCommand cmd = createBasicQueryCommand(NUM_DOCS, 10, "field2_s", "1");
- assertMatchesEqual(NUM_DOCS/2, searcher, cmd);
- return null;
- });
+ try (SolrCore core = h.getCore()) {
+ core.withSearcher(searcher -> {
+ QueryCommand cmd = createBasicQueryCommand(NUM_DOCS, 10, "field1_s", "foo");
+ assertMatchesEqual(NUM_DOCS, searcher, cmd);
+ return null;
+ });
+
+ core.withSearcher(searcher -> {
+ QueryCommand cmd = createBasicQueryCommand(NUM_DOCS, 10, "field2_s", "1");
+ assertMatchesEqual(NUM_DOCS / 2, searcher, cmd);
+ return null;
+ });
+ }
}
public void testLowMinExactCountWithQueryResultCache() throws IOException {
- h.getCore().withSearcher(searcher -> {
- QueryCommand cmd = createBasicQueryCommand(NUM_DOCS / 2, 10, "field1_s", "foo");
- cmd.clearFlags(SolrIndexSearcher.NO_CHECK_QCACHE | SolrIndexSearcher.NO_SET_QCACHE);
- searcher.search(new QueryResult(), cmd);
- assertMatchesGreaterThan(NUM_DOCS, searcher, cmd);
- return null;
- });
+ try (SolrCore core = h.getCore()) {
+ core.withSearcher(searcher -> {
+ QueryCommand cmd = createBasicQueryCommand(NUM_DOCS / 2, 10, "field1_s", "foo");
+ cmd.clearFlags(SolrIndexSearcher.NO_CHECK_QCACHE | SolrIndexSearcher.NO_SET_QCACHE);
+ searcher.search(new QueryResult(), cmd);
+ assertMatchesGreaterThan(NUM_DOCS, searcher, cmd);
+ return null;
+ });
+ }
}
public void testHighMinExactCountWithQueryResultCache() throws IOException {
- h.getCore().withSearcher(searcher -> {
- QueryCommand cmd = createBasicQueryCommand(NUM_DOCS, 2, "field1_s", "foo");
- cmd.clearFlags(SolrIndexSearcher.NO_CHECK_QCACHE | SolrIndexSearcher.NO_SET_QCACHE);
- searcher.search(new QueryResult(), cmd);
- assertMatchesEqual(NUM_DOCS, searcher, cmd);
- return null;
- });
+ try (SolrCore core = h.getCore()) {
+ core.withSearcher(searcher -> {
+ QueryCommand cmd = createBasicQueryCommand(NUM_DOCS, 2, "field1_s", "foo");
+ cmd.clearFlags(SolrIndexSearcher.NO_CHECK_QCACHE | SolrIndexSearcher.NO_SET_QCACHE);
+ searcher.search(new QueryResult(), cmd);
+ assertMatchesEqual(NUM_DOCS, searcher, cmd);
+ return null;
+ });
+ }
}
public void testMinExactCountMoreRows() throws IOException {
- h.getCore().withSearcher(searcher -> {
- QueryCommand cmd = createBasicQueryCommand(2, NUM_DOCS, "field1_s", "foo");
- assertMatchesEqual(NUM_DOCS, searcher, cmd);
- return null;
- });
+ try (SolrCore core = h.getCore()) {
+ core.withSearcher(searcher -> {
+ QueryCommand cmd = createBasicQueryCommand(2, NUM_DOCS, "field1_s", "foo");
+ assertMatchesEqual(NUM_DOCS, searcher, cmd);
+ return null;
+ });
+ }
}
public void testMinExactCountMatchWithDocSet() throws IOException {
- h.getCore().withSearcher(searcher -> {
- QueryCommand cmd = createBasicQueryCommand(2, 2, "field1_s", "foo");
- assertMatchesGreaterThan(NUM_DOCS, searcher, cmd);
-
- cmd.setNeedDocSet(true);
- assertMatchesEqual(NUM_DOCS, searcher, cmd);
- return null;
- });
+ try (SolrCore core = h.getCore()) {
+ core.withSearcher(searcher -> {
+ QueryCommand cmd = createBasicQueryCommand(2, 2, "field1_s", "foo");
+ assertMatchesGreaterThan(NUM_DOCS, searcher, cmd);
+
+ cmd.setNeedDocSet(true);
+ assertMatchesEqual(NUM_DOCS, searcher, cmd);
+ return null;
+ });
+ }
}
public void testMinExactCountWithMaxScoreRequested() throws IOException {
- h.getCore().withSearcher(searcher -> {
- QueryCommand cmd = createBasicQueryCommand(2, 2, "field1_s", "foo");
- cmd.setFlags(SolrIndexSearcher.GET_SCORES);
- QueryResult qr = assertMatchesGreaterThan(NUM_DOCS, searcher, cmd);
- assertNotEquals(Float.NaN, qr.getDocList().maxScore());
- return null;
- });
+ try (SolrCore core = h.getCore()) {
+ core.withSearcher(searcher -> {
+ QueryCommand cmd = createBasicQueryCommand(2, 2, "field1_s", "foo");
+ cmd.setFlags(SolrIndexSearcher.GET_SCORES);
+ QueryResult qr = assertMatchesGreaterThan(NUM_DOCS, searcher, cmd);
+ assertNotEquals(Float.NaN, qr.getDocList().maxScore());
+ return null;
+ });
+ }
}
public void testMinExactWithFilters() throws Exception {
-
- h.getCore().withSearcher(searcher -> {
- //Sanity Check - No Filter
- QueryCommand cmd = createBasicQueryCommand(1, 1, "field4_t", "0");
- assertMatchesGreaterThan(NUM_DOCS, searcher, cmd);
- return null;
- });
-
-
- h.getCore().withSearcher(searcher -> {
- QueryCommand cmd = createBasicQueryCommand(1, 1, "field4_t", "0");
- Query filterQuery = new TermQuery(new Term("field4_t", "19"));
- cmd.setFilterList(filterQuery);
- assertNull(searcher.getProcessedFilter(null, cmd.getFilterList()).postFilter);
- assertMatchesEqual(1, searcher, cmd);
- return null;
- });
+ try (SolrCore core = h.getCore()) {
+ core.withSearcher(searcher -> {
+ //Sanity Check - No Filter
+ QueryCommand cmd = createBasicQueryCommand(1, 1, "field4_t", "0");
+ assertMatchesGreaterThan(NUM_DOCS, searcher, cmd);
+ return null;
+ });
+
+ core.withSearcher(searcher -> {
+ QueryCommand cmd = createBasicQueryCommand(1, 1, "field4_t", "0");
+ Query filterQuery = new TermQuery(new Term("field4_t", "19"));
+ cmd.setFilterList(filterQuery);
+ assertNull(searcher.getProcessedFilter(null, cmd.getFilterList()).postFilter);
+ assertMatchesEqual(1, searcher, cmd);
+ return null;
+ });
+ }
}
public void testMinExactWithPostFilters() throws Exception {
- h.getCore().withSearcher(searcher -> {
- //Sanity Check - No Filter
- QueryCommand cmd = createBasicQueryCommand(1, 1, "field4_t", "0");
- assertMatchesGreaterThan(NUM_DOCS, searcher, cmd);
- return null;
- });
-
-
- h.getCore().withSearcher(searcher -> {
- QueryCommand cmd = createBasicQueryCommand(1, 1, "field4_t", "0");
- MockPostFilter filterQuery = new MockPostFilter(1, 101);
- cmd.setFilterList(filterQuery);
- assertNotNull(searcher.getProcessedFilter(null, cmd.getFilterList()).postFilter);
- assertMatchesEqual(1, searcher, cmd);
- return null;
- });
-
- h.getCore().withSearcher(searcher -> {
- QueryCommand cmd = createBasicQueryCommand(1, 1, "field4_t", "0");
- MockPostFilter filterQuery = new MockPostFilter(100, 101);
- cmd.setFilterList(filterQuery);
- assertNotNull(searcher.getProcessedFilter(null, cmd.getFilterList()).postFilter);
- assertMatchesGreaterThan(NUM_DOCS, searcher, cmd);
- return null;
- });
+ try (SolrCore core = h.getCore()) {
+ core.withSearcher(searcher -> {
+ //Sanity Check - No Filter
+ QueryCommand cmd = createBasicQueryCommand(1, 1, "field4_t", "0");
+ assertMatchesGreaterThan(NUM_DOCS, searcher, cmd);
+ return null;
+ });
+
+ core.withSearcher(searcher -> {
+ QueryCommand cmd = createBasicQueryCommand(1, 1, "field4_t", "0");
+ MockPostFilter filterQuery = new MockPostFilter(1, 101);
+ cmd.setFilterList(filterQuery);
+ assertNotNull(searcher.getProcessedFilter(null, cmd.getFilterList()).postFilter);
+ assertMatchesEqual(1, searcher, cmd);
+ return null;
+ });
+
+ core.withSearcher(searcher -> {
+ QueryCommand cmd = createBasicQueryCommand(1, 1, "field4_t", "0");
+ MockPostFilter filterQuery = new MockPostFilter(100, 101);
+ cmd.setFilterList(filterQuery);
+ assertNotNull(searcher.getProcessedFilter(null, cmd.getFilterList()).postFilter);
+ assertMatchesGreaterThan(NUM_DOCS, searcher, cmd);
+ return null;
+ });
+ }
}
public void testMinExactWithPostFilterThatChangesScoreMode() throws Exception {
- h.getCore().withSearcher(searcher -> {
- QueryCommand cmd = createBasicQueryCommand(1, 1, "field4_t", "0");
- // Use ScoreMode.COMPLETE for the PostFilter
- MockPostFilter filterQuery = new MockPostFilter(100, 101, ScoreMode.COMPLETE);
- cmd.setFilterList(filterQuery);
- assertNotNull(searcher.getProcessedFilter(null, cmd.getFilterList()).postFilter);
- assertMatchesEqual(NUM_DOCS, searcher, cmd);
- return null;
- });
+ try (SolrCore core = h.getCore()) {
+ core.withSearcher(searcher -> {
+ QueryCommand cmd = createBasicQueryCommand(1, 1, "field4_t", "0");
+ // Use ScoreMode.COMPLETE for the PostFilter
+ MockPostFilter filterQuery = new MockPostFilter(100, 101, ScoreMode.COMPLETE);
+ cmd.setFilterList(filterQuery);
+ assertNotNull(searcher.getProcessedFilter(null, cmd.getFilterList()).postFilter);
+ assertMatchesEqual(NUM_DOCS, searcher, cmd);
+ return null;
+ });
+ }
}
private QueryCommand createBasicQueryCommand(int minExactCount, int length, String field, String q) {
diff --git a/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java b/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
index eb03e64..cc6b421 100644
--- a/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
+++ b/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
@@ -37,6 +37,7 @@ import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.Utils;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.util.SolrPluginUtils;
import org.junit.BeforeClass;
@@ -713,12 +714,11 @@ public class TestExtendedDismaxParser extends SolrTestCaseJ4 {
public void testUfDynamicField() throws Exception {
try {
ignoreException("dynamic field");
-
- SolrException exception = expectThrows(SolrException.class,
- () -> h.query(req("uf", "fl=trait*,id", "defType", "edismax")));
- assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
- assertEquals("dynamic field name must start or end with *",
- exception.getMessage());
+ try (SolrQueryRequest req = req("uf", "fl=trait*,id", "defType", "edismax")) {
+ SolrException exception = expectThrows(SolrException.class, () -> h.query(req));
+ assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
+ assertEquals("dynamic field name must start or end with *", exception.getMessage());
+ }
} finally {
resetExceptionIgnores();
}
@@ -730,26 +730,31 @@ public class TestExtendedDismaxParser extends SolrTestCaseJ4 {
public void testCyclicAliasing() throws Exception {
try {
ignoreException(".*Field aliases lead to a cycle.*");
+ SolrException e;
+ try (SolrQueryRequest req = req("defType","edismax", "q","blarg", "qf","who", "f.who.qf","name","f.name.qf","who")) {
+ e = expectThrows(SolrException.class, "Simple cyclic alising not detected", () -> h.query(req));
+ assertCyclicDetectionErrorMessage(e);
+ }
- SolrException e = expectThrows(SolrException.class, "Simple cyclic alising not detected",
- () -> h.query(req("defType","edismax", "q","blarg", "qf","who", "f.who.qf","name","f.name.qf","who")));
- assertCyclicDetectionErrorMessage(e);
-
- e = expectThrows(SolrException.class, "Cyclic alising not detected",
- () -> h.query(req("defType","edismax", "q","blarg", "qf","who", "f.who.qf","name","f.name.qf","myalias", "f.myalias.qf","who")));
- assertCyclicDetectionErrorMessage(e);
-
- e = expectThrows(SolrException.class, "Cyclic aliasing not detected", () -> h.query(req("defType","edismax", "q","blarg", "qf","field1", "f.field1.qf","field2 field3","f.field2.qf","field4 field5", "f.field4.qf","field5", "f.field5.qf","field6", "f.field3.qf","field6")));
+ try (SolrQueryRequest req = req("defType","edismax", "q","blarg", "qf","who", "f.who.qf","name","f.name.qf","myalias", "f.myalias.qf","who")) {
+ e = expectThrows(SolrException.class, "Cyclic alising not detected", () -> h.query(req));
+ assertCyclicDetectionErrorMessage(e);
+ }
+ try (SolrQueryRequest req = req("defType","edismax", "q","blarg", "qf","field1", "f.field1.qf","field2 field3","f.field2.qf","field4 field5", "f.field4.qf","field5", "f.field5.qf","field6", "f.field3.qf","field6")) {
+ e = expectThrows(SolrException.class, "Cyclic aliasing not detected", () -> h.query(req));
+ }
assertFalse("This is not cyclic aliasing", e.getCause().getMessage().contains("Field aliases lead to a cycle"));
assertTrue("Should throw exception due to invalid field name", e.getCause().getMessage().contains("not a valid field name"));
- e = expectThrows(SolrException.class, "Cyclic alising not detected",
- () -> h.query(req("defType","edismax", "q","blarg", "qf","field1", "f.field1.qf","field2 field3", "f.field2.qf","field4 field5", "f.field4.qf","field5", "f.field5.qf","field4")));
- assertCyclicDetectionErrorMessage(e);
+ try (SolrQueryRequest req = req("defType","edismax", "q","blarg", "qf","field1", "f.field1.qf","field2 field3", "f.field2.qf","field4 field5", "f.field4.qf","field5", "f.field5.qf","field4")) {
+ e = expectThrows(SolrException.class, "Cyclic alising not detected", () -> h.query(req));
+ assertCyclicDetectionErrorMessage(e);
+ }
- e = expectThrows(SolrException.class, "Cyclic alising not detected",
- () -> h.query(req("defType","edismax", "q","who:(Zapp Pig)", "qf","text", "f.who.qf","name","f.name.qf","myalias", "f.myalias.qf","who")));
- assertCyclicDetectionErrorMessage(e);
+ try (SolrQueryRequest req = req("defType","edismax", "q","who:(Zapp Pig)", "qf","text", "f.who.qf","name","f.name.qf","myalias", "f.myalias.qf","who")) {
+ e = expectThrows(SolrException.class, "Cyclic alising not detected", () -> h.query(req));
+ assertCyclicDetectionErrorMessage(e);
+ }
} finally {
resetExceptionIgnores();
}
@@ -1818,8 +1823,10 @@ public class TestExtendedDismaxParser extends SolrTestCaseJ4 {
assertJQ(req("qf","text_sw title", "defType","edismax", "q","+(wi fi)", "sow","false")
, "/response/numFound==1"
);
-
- Map all = (Map) Utils.fromJSONString(h.query(req("q", "*:*", "rows", "0", "wt", "json")));
+ Map all;
+ try (SolrQueryRequest req = req("q", "*:*", "rows", "0", "wt", "json")) {
+ all = (Map) Utils.fromJSONString(h.query(req));
+ }
int totalDocs = Integer.parseInt(((Map)all.get("response")).get("numFound").toString());
int allDocsExceptOne = totalDocs - 1;
@@ -2183,11 +2190,13 @@ public class TestExtendedDismaxParser extends SolrTestCaseJ4 {
/** SOLR-11512 */
@Test
public void killInfiniteRecursionParse() throws Exception {
- SolrException exception = expectThrows(SolrException.class, () -> {
- h.query(req("defType", "edismax", "q", "*", "qq", "{!edismax v=something}", "bq", "{!edismax v=$qq}"));
- });
- assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
- assertTrue(exception.getMessage().contains("Infinite Recursion detected parsing query"));
+ try (SolrQueryRequest req = req("defType", "edismax", "q", "*", "qq", "{!edismax v=something}", "bq", "{!edismax v=$qq}")) {
+ SolrException exception = expectThrows(SolrException.class, () -> {
+ h.query(req);
+ });
+ assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
+ assertTrue(exception.getMessage().contains("Infinite Recursion detected parsing query"));
+ }
}
/** SOLR-5163 */
@@ -2202,16 +2211,18 @@ public class TestExtendedDismaxParser extends SolrTestCaseJ4 {
params.add("debugQuery", "true");
// test valid field names
- String response = h.query(req(params));
- assertTrue(response.contains("+DisjunctionMaxQuery((title:olive | " +
- "(subject:oliv)^3.0)) +DisjunctionMaxQuery((title:other | (subject:other)^3.0))"));
+ try (SolrQueryRequest req = req(params)) {
+ String response = h.query(req);
+ assertTrue(response.contains("+DisjunctionMaxQuery((title:olive | " + "(subject:oliv)^3.0)) +DisjunctionMaxQuery((title:other | (subject:other)^3.0))"));
+ }
// test invalid field name
params.set("qf", "subject^3 nosuchfield");
- SolrException exception = expectThrows(SolrException.class, () -> h.query(req(params)));
- assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
- assertEquals("org.apache.solr.search.SyntaxError: Query Field 'nosuchfield' is not a valid field name",
- exception.getMessage());
+ try (SolrQueryRequest req = req(params)) {
+ SolrException exception = expectThrows(SolrException.class, () -> h.query(req));
+ assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
+ assertEquals("org.apache.solr.search.SyntaxError: Query Field 'nosuchfield' is not a valid field name", exception.getMessage());
+ }
}
}
diff --git a/solr/core/src/test/org/apache/solr/search/TestHashQParserPlugin.java b/solr/core/src/test/org/apache/solr/search/TestHashQParserPlugin.java
index 37586eb..24ab040 100644
--- a/solr/core/src/test/org/apache/solr/search/TestHashQParserPlugin.java
+++ b/solr/core/src/test/org/apache/solr/search/TestHashQParserPlugin.java
@@ -20,6 +20,8 @@ import org.apache.lucene.util.LuceneTestCase;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.core.SolrCore;
+import org.apache.solr.request.SolrQueryRequest;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -64,7 +66,10 @@ public class TestHashQParserPlugin extends SolrTestCaseJ4 {
params.add("fq", "{!hash worker=0 workers=2 cost="+getCost(random())+"}");
params.add("partitionKeys", "a_i,a_s,a_i,a_s");
params.add("wt", "xml");
- String response = h.query(req(params));
+ String response;
+ try (SolrQueryRequest req = req(params)) {
+ response = h.query(req);
+ }
h.validateXPath(solrConfig.getResourceLoader(),response, "//*[@numFound='0']");
params = new ModifiableSolrParams();
@@ -103,7 +108,9 @@ public class TestHashQParserPlugin extends SolrTestCaseJ4 {
params.add("partitionKeys", "a_s");
params.add("wt", "xml");
String response = h.query(req(params));
- h.validateXPath(h.getCore().getResourceLoader(), response, "//*[@numFound='4']");
+ try (SolrCore core = h.getCore()) {
+ h.validateXPath(core.getResourceLoader(), response, "//*[@numFound='4']");
+ }
//Test with int hash
params = new ModifiableSolrParams();
@@ -112,7 +119,9 @@ public class TestHashQParserPlugin extends SolrTestCaseJ4 {
params.add("partitionKeys", "a_i");
params.add("wt", "xml");
response = h.query(req(params));
- h.validateXPath(h.getCore().getResourceLoader(), response, "//*[@numFound='4']");
+ try (SolrCore core = h.getCore()) {
+ h.validateXPath(core.getResourceLoader(), response, "//*[@numFound='4']");
+ }
}
@@ -153,9 +162,11 @@ public class TestHashQParserPlugin extends SolrTestCaseJ4 {
while(it.hasNext()) {
String s = it.next();
- String results = h.validateXPath(h.getCore().getResourceLoader(), response, "*[count(//str[@name='id'][.='"+s+"'])=1]");
- if(results == null) {
- set1.add(s);
+ try (SolrCore core = h.getCore()) {
+ String results = h.validateXPath(core.getResourceLoader(), response, "*[count(//str[@name='id'][.='" + s + "'])=1]");
+ if (results == null) {
+ set1.add(s);
+ }
}
}
@@ -172,9 +183,11 @@ public class TestHashQParserPlugin extends SolrTestCaseJ4 {
while(it.hasNext()) {
String s = it.next();
- String results = h.validateXPath(h.getCore().getResourceLoader(), response, "*[count(//str[@name='id'][.='"+s+"'])=1]");
- if(results == null) {
- set2.add(s);
+ try (SolrCore core = h.getCore()) {
+ String results = h.validateXPath(core.getResourceLoader(), response, "*[count(//str[@name='id'][.='" + s + "'])=1]");
+ if (results == null) {
+ set2.add(s);
+ }
}
}
@@ -186,15 +199,19 @@ public class TestHashQParserPlugin extends SolrTestCaseJ4 {
params.add("rows","50");
params.add("wt", "xml");
HashSet set3 = new HashSet();
- response = h.query(req(params));
+ try (SolrQueryRequest req = req(params)) {
+ response = h.query(req);
+ }
it = set.iterator();
while(it.hasNext()) {
String s = it.next();
- String results = h.validateXPath(h.getCore().getResourceLoader(), response, "*[count(//str[@name='id'][.='"+s+"'])=1]");
- if(results == null) {
- set3.add(s);
+ try (SolrCore core = h.getCore()) {
+ String results = h.validateXPath(core.getResourceLoader(), response, "*[count(//str[@name='id'][.='" + s + "'])=1]");
+ if (results == null) {
+ set3.add(s);
+ }
}
}
@@ -217,15 +234,19 @@ public class TestHashQParserPlugin extends SolrTestCaseJ4 {
params.add("rows","50");
params.add("wt", "xml");
set1 = new HashSet();
- response = h.query(req(params));
+ try (SolrQueryRequest req = req(params)) {
+ response = h.query(req);
+ }
it = set.iterator();
while(it.hasNext()) {
String s = it.next();
- String results = h.validateXPath(h.getCore().getResourceLoader(), response, "*[count(//str[@name='id'][.='"+s+"'])=1]");
- if(results == null) {
- set1.add(s);
+ try (SolrCore core = h.getCore()) {
+ String results = h.validateXPath(core.getResourceLoader(), response, "*[count(//str[@name='id'][.='" + s + "'])=1]");
+ if (results == null) {
+ set1.add(s);
+ }
}
}
@@ -236,15 +257,19 @@ public class TestHashQParserPlugin extends SolrTestCaseJ4 {
params.add("rows","50");
params.add("wt", "xml");
set2 = new HashSet();
- response = h.query(req(params));
+ try (SolrQueryRequest req = req(params)) {
+ response = h.query(req);
+ };
it = set.iterator();
while(it.hasNext()) {
String s = it.next();
- String results = h.validateXPath(h.getCore().getResourceLoader(), response, "*[count(//str[@name='id'][.='"+s+"'])=1]");
- if(results == null) {
- set2.add(s);
+ try (SolrCore core = h.getCore()) {
+ String results = h.validateXPath(core.getResourceLoader(), response, "*[count(//str[@name='id'][.='" + s + "'])=1]");
+ if (results == null) {
+ set2.add(s);
+ }
}
}
@@ -264,15 +289,19 @@ public class TestHashQParserPlugin extends SolrTestCaseJ4 {
params.add("rows","50");
params.add("wt", "xml");
set1 = new HashSet();
- response = h.query(req(params));
+ try (SolrQueryRequest req = req(params)) {
+ response = h.query(req);
+ }
it = set.iterator();
while(it.hasNext()) {
String s = it.next();
- String results = h.validateXPath(h.getCore().getResourceLoader(), response, "*[count(//str[@name='id'][.='"+s+"'])=1]");
- if(results == null) {
- set1.add(s);
+ try (SolrCore core = h.getCore()) {
+ String results = h.validateXPath(core.getResourceLoader(), response, "*[count(//str[@name='id'][.='" + s + "'])=1]");
+ if (results == null) {
+ set1.add(s);
+ }
}
}
@@ -283,15 +312,19 @@ public class TestHashQParserPlugin extends SolrTestCaseJ4 {
params.add("rows","50");
params.add("wt", "xml");
set2 = new HashSet();
- response = h.query(req(params));
+ try (SolrQueryRequest req = req(params)) {
+ response = h.query(req);
+ }
it = set.iterator();
while(it.hasNext()) {
String s = it.next();
- String results = h.validateXPath(h.getCore().getResourceLoader(), response, "*[count(//str[@name='id'][.='"+s+"'])=1]");
- if(results == null) {
- set2.add(s);
+ try (SolrCore core = h.getCore()) {
+ String results = h.validateXPath(core.getResourceLoader(), response, "*[count(//str[@name='id'][.='" + s + "'])=1]");
+ if (results == null) {
+ set2.add(s);
+ }
}
}
diff --git a/solr/core/src/test/org/apache/solr/search/TestMaxScoreQueryParser.java b/solr/core/src/test/org/apache/solr/search/TestMaxScoreQueryParser.java
index 1800ddb..680f22c 100644
--- a/solr/core/src/test/org/apache/solr/search/TestMaxScoreQueryParser.java
+++ b/solr/core/src/test/org/apache/solr/search/TestMaxScoreQueryParser.java
@@ -22,6 +22,7 @@ import org.apache.lucene.search.*;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.request.SolrQueryRequest;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -149,7 +150,9 @@ public class TestMaxScoreQueryParser extends SolrTestCaseJ4 {
while(al.size() >= 2) {
p.add(al.remove(0), al.remove(0));
}
- return new MaxScoreQParser(q, p, new MapSolrParams(Collections.singletonMap("df", "text")), req(q)).parse();
+ try (SolrQueryRequest req = req(q)) {
+ return new MaxScoreQParser(q, p, new MapSolrParams(Collections.singletonMap("df", "text")), req).parse();
+ }
} catch (SyntaxError syntaxError) {
fail("Failed with exception "+syntaxError.getMessage());
}
diff --git a/solr/core/src/test/org/apache/solr/search/TestOverriddenPrefixQueryForCustomFieldType.java b/solr/core/src/test/org/apache/solr/search/TestOverriddenPrefixQueryForCustomFieldType.java
index b26603f7..c80010f 100644
--- a/solr/core/src/test/org/apache/solr/search/TestOverriddenPrefixQueryForCustomFieldType.java
+++ b/solr/core/src/test/org/apache/solr/search/TestOverriddenPrefixQueryForCustomFieldType.java
@@ -22,6 +22,7 @@ import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrRequestInfo;
import org.apache.solr.response.SolrQueryResponse;
+import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -49,6 +50,14 @@ public class TestOverriddenPrefixQueryForCustomFieldType extends SolrTestCaseJ4
// if you override setUp or tearDown, you better call
// the super classes version
super.setUp();
+ }
+
+ @Override
+ @After
+ public void tearDown() throws Exception {
+ // if you override setUp or tearDown, you better call
+ // the super classes version
+ super.tearDown();
clearIndex();
assertU(commit());
otherCounts=0;
diff --git a/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial2.java b/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial2.java
index 43d6f39..dba9aaa 100644
--- a/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial2.java
+++ b/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial2.java
@@ -33,10 +33,13 @@ import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.FacetParams;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.metrics.MetricsMap;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.util.SpatialUtils;
import org.apache.solr.util.TestUtils;
+import org.junit.After;
+import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
@@ -55,14 +58,25 @@ public class TestSolr4Spatial2 extends SolrTestCaseJ4 {
initCore("solrconfig-spatial.xml", "schema-spatial.xml");
}
+ @AfterClass
+ public static void afterTestSolr4Spatial2() throws Exception {
+ deleteCore();
+ }
+
@Override
@Before
public void setUp() throws Exception {
super.setUp();
- clearIndex();
RetrievalCombo.idCounter = 0;
}
+ @Override
+ @After
+ public void tearDown() throws Exception {
+ clearIndex();
+ super.tearDown();
+ }
+
@Test
public void testQuadTreeRobustness() {
assertU(adoc("id", "0", "oslocation", "244502.06 639062.07"));
@@ -160,7 +174,8 @@ public class TestSolr4Spatial2 extends SolrTestCaseJ4 {
public void testLLPDecodeIsStableAndPrecise() throws Exception {
// test that LatLonPointSpatialField decode of docValue will round-trip (re-index then re-decode) to the same value
@SuppressWarnings({"resource", "IOResourceOpenedButNotSafelyClosed"})
- SolrClient client = new EmbeddedSolrServer(h.getCore());// do NOT close it; it will close Solr
+ SolrCore core = h.getCore();
+ SolrClient client = new EmbeddedSolrServer(core);// do NOT close it; it will close Solr
final String fld = "llp_1_dv_dvasst";
String ptOrig = GeoTestUtil.nextLatitude() + "," + GeoTestUtil.nextLongitude();
@@ -189,6 +204,7 @@ public class TestSolr4Spatial2 extends SolrTestCaseJ4 {
// lose the ability to round-trip -- 40 would become 39.99999997 (ugh).
assertTrue("deltaCm too high: " + deltaCentimeters, deltaCentimeters < 1.48);
// Pt(x=105.29894270124083,y=-0.4371673760042398) to Pt(x=105.2989428,y=-0.4371673) is 1.38568
+ core.close();
}
@Test
@@ -289,41 +305,49 @@ public class TestSolr4Spatial2 extends SolrTestCaseJ4 {
// Search to the edge but not quite touching the indexed envelope of id=0. It requires geom validation to
// eliminate id=0. id=1 is found and doesn't require validation. cache=false means no query cache.
- final SolrQueryRequest sameReq = req(
+ SolrQueryRequest sameReq = req(
"q", "{!cache=false field f=" + fieldName + "}Intersects(ENVELOPE(-20, -10.0001, 30, 15.0001))",
"sort", "id asc");
assertJQ(sameReq, "/response/numFound==1", "/response/docs/[0]/id=='1'");
if (testCache) {
// The tricky thing is verifying the cache works correctly...
- MetricsMap cacheMetrics = (MetricsMap) h.getCore().getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.perSegSpatialFieldCache_" + fieldName);
- assertEquals("1", cacheMetrics.getValue().get("cumulative_inserts").toString());
- assertEquals("0", cacheMetrics.getValue().get("cumulative_hits").toString());
-
- // Repeat the query earlier
- assertJQ(sameReq, "/response/numFound==1", "/response/docs/[0]/id=='1'");
- assertEquals("1", cacheMetrics.getValue().get("cumulative_hits").toString());
-
- assertEquals("1 segment",
- 1, getSearcher().getRawReader().leaves().size());
- // Get key of first leaf reader -- this one contains the match for sure.
- Object leafKey1 = getFirstLeafReaderKey();
-
- // add new segment
- assertU(adoc("id", "3"));
-
- assertU(commit()); // sometimes merges (to one seg), sometimes won't
-
- // can still find the same document
- assertJQ(sameReq, "/response/numFound==1", "/response/docs/[0]/id=='1'");
-
- // When there are new segments, we accumulate another hit. This tests the cache was not blown away on commit.
- // (i.e. the cache instance is new but it should've been regenerated from the old one).
- // Checking equality for the first reader's cache key indicates whether the cache should still be valid.
- Object leafKey2 = getFirstLeafReaderKey();
- // get the current instance of metrics - the old one may not represent the current cache instance
- cacheMetrics = (MetricsMap) h.getCore().getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.perSegSpatialFieldCache_" + fieldName);
- assertEquals(leafKey1.equals(leafKey2) ? "2" : "1", cacheMetrics.getValue().get("cumulative_hits").toString());
+ SolrCore core = sameReq.getCore();
+ sameReq = req(
+ "q", "{!cache=false field f=" + fieldName + "}Intersects(ENVELOPE(-20, -10.0001, 30, 15.0001))",
+ "sort", "id asc");
+ MetricsMap cacheMetrics = (MetricsMap) core.getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.perSegSpatialFieldCache_" + fieldName);
+ assertEquals("1", cacheMetrics.getValue().get("cumulative_inserts").toString());
+ assertEquals("0", cacheMetrics.getValue().get("cumulative_hits").toString());
+
+ // Repeat the query earlier
+ assertJQ(sameReq, "/response/numFound==1", "/response/docs/[0]/id=='1'");
+ assertEquals("1", cacheMetrics.getValue().get("cumulative_hits").toString());
+
+ assertEquals("1 segment", 1, getSearcher(core).getRawReader().leaves().size());
+ // Get key of first leaf reader -- this one contains the match for sure.
+ Object leafKey1 = getFirstLeafReaderKey(core);
+
+ // add new segment
+ assertU(adoc("id", "3"));
+
+ assertU(commit()); // sometimes merges (to one seg), sometimes won't
+
+ sameReq = req(
+ "q", "{!cache=false field f=" + fieldName + "}Intersects(ENVELOPE(-20, -10.0001, 30, 15.0001))",
+ "sort", "id asc");
+ // can still find the same document
+ assertJQ(sameReq, "/response/numFound==1", "/response/docs/[0]/id=='1'");
+
+ // When there are new segments, we accumulate another hit. This tests the cache was not blown away on commit.
+ // (i.e. the cache instance is new but it should've been regenerated from the old one).
+ // Checking equality for the first reader's cache key indicates whether the cache should still be valid.
+ Object leafKey2 = getFirstLeafReaderKey(core);
+ // get the current instance of metrics - the old one may not represent the current cache instance
+
+ cacheMetrics = (MetricsMap) core.getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.perSegSpatialFieldCache_" + fieldName);
+ assertEquals(leafKey1.equals(leafKey2) ? "2" : "1", cacheMetrics.getValue().get("cumulative_hits").toString());
+
}
if (testHeatmap) {
@@ -352,14 +376,15 @@ public class TestSolr4Spatial2 extends SolrTestCaseJ4 {
}
}
- protected SolrIndexSearcher getSearcher() {
+ protected SolrIndexSearcher getSearcher(SolrCore core) {
// neat trick; needn't deal with the hassle RefCounted
- return (SolrIndexSearcher) h.getCore().getInfoRegistry().get("searcher");
+
+ return (SolrIndexSearcher) core.getInfoRegistry().get("searcher");
}
- protected Object getFirstLeafReaderKey() {
- return getSearcher().getRawReader().leaves().get(0).reader().getCoreCacheHelper().getKey();
+ protected Object getFirstLeafReaderKey(SolrCore core) {
+ return getSearcher(core).getRawReader().leaves().get(0).reader().getCoreCacheHelper().getKey();
}
@Test// SOLR-8541
diff --git a/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java b/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java
index 09ef399..9c0e43a 100644
--- a/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java
+++ b/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java
@@ -43,6 +43,7 @@ import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.Utils;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.metrics.MetricsMap;
import org.apache.solr.parser.QueryParser;
import org.apache.solr.query.FilterQuery;
@@ -255,13 +256,16 @@ public class TestSolrQueryParser extends SolrTestCaseJ4 {
);
// length of date math caused issues...
+ String expected;
{
- SchemaField foo_dt = h.getCore().getLatestSchema().getField("foo_dt");
- String expected = "foo_dt:2013-09-11T00:00:00Z";
- if (foo_dt.getType().isPointField()) {
- expected = "(foo_dt:[1378857600000 TO 1378857600000])";
- if (foo_dt.hasDocValues() && foo_dt.indexed()) {
- expected = "IndexOrDocValuesQuery"+expected ;
+ try (SolrCore core = h.getCore()) {
+ SchemaField foo_dt = core.getLatestSchema().getField("foo_dt");
+ expected = "foo_dt:2013-09-11T00:00:00Z";
+ if (foo_dt.getType().isPointField()) {
+ expected = "(foo_dt:[1378857600000 TO 1378857600000])";
+ if (foo_dt.hasDocValues() && foo_dt.indexed()) {
+ expected = "IndexOrDocValuesQuery" + expected;
+ }
}
}
assertJQ(req("q", "foo_dt:\"2013-03-08T00:46:15Z/DAY+000MILLISECONDS+00SECONDS+00MINUTES+00HOURS+0000000000YEARS+6MONTHS+3DAYS\"", "debug", "query")
@@ -447,24 +451,23 @@ public class TestSolrQueryParser extends SolrTestCaseJ4 {
@Test
public void testManyClauses_Solr() throws Exception {
final String a = "1 a 2 b 3 c 10 d 11 12 "; // 10 terms
-
+
// this should exceed our solrconfig.xml level (solr specific) maxBooleanClauses limit
// even though it's not long enough to trip the Lucene level (global) limit
final String too_long = "id:(" + a + a + a + a + a + ")";
final String expectedMsg = "Too many clauses";
ignoreException(expectedMsg);
- SolrException e = expectThrows(SolrException.class, "expected SolrException",
- () -> assertJQ(req("q", too_long), "/response/numFound==6"));
+ SolrException e;
+ SolrQueryRequest req = req("q", too_long);
+ e = expectThrows(SolrException.class, "expected SolrException", () -> assertJQ(req, "/response/numFound==6"));
+
assertThat(e.getMessage(), containsString(expectedMsg));
-
+
// but should still work as a filter query since TermsQuery can be used...
- assertJQ(req("q","*:*", "fq", too_long)
- ,"/response/numFound==6");
- assertJQ(req("q","*:*", "fq", too_long, "sow", "false")
- ,"/response/numFound==6");
- assertJQ(req("q","*:*", "fq", too_long, "sow", "true")
- ,"/response/numFound==6");
+ assertJQ(req("q", "*:*", "fq", too_long), "/response/numFound==6");
+ assertJQ(req("q", "*:*", "fq", too_long, "sow", "false"), "/response/numFound==6");
+ assertJQ(req("q", "*:*", "fq", too_long, "sow", "true"), "/response/numFound==6");
}
@Test
@@ -547,15 +550,14 @@ public class TestSolrQueryParser extends SolrTestCaseJ4 {
assertU(adoc("id", "777"));
delI("777");
assertU(commit()); // arg... commit no longer "commits" unless there has been a change.
+ final MetricsMap filterCacheStats;
+ try (SolrCore core = h.getCore()) {
+ filterCacheStats = (MetricsMap) core.getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.filterCache");
+ assertNotNull(filterCacheStats);
+ final MetricsMap queryCacheStats = (MetricsMap) core.getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.queryResultCache");
-
- final MetricsMap filterCacheStats = (MetricsMap)h.getCore().getCoreMetricManager().getRegistry()
- .getMetrics().get("CACHE.searcher.filterCache");
- assertNotNull(filterCacheStats);
- final MetricsMap queryCacheStats = (MetricsMap)h.getCore().getCoreMetricManager().getRegistry()
- .getMetrics().get("CACHE.searcher.queryResultCache");
-
- assertNotNull(queryCacheStats);
+ assertNotNull(queryCacheStats);
+ }
long inserts = (Long) filterCacheStats.getValue().get("inserts");
@@ -1064,95 +1066,43 @@ public class TestSolrQueryParser extends SolrTestCaseJ4 {
assertJQ(req("df", "syn", "q", "+(wi fi)", "sow", "false")
, "/response/numFound==1"
);
+ try (SolrQueryRequest req = req("q", "*:*", "rows", "0", "wt", "json")) {
+ Map all = (Map) Utils.fromJSONString(h.query(req));
+ int totalDocs = Integer.parseInt(((Map) all.get("response")).get("numFound").toString());
+ int allDocsExceptOne = totalDocs - 1;
- Map all = (Map) Utils.fromJSONString(h.query(req("q", "*:*", "rows", "0", "wt", "json")));
- int totalDocs = Integer.parseInt(((Map)all.get("response")).get("numFound").toString());
- int allDocsExceptOne = totalDocs - 1;
-
- assertJQ(req("df", "syn", "q", "-(wi fi)", "sow", "false")
- , "/response/numFound==" + allDocsExceptOne // one doc contains "wifi" in the syn field
- );
- assertJQ(req("df", "syn", "q", "!(wi fi)", "sow", "false")
- , "/response/numFound==" + allDocsExceptOne // one doc contains "wifi" in the syn field
- );
- assertJQ(req("df", "syn", "q", "NOT (wi fi)", "sow", "false")
- , "/response/numFound==" + allDocsExceptOne // one doc contains "wifi" in the syn field
- );
- assertJQ(req("df", "syn", "q", "(wi fi)^2", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "(wi fi)^=2", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "syn:(wi fi)", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "+ATM wi fi", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "-ATM wi fi", "sow", "false")
- , "/response/numFound==0"
- );
- assertJQ(req("df", "syn", "q", "-NotThereAtAll wi fi", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "!ATM wi fi", "sow", "false")
- , "/response/numFound==0"
- );
- assertJQ(req("df", "syn", "q", "!NotThereAtAll wi fi", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "NOT ATM wi fi", "sow", "false")
- , "/response/numFound==0"
- );
- assertJQ(req("df", "syn", "q", "NOT NotThereAtAll wi fi", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "AT* wi fi", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "AT? wi fi", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "\"ATM\" wi fi", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "wi fi +ATM", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "wi fi -ATM", "sow", "false")
- , "/response/numFound==0"
- );
- assertJQ(req("df", "syn", "q", "wi fi -NotThereAtAll", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "wi fi !ATM", "sow", "false")
- , "/response/numFound==0"
- );
- assertJQ(req("df", "syn", "q", "wi fi !NotThereAtAll", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "wi fi NOT ATM", "sow", "false")
- , "/response/numFound==0"
- );
- assertJQ(req("df", "syn", "q", "wi fi NOT NotThereAtAll", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "wi fi AT*", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "wi fi AT?", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "wi fi \"ATM\"", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "\"wi fi\"~2", "sow", "false")
- , "/response/numFound==1"
- );
- assertJQ(req("df", "syn", "q", "syn:\"wi fi\"", "sow", "false")
- , "/response/numFound==1"
- );
+ assertJQ(req("df", "syn", "q", "-(wi fi)", "sow", "false"), "/response/numFound==" + allDocsExceptOne // one doc contains "wifi" in the syn field
+ );
+ assertJQ(req("df", "syn", "q", "!(wi fi)", "sow", "false"), "/response/numFound==" + allDocsExceptOne // one doc contains "wifi" in the syn field
+ );
+ assertJQ(req("df", "syn", "q", "NOT (wi fi)", "sow", "false"), "/response/numFound==" + allDocsExceptOne // one doc contains "wifi" in the syn field
+ );
+ assertJQ(req("df", "syn", "q", "(wi fi)^2", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "(wi fi)^=2", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "syn:(wi fi)", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "+ATM wi fi", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "-ATM wi fi", "sow", "false"), "/response/numFound==0");
+ assertJQ(req("df", "syn", "q", "-NotThereAtAll wi fi", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "!ATM wi fi", "sow", "false"), "/response/numFound==0");
+ assertJQ(req("df", "syn", "q", "!NotThereAtAll wi fi", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "NOT ATM wi fi", "sow", "false"), "/response/numFound==0");
+ assertJQ(req("df", "syn", "q", "NOT NotThereAtAll wi fi", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "AT* wi fi", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "AT? wi fi", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "\"ATM\" wi fi", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "wi fi +ATM", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "wi fi -ATM", "sow", "false"), "/response/numFound==0");
+ assertJQ(req("df", "syn", "q", "wi fi -NotThereAtAll", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "wi fi !ATM", "sow", "false"), "/response/numFound==0");
+ assertJQ(req("df", "syn", "q", "wi fi !NotThereAtAll", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "wi fi NOT ATM", "sow", "false"), "/response/numFound==0");
+ assertJQ(req("df", "syn", "q", "wi fi NOT NotThereAtAll", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "wi fi AT*", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "wi fi AT?", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "wi fi \"ATM\"", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "\"wi fi\"~2", "sow", "false"), "/response/numFound==1");
+ assertJQ(req("df", "syn", "q", "syn:\"wi fi\"", "sow", "false"), "/response/numFound==1");
+ }
}
@Test
@@ -1208,19 +1158,25 @@ public class TestSolrQueryParser extends SolrTestCaseJ4 {
public void testSynonymQueryStyle() throws Exception {
+ Query q;
+ try (SolrQueryRequest req = req(params("df", "t_pick_best_foo"))) {
+ q = QParser.getParser("tabby", req).getQuery();
+ assertEquals("(t_pick_best_foo:tabbi | t_pick_best_foo:cat | t_pick_best_foo:felin | t_pick_best_foo:anim)", q.toString());
+ }
- Query q = QParser.getParser("tabby", req(params("df", "t_pick_best_foo"))).getQuery();
- assertEquals("(t_pick_best_foo:tabbi | t_pick_best_foo:cat | t_pick_best_foo:felin | t_pick_best_foo:anim)", q.toString());
-
- q = QParser.getParser("tabby", req(params("df", "t_as_distinct_foo"))).getQuery();
- assertEquals("t_as_distinct_foo:tabbi t_as_distinct_foo:cat t_as_distinct_foo:felin t_as_distinct_foo:anim", q.toString());
-
+ try (SolrQueryRequest req = req(params("df", "t_as_distinct_foo"))) {
+ q = QParser.getParser("tabby", req).getQuery();
+ assertEquals("t_as_distinct_foo:tabbi t_as_distinct_foo:cat t_as_distinct_foo:felin t_as_distinct_foo:anim", q.toString());
+ }
/*confirm autoGeneratePhraseQueries always builds OR queries*/
- q = QParser.getParser("jeans", req(params("df", "t_as_distinct_foo", "sow", "false"))).getQuery();
- assertEquals("(t_as_distinct_foo:\"denim pant\" t_as_distinct_foo:jean)", q.toString());
-
- q = QParser.getParser("jeans", req(params("df", "t_pick_best_foo", "sow", "false"))).getQuery();
- assertEquals("(t_pick_best_foo:\"denim pant\" | t_pick_best_foo:jean)", q.toString());
+ try (SolrQueryRequest req = req(params("df", "t_as_distinct_foo", "sow", "false"))) {
+ q = QParser.getParser("jeans", req).getQuery();
+ assertEquals("(t_as_distinct_foo:\"denim pant\" t_as_distinct_foo:jean)", q.toString());
+ }
+ try (SolrQueryRequest req = req(params("df", "t_pick_best_foo", "sow", "false"))) {
+ q = QParser.getParser("jeans", req).getQuery();
+ assertEquals("(t_pick_best_foo:\"denim pant\" | t_pick_best_foo:jean)", q.toString());
+ }
}
@AwaitsFix(bugUrl = "nocommit - review difference")
@@ -1472,7 +1428,8 @@ public class TestSolrQueryParser extends SolrTestCaseJ4 {
qParser.setIsFilter(true);
qParser.getQuery();
}
-
+ req.close();
+ req = req();
for (String suffix:fieldSuffix) {
qParser = QParser.getParser("foo_" + suffix + ":(1 2 3 4 5 6 7 8 9 10 20 19 18 17 16 15 14 13 12 NOT_A_NUMBER)", req);
qParser.setIsFilter(true); // this may change in the future
@@ -1481,12 +1438,12 @@ public class TestSolrQueryParser extends SolrTestCaseJ4 {
assertTrue("Unexpected exception: " + e.getMessage(), e.getMessage().contains("Invalid Number: NOT_A_NUMBER"));
}
-
+ req.close();
}
@Test
public void testFieldExistsQueries() throws SyntaxError {
- SolrQueryRequest req = req();
+
String[] fieldSuffix = new String[] {
"ti", "tf", "td", "tl", "tdt",
"pi", "pf", "pd", "pl", "pdt",
@@ -1504,32 +1461,38 @@ public class TestSolrQueryParser extends SolrTestCaseJ4 {
for (String existenceQuery : existenceQueries) {
for (String suffix : fieldSuffix) {
- IndexSchema indexSchema = h.getCore().getLatestSchema();
- String field = "foo_" + suffix;
- String query = field + ":" + existenceQuery;
- QParser qParser = QParser.getParser(query, req);
- Query createdQuery = qParser.getQuery();
- SchemaField schemaField = indexSchema.getField(field);
-
- // Test float & double realNumber queries differently
- if ("[* TO *]".equals(existenceQuery) && (schemaField.getType().getNumberType() == NumberType.DOUBLE || schemaField.getType().getNumberType() == NumberType.FLOAT)) {
- assertFalse("For float and double fields \"" + query + "\" is not an existence query, so the query returned should not be a DocValuesFieldExistsQuery.", createdQuery instanceof DocValuesFieldExistsQuery);
- assertFalse("For float and double fields \"" + query + "\" is not an existence query, so the query returned should not be a NormsFieldExistsQuery.", createdQuery instanceof NormsFieldExistsQuery);
- assertFalse("For float and double fields \"" + query + "\" is not an existence query, so NaN should not be matched via a ConstantScoreQuery.", createdQuery instanceof ConstantScoreQuery);
- assertFalse("For float and double fields\"" + query + "\" is not an existence query, so NaN should not be matched via a BooleanQuery (NaN and [* TO *]).", createdQuery instanceof BooleanQuery);
- } else {
- if (schemaField.hasDocValues()) {
- assertTrue("Field has docValues, so existence query \"" + query + "\" should return DocValuesFieldExistsQuery", createdQuery instanceof DocValuesFieldExistsQuery);
- } else if (!schemaField.omitNorms() && !schemaField.getType().isPointField()) { //TODO: Remove !isPointField() for SOLR-14199
- assertTrue("Field has norms and no docValues, so existence query \"" + query + "\" should return NormsFieldExistsQuery", createdQuery instanceof NormsFieldExistsQuery);
- } else if (schemaField.getType().getNumberType() == NumberType.DOUBLE || schemaField.getType().getNumberType() == NumberType.FLOAT) {
- assertTrue("PointField with NaN values must include \"exists or NaN\" if the field doesn't have norms or docValues: \"" + query + "\".", createdQuery instanceof ConstantScoreQuery);
- assertTrue("PointField with NaN values must include \"exists or NaN\" if the field doesn't have norms or docValues: \"" + query + "\".", ((ConstantScoreQuery)createdQuery).getQuery() instanceof BooleanQuery);
- assertEquals("PointField with NaN values must include \"exists or NaN\" if the field doesn't have norms or docValues: \"" + query + "\". This boolean query must be an OR.", 1, ((BooleanQuery)((ConstantScoreQuery)createdQuery).getQuery()).getMinimumNumberShouldMatch());
- assertEquals("PointField with NaN values must include \"exists or NaN\" if the field doesn't have norms or docValues: \"" + query + "\". This boolean query must have 2 clauses.", 2, ((BooleanQuery)((ConstantScoreQuery)createdQuery).getQuery()).clauses().size());
+ try (SolrCore core = h.getCore()) {
+ IndexSchema indexSchema = core.getLatestSchema();
+ String field = "foo_" + suffix;
+ String query = field + ":" + existenceQuery;
+ SolrQueryRequest req = req();
+ QParser qParser = QParser.getParser(query, req);
+ req.close();
+ Query createdQuery = qParser.getQuery();
+ SchemaField schemaField = indexSchema.getField(field);
+
+ // Test float & double realNumber queries differently
+ if ("[* TO *]".equals(existenceQuery) && (schemaField.getType().getNumberType() == NumberType.DOUBLE || schemaField.getType().getNumberType() == NumberType.FLOAT)) {
+ assertFalse("For float and double fields \"" + query + "\" is not an existence query, so the query returned should not be a DocValuesFieldExistsQuery.", createdQuery instanceof DocValuesFieldExistsQuery);
+ assertFalse("For float and double fields \"" + query + "\" is not an existence query, so the query returned should not be a NormsFieldExistsQuery.", createdQuery instanceof NormsFieldExistsQuery);
+ assertFalse("For float and double fields \"" + query + "\" is not an existence query, so NaN should not be matched via a ConstantScoreQuery.", createdQuery instanceof ConstantScoreQuery);
+ assertFalse("For float and double fields\"" + query + "\" is not an existence query, so NaN should not be matched via a BooleanQuery (NaN and [* TO *]).", createdQuery instanceof BooleanQuery);
} else {
- assertFalse("Field doesn't have docValues, so existence query \"" + query + "\" should not return DocValuesFieldExistsQuery", createdQuery instanceof DocValuesFieldExistsQuery);
- assertFalse("Field doesn't have norms, so existence query \"" + query + "\" should not return NormsFieldExistsQuery", createdQuery instanceof NormsFieldExistsQuery);
+ if (schemaField.hasDocValues()) {
+ assertTrue("Field has docValues, so existence query \"" + query + "\" should return DocValuesFieldExistsQuery", createdQuery instanceof DocValuesFieldExistsQuery);
+ } else if (!schemaField.omitNorms() && !schemaField.getType().isPointField()) { //TODO: Remove !isPointField() for SOLR-14199
+ assertTrue("Field has norms and no docValues, so existence query \"" + query + "\" should return NormsFieldExistsQuery", createdQuery instanceof NormsFieldExistsQuery);
+ } else if (schemaField.getType().getNumberType() == NumberType.DOUBLE || schemaField.getType().getNumberType() == NumberType.FLOAT) {
+ assertTrue("PointField with NaN values must include \"exists or NaN\" if the field doesn't have norms or docValues: \"" + query + "\".", createdQuery instanceof ConstantScoreQuery);
+ assertTrue("PointField with NaN values must include \"exists or NaN\" if the field doesn't have norms or docValues: \"" + query + "\".", ((ConstantScoreQuery) createdQuery).getQuery() instanceof BooleanQuery);
+ assertEquals("PointField with NaN values must include \"exists or NaN\" if the field doesn't have norms or docValues: \"" + query + "\". This boolean query must be an OR.", 1,
+ ((BooleanQuery) ((ConstantScoreQuery) createdQuery).getQuery()).getMinimumNumberShouldMatch());
+ assertEquals("PointField with NaN values must include \"exists or NaN\" if the field doesn't have norms or docValues: \"" + query + "\". This boolean query must have 2 clauses.", 2,
+ ((BooleanQuery) ((ConstantScoreQuery) createdQuery).getQuery()).clauses().size());
+ } else {
+ assertFalse("Field doesn't have docValues, so existence query \"" + query + "\" should not return DocValuesFieldExistsQuery", createdQuery instanceof DocValuesFieldExistsQuery);
+ assertFalse("Field doesn't have norms, so existence query \"" + query + "\" should not return NormsFieldExistsQuery", createdQuery instanceof NormsFieldExistsQuery);
+ }
}
}
}
diff --git a/solr/core/src/test/org/apache/solr/search/TestStressReorder.java b/solr/core/src/test/org/apache/solr/search/TestStressReorder.java
index ea6323b..3923987 100644
--- a/solr/core/src/test/org/apache/solr/search/TestStressReorder.java
+++ b/solr/core/src/test/org/apache/solr/search/TestStressReorder.java
@@ -26,6 +26,7 @@ import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
+import org.apache.solr.common.util.IOUtils;
import org.apache.solr.common.util.Utils;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.util.TestHarness;
@@ -307,14 +308,19 @@ public class TestStressReorder extends TestRTGBase {
if (VERBOSE) {
verbose("querying id", id);
}
- SolrQueryRequest sreq;
- if (realTime) {
- sreq = req("wt","json", "qt","/get", "ids",Integer.toString(id));
- } else {
- sreq = req("wt","json", "q","id:"+Integer.toString(id), "omitHeader","true");
- }
+ String response = null;
+ SolrQueryRequest sreq = null;
+ try {
+ if (realTime) {
+ sreq = req("wt", "json", "qt", "/get", "ids", Integer.toString(id));
+ } else {
+ sreq = req("wt", "json", "q", "id:" + Integer.toString(id), "omitHeader", "true");
+ }
- String response = h.query(sreq);
+ response = h.query(sreq);
+ } finally {
+ IOUtils.closeQuietly(sreq);
+ }
Map rsp = (Map) Utils.fromJSONString(response);
List doclist = (List)(((Map)rsp.get("response")).get("docs"));
if (doclist.size() == 0) {
diff --git a/solr/core/src/test/org/apache/solr/search/TestStressUserVersions.java b/solr/core/src/test/org/apache/solr/search/TestStressUserVersions.java
index ab86cdc..e63e7cf 100644
--- a/solr/core/src/test/org/apache/solr/search/TestStressUserVersions.java
+++ b/solr/core/src/test/org/apache/solr/search/TestStressUserVersions.java
@@ -28,6 +28,7 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
+import org.apache.solr.common.util.IOUtils;
import org.apache.solr.common.util.TimeSource;
import org.apache.solr.common.util.Utils;
import org.apache.solr.request.SolrQueryRequest;
@@ -268,14 +269,19 @@ public class TestStressUserVersions extends TestRTGBase {
if (VERBOSE) {
verbose("querying id", id);
}
- SolrQueryRequest sreq;
- if (realTime) {
- sreq = req("wt","json", "qt","/get", "ids",Integer.toString(id));
- } else {
- sreq = req("wt","json", "q","id:"+Integer.toString(id), "omitHeader","true");
- }
+ SolrQueryRequest sreq = null;
+ String response;
+ try {
+ if (realTime) {
+ sreq = req("wt", "json", "qt", "/get", "ids", Integer.toString(id));
+ } else {
+ sreq = req("wt", "json", "q", "id:" + Integer.toString(id), "omitHeader", "true");
+ }
- String response = h.query(sreq);
+ response = h.query(sreq);
+ } finally {
+ IOUtils.closeQuietly(sreq);
+ }
Map rsp = (Map) Utils.fromJSONString(response);
List doclist = (List)(((Map)rsp.get("response")).get("docs"));
if (doclist.size() == 0) {
diff --git a/solr/core/src/test/org/apache/solr/search/TestStressVersions.java b/solr/core/src/test/org/apache/solr/search/TestStressVersions.java
index d7996d4..6d18c8e 100644
--- a/solr/core/src/test/org/apache/solr/search/TestStressVersions.java
+++ b/solr/core/src/test/org/apache/solr/search/TestStressVersions.java
@@ -25,6 +25,7 @@ import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
+import org.apache.solr.common.util.IOUtils;
import org.apache.solr.common.util.Utils;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.util.TestHarness;
@@ -240,14 +241,19 @@ public class TestStressVersions extends TestRTGBase {
if (VERBOSE) {
verbose("querying id", id);
}
- SolrQueryRequest sreq;
- if (realTime) {
- sreq = req("wt","json", "qt","/get", "ids",Integer.toString(id));
- } else {
- sreq = req("wt","json", "q","id:"+Integer.toString(id), "omitHeader","true");
- }
+ String response = null;
+ SolrQueryRequest sreq = null;
+ try {
+ if (realTime) {
+ sreq = req("wt", "json", "qt", "/get", "ids", Integer.toString(id));
+ } else {
+ sreq = req("wt", "json", "q", "id:" + Integer.toString(id), "omitHeader", "true");
+ }
- String response = h.query(sreq);
+ response = h.query(sreq);
+ } finally {
+ IOUtils.closeQuietly(sreq);
+ }
Map rsp = (Map) Utils.fromJSONString(response);
List doclist = (List)(((Map)rsp.get("response")).get("docs"));
if (doclist.size() == 0) {
diff --git a/solr/core/src/test/org/apache/solr/search/TestValueSourceCache.java b/solr/core/src/test/org/apache/solr/search/TestValueSourceCache.java
index 7056064..3ec33ba 100644
--- a/solr/core/src/test/org/apache/solr/search/TestValueSourceCache.java
+++ b/solr/core/src/test/org/apache/solr/search/TestValueSourceCache.java
@@ -19,6 +19,7 @@ package org.apache.solr.search;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.QueryUtils;
import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.request.SolrQueryRequest;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -29,7 +30,9 @@ public class TestValueSourceCache extends SolrTestCaseJ4 {
@BeforeClass
public static void beforeClass() throws Exception {
initCore("solrconfig.xml", "schema.xml");
- _func = QParser.getParser(null, FunctionQParserPlugin.NAME, lrf.makeRequest());
+ try (SolrQueryRequest req = lrf.makeRequest()) {
+ _func = QParser.getParser(null, FunctionQParserPlugin.NAME, req);
+ }
}
static QParser _func;
diff --git a/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetErrors.java b/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetErrors.java
index d79908e..a694a90 100644
--- a/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetErrors.java
+++ b/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetErrors.java
@@ -21,6 +21,7 @@ import org.apache.solr.JSONTestUtil;
import org.apache.solr.SolrTestCaseHS;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.request.SolrQueryRequest;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -153,104 +154,94 @@ public class TestJsonFacetErrors extends SolrTestCaseHS {
indexSimple(client);
SolrParams params = params("q", "*:*", "rows", "0");
-
+ SolrException ex;
// invalid format for ranges
- SolrException ex = expectThrows(SolrException.class,
- () -> h.query(req(params, "json.facet", "{price:{type :range, field : num_i,start:-10,end:10,gap:2," +
- "ranges:[{key:\"0-200\", to:200}]}}"))
- );
- assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
- assertEquals("Cannot set gap/start/end and ranges params together", ex.getMessage());
+ try (SolrQueryRequest req = req(params, "json.facet", "{price:{type :range, field : num_i,start:-10,end:10,gap:2," +
+ "ranges:[{key:\"0-200\", to:200}]}}")) {
+ ex = expectThrows(SolrException.class, () -> h.query(req));
- ex = expectThrows(SolrException.class,
- () -> h.query(req(params, "json.facet", "{price:{type :range, field : num_i," +
- "ranges:bleh}}"))
- );
+ assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
+ assertEquals("Cannot set gap/start/end and ranges params together", ex.getMessage());
+ }
+
+ try (SolrQueryRequest req = req(params, "json.facet", "{price:{type :range, field : num_i," +
+ "ranges:bleh}}")){
+ ex = expectThrows(SolrException.class, () -> h.query(req));
+ }
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
assertTrue(ex.getMessage().contains("Expected List for ranges but got String"));
- ex = expectThrows(SolrException.class,
- () -> h.query(req(params, "json.facet", "{price:{type :range, field : num_i," +
- "ranges:[bleh]}}"))
- );
+ try (SolrQueryRequest req = req(params, "json.facet", "{price:{type :range, field : num_i," +
+ "ranges:[bleh]}}")) {
+ ex = expectThrows(SolrException.class, () -> h.query(req));
+ }
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
assertTrue(ex.getMessage().contains("Expected Map for range but got String"));
- ex = expectThrows(SolrException.class,
- () -> h.query(req(params, "json.facet", "{price:{type :range, field : num_i," +
- "ranges:[{from:0, to:200, inclusive_to:bleh}]}}"))
- );
+ try (SolrQueryRequest req = req(params, "json.facet", "{price:{type :range, field : num_i," + "ranges:[{from:0, to:200, inclusive_to:bleh}]}}")) {
+ ex = expectThrows(SolrException.class, () -> h.query(req));
+ }
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
assertTrue(ex.getMessage().contains("Expected boolean type for param 'inclusive_to' but got String"));
- ex = expectThrows(SolrException.class,
- () -> h.query(req(params, "json.facet", "{price:{type :range, field : num_i," +
- "ranges:[{from:0, to:200, inclusive_from:bleh}]}}"))
- );
+ try (SolrQueryRequest req = req(params, "json.facet", "{price:{type :range, field : num_i," + "ranges:[{from:0, to:200, inclusive_from:bleh}]}}")) {
+ ex = expectThrows(SolrException.class, () -> h.query(req));
+ }
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
assertTrue(ex.getMessage().contains("Expected boolean type for param 'inclusive_from' but got String"));
- ex = expectThrows(SolrException.class,
- () -> h.query(req(params, "json.facet", "{price:{type :range, field : num_i," +
- "ranges:[{from:bleh, to:200}]}}"))
- );
+ try (SolrQueryRequest req = req(params, "json.facet", "{price:{type :range, field : num_i," + "ranges:[{from:bleh, to:200}]}}")) {
+ ex = expectThrows(SolrException.class, () -> h.query(req));
+ }
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
assertEquals("Can't parse value bleh for field: num_i", ex.getMessage());
- ex = expectThrows(SolrException.class,
- () -> h.query(req(params, "json.facet", "{price:{type :range, field : num_i," +
- "ranges:[{from:0, to:bleh}]}}"))
- );
+ try (SolrQueryRequest req = req(params, "json.facet", "{price:{type :range, field : num_i," + "ranges:[{from:0, to:bleh}]}}")) {
+ ex = expectThrows(SolrException.class, () -> h.query(req));
+ }
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
assertEquals("Can't parse value bleh for field: num_i", ex.getMessage());
- ex = expectThrows(SolrException.class,
- () -> h.query(req(params, "json.facet", "{price:{type :range, field : num_i," +
- "ranges:[{from:200, to:0}]}}"))
- );
+ try (SolrQueryRequest req = req(params, "json.facet", "{price:{type :range, field : num_i," + "ranges:[{from:200, to:0}]}}")) {
+ ex = expectThrows(SolrException.class, () -> h.query(req));
+ }
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
assertEquals("'from' is higher than 'to' in range for key: [200,0)", ex.getMessage());
// with old format
- ex = expectThrows(SolrException.class,
- () -> h.query(req(params, "json.facet", "{price:{type :range, field : num_i," +
- "ranges:[{range:\"\"}]}}"))
- );
+ try (SolrQueryRequest req = req(params, "json.facet", "{price:{type :range, field : num_i," + "ranges:[{range:\"\"}]}}")) {
+ ex = expectThrows(SolrException.class, () -> h.query(req));
+ }
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
assertTrue(ex.getMessage().contains("empty facet range"));
- ex = expectThrows(SolrException.class,
- () -> h.query(req(params, "json.facet", "{price:{type :range, field : num_i," +
- "ranges:[{range:\"bl\"}]}}"))
- );
+ try (SolrQueryRequest req = req(params, "json.facet", "{price:{type :range, field : num_i," + "ranges:[{range:\"bl\"}]}}")) {
+ ex = expectThrows(SolrException.class, () -> h.query(req));
+ }
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
assertTrue(ex.getMessage().contains("Invalid start character b in facet range bl"));
- ex = expectThrows(SolrException.class,
- () -> h.query(req(params, "json.facet", "{price:{type :range, field : num_i," +
- "ranges:[{range:\"(bl\"}]}}"))
- );
+ try (SolrQueryRequest req = req(params, "json.facet", "{price:{type :range, field : num_i," + "ranges:[{range:\"(bl\"}]}}")) {
+ ex = expectThrows(SolrException.class, () -> h.query(req));
+ }
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
assertTrue(ex.getMessage().contains("Invalid end character l in facet range (bl"));
- ex = expectThrows(SolrException.class,
- () -> h.query(req(params, "json.facet", "{price:{type :range, field : num_i," +
- "ranges:[{range:\"(bleh,12)\"}]}}"))
- );
+ try (SolrQueryRequest req = req(params, "json.facet", "{price:{type :range, field : num_i," + "ranges:[{range:\"(bleh,12)\"}]}}")) {
+ ex = expectThrows(SolrException.class, () -> h.query(req));
+ }
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
assertEquals("Can't parse value bleh for field: num_i", ex.getMessage());
- ex = expectThrows(SolrException.class,
- () -> h.query(req(params, "json.facet", "{price:{type :range, field : num_i," +
- "ranges:[{range:\"(12,bleh)\"}]}}"))
- );
+ try (SolrQueryRequest req = req(params, "json.facet", "{price:{type :range, field : num_i," + "ranges:[{range:\"(12,bleh)\"}]}}")) {
+ ex = expectThrows(SolrException.class, () -> h.query(req));
+ }
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
assertEquals("Can't parse value bleh for field: num_i", ex.getMessage());
- ex = expectThrows(SolrException.class,
- () -> h.query(req(params, "json.facet", "{price:{type :range, field : num_i," +
- "ranges:[{range:\"(200,12)\"}]}}"))
- );
+ try (SolrQueryRequest req = req(params, "json.facet", "{price:{type :range, field : num_i," + "ranges:[{range:\"(200,12)\"}]}}")) {
+ ex = expectThrows(SolrException.class, () -> h.query(req));
+ }
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
assertEquals("'start' is higher than 'end' in range for key: (200,12)", ex.getMessage());
}
@@ -367,33 +358,38 @@ public class TestJsonFacetErrors extends SolrTestCaseHS {
public void testAggErrors() {
ignoreException("aggregation");
- SolrException e = expectThrows(SolrException.class, () -> {
- h.query(req("q", "*:*", "json.facet", "{bleh:'div(2,4)'}"));
- });
- assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
- assertThat(e.getMessage(),
- containsString("Expected multi-doc aggregation from 'div' but got per-doc function in input ('div(2,4)"));
-
- e = expectThrows(SolrException.class, () -> {
- h.query(req("q", "*:*", "json.facet", "{b:'agg(div(2,4))'}"));
- });
- assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
- assertThat(e.getMessage(),
- containsString("Expected multi-doc aggregation from 'div' but got per-doc function in input ('agg(div(2,4))"));
-
- e = expectThrows(SolrException.class, () -> {
- h.query(req("q", "*:*", "json.facet", "{b:'agg(bleh(2,4))'}"));
- });
- assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
- assertThat(e.getMessage(),
- containsString("Unknown aggregation 'bleh' in input ('agg(bleh(2,4))"));
-
- e = expectThrows(SolrException.class, () -> {
- h.query(req("q", "*:*", "json.facet", "{b:'bleh(2,4)'}"));
- });
- assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
- assertThat(e.getMessage(),
- containsString("Unknown aggregation 'bleh' in input ('bleh(2,4)"));
+ SolrException e;
+ try (SolrQueryRequest req = req("q", "*:*", "json.facet", "{bleh:'div(2,4)'}")) {
+ e = expectThrows(SolrException.class, () -> {
+ h.query(req);
+ });
+ assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
+ assertThat(e.getMessage(), containsString("Expected multi-doc aggregation from 'div' but got per-doc function in input ('div(2,4)"));
+ }
+
+ try (SolrQueryRequest req = req("q", "*:*", "json.facet", "{b:'agg(div(2,4))'}")) {
+ e = expectThrows(SolrException.class, () -> {
+ h.query(req);
+ });
+ assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
+ assertThat(e.getMessage(), containsString("Expected multi-doc aggregation from 'div' but got per-doc function in input ('agg(div(2,4))"));
+ }
+
+ try (SolrQueryRequest req = req("q", "*:*", "json.facet", "{b:'agg(bleh(2,4))'}")) {
+ e = expectThrows(SolrException.class, () -> {
+ h.query(req);
+ });
+ assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
+ assertThat(e.getMessage(), containsString("Unknown aggregation 'bleh' in input ('agg(bleh(2,4))"));
+ }
+
+ try (SolrQueryRequest req = req("q", "*:*", "json.facet", "{b:'bleh(2,4)'}")) {
+ e = expectThrows(SolrException.class, () -> {
+ h.query(req);
+ });
+ assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, e.code());
+ assertThat(e.getMessage(), containsString("Unknown aggregation 'bleh' in input ('bleh(2,4)"));
+ }
resetExceptionIgnores();
}
diff --git a/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java b/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java
index 889c383..50dfedc 100644
--- a/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java
+++ b/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java
@@ -30,6 +30,8 @@ import org.apache.lucene.search.similarities.TFIDFSimilarity;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
+import org.apache.solr.core.SolrCore;
+import org.apache.solr.request.SolrQueryRequest;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -49,13 +51,15 @@ public class TestFunctionQuery extends SolrTestCaseJ4 {
static long start = System.nanoTime();
void makeExternalFile(String field, String contents) {
- String dir = h.getCore().getDataDir();
- String filename = dir + "/external_" + field + "." + (start++);
-
- try (Writer out = new OutputStreamWriter(new FileOutputStream(filename), StandardCharsets.UTF_8)) {
- out.write(contents);
- } catch (Exception e) {
- throw new RuntimeException(e);
+ try (SolrCore core = h.getCore()) {
+ String dir = core.getDataDir();
+ String filename = dir + "/external_" + field + "." + (start++);
+
+ try (Writer out = new OutputStreamWriter(new FileOutputStream(filename), StandardCharsets.UTF_8)) {
+ out.write(contents);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
}
}
@@ -230,7 +234,9 @@ public class TestFunctionQuery extends SolrTestCaseJ4 {
assertTrue(orig == FileFloatSource.onlyForTesting);
makeExternalFile(field, "0=1");
- assertU(h.query("/reloadCache",lrf.makeRequest("","")));
+ try (SolrQueryRequest req = lrf.makeRequest("","")) {
+ assertU(h.query("/reloadCache", req));
+ }
singleTest(field, "sqrt(\0)");
assertTrue(orig != FileFloatSource.onlyForTesting);
@@ -266,7 +272,9 @@ public class TestFunctionQuery extends SolrTestCaseJ4 {
makeExternalFile(field, sb.toString());
// make it visible
- assertU(h.query("/reloadCache",lrf.makeRequest("","")));
+ try (SolrQueryRequest req = lrf.makeRequest("","")) {
+ assertU(h.query("/reloadCache", req));
+ }
// test it
float[] answers = new float[ids.length*2];
@@ -481,11 +489,12 @@ public class TestFunctionQuery extends SolrTestCaseJ4 {
TFIDFSimilarity similarity = null;
{
- Similarity sim = h.getCore().getLatestSchema().getFieldType("a_tfidf").getSimilarity();
- assertNotNull("Test needs *_tfidf to use a TFIDFSimilarity ... who broke the config?", sim);
- assertTrue("Test needs *_tfidf to use a TFIDFSimilarity ... who broke the config: " + sim.getClass(),
- sim instanceof TFIDFSimilarity);
- similarity = (TFIDFSimilarity) sim;
+ try (SolrCore core = h.getCore()) {
+ Similarity sim = core.getLatestSchema().getFieldType("a_tfidf").getSimilarity();
+ assertNotNull("Test needs *_tfidf to use a TFIDFSimilarity ... who broke the config?", sim);
+ assertTrue("Test needs *_tfidf to use a TFIDFSimilarity ... who broke the config: " + sim.getClass(), sim instanceof TFIDFSimilarity);
+ similarity = (TFIDFSimilarity) sim;
+ }
}
assertU(adoc("id","1", "a_tdt","2009-08-31T12:10:10.123Z", "b_tdt","2009-08-31T12:10:10.124Z"));
diff --git a/solr/core/src/test/org/apache/solr/servlet/SolrRequestParserTest.java b/solr/core/src/test/org/apache/solr/servlet/SolrRequestParserTest.java
index bc2aa19..5aeedfa 100644
--- a/solr/core/src/test/org/apache/solr/servlet/SolrRequestParserTest.java
+++ b/solr/core/src/test/org/apache/solr/servlet/SolrRequestParserTest.java
@@ -66,7 +66,9 @@ public class SolrRequestParserTest extends SolrTestCaseJ4 {
public static void beforeClass() throws Exception {
assumeWorkingMockito();
initCore("solrconfig.xml", "schema.xml");
- parser = new SolrRequestParsers( h.getCore().getSolrConfig() );
+ try (SolrCore core = h.getCore()) {
+ parser = new SolrRequestParsers(core.getSolrConfig());
+ }
}
static SolrRequestParsers parser;
@@ -82,47 +84,48 @@ public class SolrRequestParserTest extends SolrTestCaseJ4 {
String body1 = "AMANAPLANPANAMA";
String body2 = "qwertasdfgzxcvb";
String body3 = "1234567890";
-
- SolrCore core = h.getCore();
-
- Map<String,String[]> args = new HashMap<>();
- args.put( CommonParams.STREAM_BODY, new String[] {body1} );
-
- // Make sure it got a single stream in and out ok
- List<ContentStream> streams = new ArrayList<>();
- SolrQueryRequest req = parser.buildRequestFrom( core, new MultiMapSolrParams( args ), streams );
- assertEquals( 1, streams.size() );
- assertEquals( body1, IOUtils.toString( streams.get(0).getReader() ) );
- req.close();
-
- // Now add three and make sure they come out ok
- streams = new ArrayList<>();
- args.put( CommonParams.STREAM_BODY, new String[] {body1,body2,body3} );
- req = parser.buildRequestFrom( core, new MultiMapSolrParams( args ), streams );
- assertEquals( 3, streams.size() );
- ArrayList<String> input = new ArrayList<>();
- ArrayList<String> output = new ArrayList<>();
- input.add( body1 );
- input.add( body2 );
- input.add( body3 );
- output.add( IOUtils.toString( streams.get(0).getReader() ) );
- output.add( IOUtils.toString( streams.get(1).getReader() ) );
- output.add( IOUtils.toString( streams.get(2).getReader() ) );
- // sort them so the output is consistent
- Collections.sort( input );
- Collections.sort( output );
- assertEquals( input.toString(), output.toString() );
- req.close();
-
- // set the contentType and make sure tat gets set
- String ctype = "text/xxx";
- streams = new ArrayList<>();
- args.put( CommonParams.STREAM_CONTENTTYPE, new String[] {ctype} );
- req = parser.buildRequestFrom( core, new MultiMapSolrParams( args ), streams );
- for( ContentStream s : streams ) {
- assertEquals( ctype, s.getContentType() );
+
+ try (SolrCore core = h.getCore()) {
+
+ Map<String,String[]> args = new HashMap<>();
+ args.put(CommonParams.STREAM_BODY, new String[] {body1});
+
+ // Make sure it got a single stream in and out ok
+ List<ContentStream> streams = new ArrayList<>();
+ SolrQueryRequest req = parser.buildRequestFrom(core, new MultiMapSolrParams(args), streams);
+ assertEquals(1, streams.size());
+ assertEquals(body1, IOUtils.toString(streams.get(0).getReader()));
+ req.close();
+
+ // Now add three and make sure they come out ok
+ streams = new ArrayList<>();
+ args.put(CommonParams.STREAM_BODY, new String[] {body1, body2, body3});
+ req = parser.buildRequestFrom(core, new MultiMapSolrParams(args), streams);
+ assertEquals(3, streams.size());
+ ArrayList<String> input = new ArrayList<>();
+ ArrayList<String> output = new ArrayList<>();
+ input.add(body1);
+ input.add(body2);
+ input.add(body3);
+ output.add(IOUtils.toString(streams.get(0).getReader()));
+ output.add(IOUtils.toString(streams.get(1).getReader()));
+ output.add(IOUtils.toString(streams.get(2).getReader()));
+ // sort them so the output is consistent
+ Collections.sort(input);
+ Collections.sort(output);
+ assertEquals(input.toString(), output.toString());
+ req.close();
+
+ // set the contentType and make sure tat gets set
+ String ctype = "text/xxx";
+ streams = new ArrayList<>();
+ args.put(CommonParams.STREAM_CONTENTTYPE, new String[] {ctype});
+ req = parser.buildRequestFrom(core, new MultiMapSolrParams(args), streams);
+ for (ContentStream s : streams) {
+ assertEquals(ctype, s.getContentType());
+ }
+ req.close();
}
- req.close();
}
@Test
@@ -133,17 +136,18 @@ public class SolrRequestParserTest extends SolrTestCaseJ4 {
byte[] bytes = IOUtils.toByteArray(url);
- SolrCore core = h.getCore();
-
- Map<String,String[]> args = new HashMap<>();
- args.put( CommonParams.STREAM_URL, new String[] { url.toExternalForm() } );
-
- // Make sure it got a single stream in and out ok
- List<ContentStream> streams = new ArrayList<>();
- try (SolrQueryRequest req = parser.buildRequestFrom( core, new MultiMapSolrParams( args ), streams )) {
- assertEquals( 1, streams.size() );
- try (InputStream in = streams.get(0).getStream()) {
- assertArrayEquals( bytes, IOUtils.toByteArray( in ) );
+ try (SolrCore core = h.getCore()) {
+
+ Map<String,String[]> args = new HashMap<>();
+ args.put(CommonParams.STREAM_URL, new String[] {url.toExternalForm()});
+
+ // Make sure it got a single stream in and out ok
+ List<ContentStream> streams = new ArrayList<>();
+ try (SolrQueryRequest req = parser.buildRequestFrom(core, new MultiMapSolrParams(args), streams)) {
+ assertEquals(1, streams.size());
+ try (InputStream in = streams.get(0).getStream()) {
+ assertArrayEquals(bytes, IOUtils.toByteArray(in));
+ }
}
}
}
@@ -155,17 +159,18 @@ public class SolrRequestParserTest extends SolrTestCaseJ4 {
byte[] bytes = FileUtils.readFileToByteArray(file);
- SolrCore core = h.getCore();
-
- Map<String,String[]> args = new HashMap<>();
- args.put( CommonParams.STREAM_FILE, new String[] { file.getAbsolutePath() } );
-
- // Make sure it got a single stream in and out ok
- List<ContentStream> streams = new ArrayList<>();
- try (SolrQueryRequest req = parser.buildRequestFrom( core, new MultiMapSolrParams( args ), streams )) {
- assertEquals( 1, streams.size() );
- try (InputStream in = streams.get(0).getStream()) {
- assertArrayEquals( bytes, IOUtils.toByteArray( in ) );
+ try (SolrCore core = h.getCore()) {
+
+ Map<String,String[]> args = new HashMap<>();
+ args.put(CommonParams.STREAM_FILE, new String[] {file.getAbsolutePath()});
+
+ // Make sure it got a single stream in and out ok
+ List<ContentStream> streams = new ArrayList<>();
+ try (SolrQueryRequest req = parser.buildRequestFrom(core, new MultiMapSolrParams(args), streams)) {
+ assertEquals(1, streams.size());
+ try (InputStream in = streams.get(0).getStream()) {
+ assertArrayEquals(bytes, IOUtils.toByteArray(in));
+ }
}
}
}
@@ -396,29 +401,30 @@ public class SolrRequestParserTest extends SolrTestCaseJ4 {
v.add(entry.getValue());
when(request.getHeaders(entry.getKey())).thenReturn(v.elements());
}
-
- SolrRequestParsers parsers = new SolrRequestParsers(h.getCore().getSolrConfig());
- assertFalse(parsers.isAddRequestHeadersToContext());
- SolrQueryRequest solrReq = parsers.parse(h.getCore(), "/select", request);
- assertFalse(solrReq.getContext().containsKey("httpRequest"));
-
- parsers.setAddRequestHeadersToContext(true);
- solrReq = parsers.parse(h.getCore(), "/select", request);
- assertEquals(request, solrReq.getContext().get("httpRequest"));
- assertEquals("10.0.0.1", ((HttpServletRequest)solrReq.getContext().get("httpRequest")).getHeaders("X-Forwarded-For").nextElement());
-
+ try (SolrCore core = h.getCore()) {
+ SolrRequestParsers parsers = new SolrRequestParsers(core.getSolrConfig());
+ assertFalse(parsers.isAddRequestHeadersToContext());
+ SolrQueryRequest solrReq = parsers.parse(core, "/select", request);
+ assertFalse(solrReq.getContext().containsKey("httpRequest"));
+
+ parsers.setAddRequestHeadersToContext(true);
+ solrReq = parsers.parse(core, "/select", request);
+ assertEquals(request, solrReq.getContext().get("httpRequest"));
+ assertEquals("10.0.0.1", ((HttpServletRequest) solrReq.getContext().get("httpRequest")).getHeaders("X-Forwarded-For").nextElement());
+ }
}
public void testPostMissingContentType() throws Exception {
HttpServletRequest request = getMock();
when(request.getMethod()).thenReturn("POST");
-
- SolrRequestParsers parsers = new SolrRequestParsers(h.getCore().getSolrConfig());
- try {
- parsers.parse(h.getCore(), "/select", request);
- } catch (SolrException e) {
- log.error("should not throw SolrException", e);
- fail("should not throw SolrException");
+ try (SolrCore core = h.getCore()) {
+ SolrRequestParsers parsers = new SolrRequestParsers(core.getSolrConfig());
+ try {
+ parsers.parse(core, "/select", request);
+ } catch (SolrException e) {
+ log.error("should not throw SolrException", e);
+ fail("should not throw SolrException");
+ }
}
}
@@ -455,29 +461,30 @@ public class SolrRequestParserTest extends SolrTestCaseJ4 {
// we dont pass a content-length to let the security mechanism limit it:
when(request.getQueryString()).thenReturn("foo=1&bar=2");
when(request.getInputStream()).thenReturn(new ByteServletInputStream(body.getBytes(StandardCharsets.US_ASCII)));
-
- SolrRequestParsers parsers = new SolrRequestParsers(h.getCore().getSolrConfig());
- SolrQueryRequest req = parsers.parse(h.getCore(), "/select", request);
- int num=0;
- if (expectedContentType != null) {
- for (ContentStream cs : req.getContentStreams()) {
- num++;
- assertTrue(cs.getContentType().startsWith(expectedContentType));
- String returnedBody = IOUtils.toString(cs.getReader());
- assertEquals(body, returnedBody);
+ try (SolrCore core = h.getCore()) {
+ SolrRequestParsers parsers = new SolrRequestParsers(core.getSolrConfig());
+ SolrQueryRequest req = parsers.parse(core, "/select", request);
+ int num = 0;
+ if (expectedContentType != null) {
+ for (ContentStream cs : req.getContentStreams()) {
+ num++;
+ assertTrue(cs.getContentType().startsWith(expectedContentType));
+ String returnedBody = IOUtils.toString(cs.getReader());
+ assertEquals(body, returnedBody);
+ }
+ assertEquals(1, num);
}
- assertEquals(1, num);
- }
- assertEquals("1", req.getParams().get("foo"));
- assertEquals("2", req.getParams().get("bar"));
+ assertEquals("1", req.getParams().get("foo"));
+ assertEquals("2", req.getParams().get("bar"));
- if (expectedKey != null) {
- assertEquals(expectedValue, req.getParams().get(expectedKey));
- }
+ if (expectedKey != null) {
+ assertEquals(expectedValue, req.getParams().get(expectedKey));
+ }
- req.close();
- verify(request).getInputStream();
+ req.close();
+ verify(request).getInputStream();
+ }
}
diff --git a/solr/core/src/test/org/apache/solr/spelling/IndexBasedSpellCheckerTest.java b/solr/core/src/test/org/apache/solr/spelling/IndexBasedSpellCheckerTest.java
index e7afcff..ae99c4a 100644
--- a/solr/core/src/test/org/apache/solr/spelling/IndexBasedSpellCheckerTest.java
+++ b/solr/core/src/test/org/apache/solr/spelling/IndexBasedSpellCheckerTest.java
@@ -84,23 +84,23 @@ public class IndexBasedSpellCheckerTest extends SolrTestCaseJ4 {
@Test
public void testComparator() throws Exception {
- SpellCheckComponent component = (SpellCheckComponent) h.getCore().getSearchComponent("spellcheck");
- assertNotNull(component);
- AbstractLuceneSpellChecker spellChecker;
- Comparator<SuggestWord> comp;
- spellChecker = (AbstractLuceneSpellChecker) component.getSpellChecker("freq");
- assertNotNull(spellChecker);
- comp = spellChecker.getSpellChecker().getComparator();
- assertNotNull(comp);
- assertTrue(comp instanceof SuggestWordFrequencyComparator);
-
- spellChecker = (AbstractLuceneSpellChecker) component.getSpellChecker("fqcn");
- assertNotNull(spellChecker);
- comp = spellChecker.getSpellChecker().getComparator();
- assertNotNull(comp);
- assertTrue(comp instanceof SampleComparator);
-
-
+ try (SolrCore core = h.getCore()) {
+ SpellCheckComponent component = (SpellCheckComponent) core.getSearchComponent("spellcheck");
+ assertNotNull(component);
+ AbstractLuceneSpellChecker spellChecker;
+ Comparator<SuggestWord> comp;
+ spellChecker = (AbstractLuceneSpellChecker) component.getSpellChecker("freq");
+ assertNotNull(spellChecker);
+ comp = spellChecker.getSpellChecker().getComparator();
+ assertNotNull(comp);
+ assertTrue(comp instanceof SuggestWordFrequencyComparator);
+
+ spellChecker = (AbstractLuceneSpellChecker) component.getSpellChecker("fqcn");
+ assertNotNull(spellChecker);
+ comp = spellChecker.getSpellChecker().getComparator();
+ assertNotNull(comp);
+ assertTrue(comp instanceof SampleComparator);
+ }
}
@Test
@@ -115,66 +115,66 @@ public class IndexBasedSpellCheckerTest extends SolrTestCaseJ4 {
spellchecker.add(AbstractLuceneSpellChecker.INDEX_DIR, indexDir.getAbsolutePath());
spellchecker.add(AbstractLuceneSpellChecker.FIELD, "title");
spellchecker.add(AbstractLuceneSpellChecker.SPELLCHECKER_ARG_NAME, spellchecker);
- SolrCore core = h.getCore();
-
- String dictName = checker.init(spellchecker, core);
- assertTrue(dictName + " is not equal to " + SolrSpellChecker.DEFAULT_DICTIONARY_NAME,
- dictName.equals(SolrSpellChecker.DEFAULT_DICTIONARY_NAME) == true);
- h.getCore().withSearcher(searcher -> {
- checker.build(core, searcher);
-
- IndexReader reader = searcher.getIndexReader();
- Collection<Token> tokens = queryConverter.convert("documemt");
- SpellingOptions spellOpts = new SpellingOptions(tokens, reader);
- SpellingResult result = checker.getSuggestions(spellOpts);
- assertTrue("result is null and it shouldn't be", result != null);
- //should be lowercased, b/c we are using a lowercasing analyzer
- Map<String, Integer> suggestions = result.get(spellOpts.tokens.iterator().next());
- assertTrue("documemt is null and it shouldn't be", suggestions != null);
- assertTrue("documemt Size: " + suggestions.size() + " is not: " + 1, suggestions.size() == 1);
- Map.Entry<String, Integer> entry = suggestions.entrySet().iterator().next();
- assertTrue(entry.getKey() + " is not equal to " + "document", entry.getKey().equals("document") == true);
- assertTrue(entry.getValue() + " does not equal: " + SpellingResult.NO_FREQUENCY_INFO, entry.getValue() == SpellingResult.NO_FREQUENCY_INFO);
-
- //test something not in the spell checker
- spellOpts.tokens = queryConverter.convert("super");
- result = checker.getSuggestions(spellOpts);
- assertTrue("result is null and it shouldn't be", result != null);
- suggestions = result.get(spellOpts.tokens.iterator().next());
- assertTrue("suggestions size should be 0", suggestions.size()==0);
-
- //test something that is spelled correctly
- spellOpts.tokens = queryConverter.convert("document");
- result = checker.getSuggestions(spellOpts);
- assertTrue("result is null and it shouldn't be", result != null);
- suggestions = result.get(spellOpts.tokens.iterator().next());
- assertTrue("suggestions is null and it shouldn't be", suggestions == null);
-
- //Has multiple possibilities, but the exact exists, so that should be returned
- spellOpts.tokens = queryConverter.convert("red");
- spellOpts.count = 2;
- result = checker.getSuggestions(spellOpts);
- assertNotNull(result);
- suggestions = result.get(spellOpts.tokens.iterator().next());
- assertTrue("suggestions is not null and it should be", suggestions == null);
-
- //Try out something which should have multiple suggestions
- spellOpts.tokens = queryConverter.convert("bug");
- result = checker.getSuggestions(spellOpts);
- assertNotNull(result);
- suggestions = result.get(spellOpts.tokens.iterator().next());
- assertNotNull(suggestions);
- assertTrue("suggestions Size: " + suggestions.size() + " is not: " + 2, suggestions.size() == 2);
-
- entry = suggestions.entrySet().iterator().next();
- assertTrue(entry.getKey() + " is equal to " + "bug and it shouldn't be", entry.getKey().equals("bug") == false);
- assertTrue(entry.getValue() + " does not equal: " + SpellingResult.NO_FREQUENCY_INFO, entry.getValue() == SpellingResult.NO_FREQUENCY_INFO);
-
- entry = suggestions.entrySet().iterator().next();
- assertTrue(entry.getKey() + " is equal to " + "bug and it shouldn't be", entry.getKey().equals("bug") == false);
- assertTrue(entry.getValue() + " does not equal: " + SpellingResult.NO_FREQUENCY_INFO, entry.getValue() == SpellingResult.NO_FREQUENCY_INFO);
- return null;
- });
+ try (SolrCore core = h.getCore()) {
+
+ String dictName = checker.init(spellchecker, core);
+ assertTrue(dictName + " is not equal to " + SolrSpellChecker.DEFAULT_DICTIONARY_NAME, dictName.equals(SolrSpellChecker.DEFAULT_DICTIONARY_NAME) == true);
+ core.withSearcher(searcher -> {
+ checker.build(core, searcher);
+
+ IndexReader reader = searcher.getIndexReader();
+ Collection<Token> tokens = queryConverter.convert("documemt");
+ SpellingOptions spellOpts = new SpellingOptions(tokens, reader);
+ SpellingResult result = checker.getSuggestions(spellOpts);
+ assertTrue("result is null and it shouldn't be", result != null);
+ //should be lowercased, b/c we are using a lowercasing analyzer
+ Map<String,Integer> suggestions = result.get(spellOpts.tokens.iterator().next());
+ assertTrue("documemt is null and it shouldn't be", suggestions != null);
+ assertTrue("documemt Size: " + suggestions.size() + " is not: " + 1, suggestions.size() == 1);
+ Map.Entry<String,Integer> entry = suggestions.entrySet().iterator().next();
+ assertTrue(entry.getKey() + " is not equal to " + "document", entry.getKey().equals("document") == true);
+ assertTrue(entry.getValue() + " does not equal: " + SpellingResult.NO_FREQUENCY_INFO, entry.getValue() == SpellingResult.NO_FREQUENCY_INFO);
+
+ //test something not in the spell checker
+ spellOpts.tokens = queryConverter.convert("super");
+ result = checker.getSuggestions(spellOpts);
+ assertTrue("result is null and it shouldn't be", result != null);
+ suggestions = result.get(spellOpts.tokens.iterator().next());
+ assertTrue("suggestions size should be 0", suggestions.size() == 0);
+
+ //test something that is spelled correctly
+ spellOpts.tokens = queryConverter.convert("document");
+ result = checker.getSuggestions(spellOpts);
+ assertTrue("result is null and it shouldn't be", result != null);
+ suggestions = result.get(spellOpts.tokens.iterator().next());
+ assertTrue("suggestions is null and it shouldn't be", suggestions == null);
+
+ //Has multiple possibilities, but the exact exists, so that should be returned
+ spellOpts.tokens = queryConverter.convert("red");
+ spellOpts.count = 2;
+ result = checker.getSuggestions(spellOpts);
+ assertNotNull(result);
+ suggestions = result.get(spellOpts.tokens.iterator().next());
+ assertTrue("suggestions is not null and it should be", suggestions == null);
+
+ //Try out something which should have multiple suggestions
+ spellOpts.tokens = queryConverter.convert("bug");
+ result = checker.getSuggestions(spellOpts);
+ assertNotNull(result);
+ suggestions = result.get(spellOpts.tokens.iterator().next());
+ assertNotNull(suggestions);
+ assertTrue("suggestions Size: " + suggestions.size() + " is not: " + 2, suggestions.size() == 2);
+
+ entry = suggestions.entrySet().iterator().next();
+ assertTrue(entry.getKey() + " is equal to " + "bug and it shouldn't be", entry.getKey().equals("bug") == false);
+ assertTrue(entry.getValue() + " does not equal: " + SpellingResult.NO_FREQUENCY_INFO, entry.getValue() == SpellingResult.NO_FREQUENCY_INFO);
+
+ entry = suggestions.entrySet().iterator().next();
+ assertTrue(entry.getKey() + " is equal to " + "bug and it shouldn't be", entry.getKey().equals("bug") == false);
+ assertTrue(entry.getValue() + " does not equal: " + SpellingResult.NO_FREQUENCY_INFO, entry.getValue() == SpellingResult.NO_FREQUENCY_INFO);
+ return null;
+ });
+ }
}
@Test
@@ -188,40 +188,40 @@ public class IndexBasedSpellCheckerTest extends SolrTestCaseJ4 {
spellchecker.add(AbstractLuceneSpellChecker.INDEX_DIR, indexDir.getAbsolutePath());
spellchecker.add(AbstractLuceneSpellChecker.FIELD, "title");
spellchecker.add(AbstractLuceneSpellChecker.SPELLCHECKER_ARG_NAME, spellchecker);
- SolrCore core = h.getCore();
- String dictName = checker.init(spellchecker, core);
- assertTrue(dictName + " is not equal to " + SolrSpellChecker.DEFAULT_DICTIONARY_NAME,
- dictName.equals(SolrSpellChecker.DEFAULT_DICTIONARY_NAME) == true);
- h.getCore().withSearcher(searcher -> {
- checker.build(core, searcher);
-
- IndexReader reader = searcher.getIndexReader();
- Collection<Token> tokens = queryConverter.convert("documemt");
- SpellingOptions spellOpts = new SpellingOptions(tokens, reader, 1, SuggestMode.SUGGEST_WHEN_NOT_IN_INDEX, true, 0.5f, null);
- SpellingResult result = checker.getSuggestions(spellOpts);
- assertTrue("result is null and it shouldn't be", result != null);
- //should be lowercased, b/c we are using a lowercasing analyzer
- Map<String, Integer> suggestions = result.get(spellOpts.tokens.iterator().next());
- assertTrue("documemt is null and it shouldn't be", suggestions != null);
- assertTrue("documemt Size: " + suggestions.size() + " is not: " + 1, suggestions.size() == 1);
- Map.Entry<String, Integer> entry = suggestions.entrySet().iterator().next();
- assertTrue(entry.getKey() + " is not equal to " + "document", entry.getKey().equals("document") == true);
- assertTrue(entry.getValue() + " does not equal: " + 2, entry.getValue() == 2);
-
- //test something not in the spell checker
- spellOpts.tokens = queryConverter.convert("super");
- result = checker.getSuggestions(spellOpts);
- assertTrue("result is null and it shouldn't be", result != null);
- suggestions = result.get(spellOpts.tokens.iterator().next());
- assertTrue("suggestions size should be 0", suggestions.size()==0);
-
- spellOpts.tokens = queryConverter.convert("document");
- result = checker.getSuggestions(spellOpts);
- assertTrue("result is null and it shouldn't be", result != null);
- suggestions = result.get(spellOpts.tokens.iterator().next());
- assertTrue("suggestions is not null and it should be", suggestions == null);
- return null;
- });
+ try (SolrCore core = h.getCore()) {
+ String dictName = checker.init(spellchecker, core);
+ assertTrue(dictName + " is not equal to " + SolrSpellChecker.DEFAULT_DICTIONARY_NAME, dictName.equals(SolrSpellChecker.DEFAULT_DICTIONARY_NAME) == true);
+ core.withSearcher(searcher -> {
+ checker.build(core, searcher);
+
+ IndexReader reader = searcher.getIndexReader();
+ Collection<Token> tokens = queryConverter.convert("documemt");
+ SpellingOptions spellOpts = new SpellingOptions(tokens, reader, 1, SuggestMode.SUGGEST_WHEN_NOT_IN_INDEX, true, 0.5f, null);
+ SpellingResult result = checker.getSuggestions(spellOpts);
+ assertTrue("result is null and it shouldn't be", result != null);
+ //should be lowercased, b/c we are using a lowercasing analyzer
+ Map<String,Integer> suggestions = result.get(spellOpts.tokens.iterator().next());
+ assertTrue("documemt is null and it shouldn't be", suggestions != null);
+ assertTrue("documemt Size: " + suggestions.size() + " is not: " + 1, suggestions.size() == 1);
+ Map.Entry<String,Integer> entry = suggestions.entrySet().iterator().next();
+ assertTrue(entry.getKey() + " is not equal to " + "document", entry.getKey().equals("document") == true);
+ assertTrue(entry.getValue() + " does not equal: " + 2, entry.getValue() == 2);
+
+ //test something not in the spell checker
+ spellOpts.tokens = queryConverter.convert("super");
+ result = checker.getSuggestions(spellOpts);
+ assertTrue("result is null and it shouldn't be", result != null);
+ suggestions = result.get(spellOpts.tokens.iterator().next());
+ assertTrue("suggestions size should be 0", suggestions.size() == 0);
+
+ spellOpts.tokens = queryConverter.convert("document");
+ result = checker.getSuggestions(spellOpts);
+ assertTrue("result is null and it shouldn't be", result != null);
+ suggestions = result.get(spellOpts.tokens.iterator().next());
+ assertTrue("suggestions is not null and it should be", suggestions == null);
+ return null;
+ });
+ }
}
private static class TestSpellChecker extends IndexBasedSpellChecker{
@@ -242,20 +242,19 @@ public class IndexBasedSpellCheckerTest extends SolrTestCaseJ4 {
spellchecker.add(AbstractLuceneSpellChecker.FIELD, "title");
spellchecker.add(AbstractLuceneSpellChecker.SPELLCHECKER_ARG_NAME, spellchecker);
spellchecker.add(AbstractLuceneSpellChecker.STRING_DISTANCE, JaroWinklerDistance.class.getName());
- SolrCore core = h.getCore();
- String dictName = checker.init(spellchecker, core);
- assertTrue(dictName + " is not equal to " + SolrSpellChecker.DEFAULT_DICTIONARY_NAME,
- dictName.equals(SolrSpellChecker.DEFAULT_DICTIONARY_NAME) == true);
- h.getCore().withSearcher(searcher -> {
- checker.build(core, searcher);
- SpellChecker sc = checker.getSpellChecker();
- assertTrue("sc is null and it shouldn't be", sc != null);
- StringDistance sd = sc.getStringDistance();
- assertTrue("sd is null and it shouldn't be", sd != null);
- assertTrue("sd is not an instance of " + JaroWinklerDistance.class.getName(), sd instanceof JaroWinklerDistance);
- return null;
- });
-
+ try (SolrCore core = h.getCore()) {
+ String dictName = checker.init(spellchecker, core);
+ assertTrue(dictName + " is not equal to " + SolrSpellChecker.DEFAULT_DICTIONARY_NAME, dictName.equals(SolrSpellChecker.DEFAULT_DICTIONARY_NAME) == true);
+ core.withSearcher(searcher -> {
+ checker.build(core, searcher);
+ SpellChecker sc = checker.getSpellChecker();
+ assertTrue("sc is null and it shouldn't be", sc != null);
+ StringDistance sd = sc.getStringDistance();
+ assertTrue("sd is null and it shouldn't be", sd != null);
+ assertTrue("sd is not an instance of " + JaroWinklerDistance.class.getName(), sd instanceof JaroWinklerDistance);
+ return null;
+ });
+ }
}
@Test
@@ -296,40 +295,40 @@ public class IndexBasedSpellCheckerTest extends SolrTestCaseJ4 {
spellchecker.add(AbstractLuceneSpellChecker.LOCATION, altIndexDir.getAbsolutePath());
spellchecker.add(AbstractLuceneSpellChecker.FIELD, "title");
spellchecker.add(AbstractLuceneSpellChecker.SPELLCHECKER_ARG_NAME, spellchecker);
- SolrCore core = h.getCore();
- String dictName = checker.init(spellchecker, core);
- assertTrue(dictName + " is not equal to " + SolrSpellChecker.DEFAULT_DICTIONARY_NAME,
- dictName.equals(SolrSpellChecker.DEFAULT_DICTIONARY_NAME) == true);
- h.getCore().withSearcher(searcher -> {
- checker.build(core, searcher);
-
- IndexReader reader = searcher.getIndexReader();
- Collection<Token> tokens = queryConverter.convert("flesh");
- SpellingOptions spellOpts = new SpellingOptions(tokens, reader, 1, SuggestMode.SUGGEST_WHEN_NOT_IN_INDEX, true, 0.5f, null);
- SpellingResult result = checker.getSuggestions(spellOpts);
- assertTrue("result is null and it shouldn't be", result != null);
- //should be lowercased, b/c we are using a lowercasing analyzer
- Map<String, Integer> suggestions = result.get(spellOpts.tokens.iterator().next());
- assertTrue("flesh is null and it shouldn't be", suggestions != null);
- assertTrue("flesh Size: " + suggestions.size() + " is not: " + 1, suggestions.size() == 1);
- Map.Entry<String, Integer> entry = suggestions.entrySet().iterator().next();
- assertTrue(entry.getKey() + " is not equal to " + "flash", entry.getKey().equals("flash") == true);
- assertTrue(entry.getValue() + " does not equal: " + 1, entry.getValue() == 1);
-
- //test something not in the spell checker
- spellOpts.tokens = queryConverter.convert("super");
- result = checker.getSuggestions(spellOpts);
- assertTrue("result is null and it shouldn't be", result != null);
- suggestions = result.get(spellOpts.tokens.iterator().next());
- assertTrue("suggestions size should be 0", suggestions.size()==0);
-
- spellOpts.tokens = queryConverter.convert("Caroline");
- result = checker.getSuggestions(spellOpts);
- assertTrue("result is null and it shouldn't be", result != null);
- suggestions = result.get(spellOpts.tokens.iterator().next());
- assertTrue("suggestions is not null and it should be", suggestions == null);
- return null;
- });
+ try (SolrCore core = h.getCore()) {
+ String dictName = checker.init(spellchecker, core);
+ assertTrue(dictName + " is not equal to " + SolrSpellChecker.DEFAULT_DICTIONARY_NAME, dictName.equals(SolrSpellChecker.DEFAULT_DICTIONARY_NAME) == true);
+ core.withSearcher(searcher -> {
+ checker.build(core, searcher);
+
+ IndexReader reader = searcher.getIndexReader();
+ Collection<Token> tokens = queryConverter.convert("flesh");
+ SpellingOptions spellOpts = new SpellingOptions(tokens, reader, 1, SuggestMode.SUGGEST_WHEN_NOT_IN_INDEX, true, 0.5f, null);
+ SpellingResult result = checker.getSuggestions(spellOpts);
+ assertTrue("result is null and it shouldn't be", result != null);
+ //should be lowercased, b/c we are using a lowercasing analyzer
+ Map<String,Integer> suggestions = result.get(spellOpts.tokens.iterator().next());
+ assertTrue("flesh is null and it shouldn't be", suggestions != null);
+ assertTrue("flesh Size: " + suggestions.size() + " is not: " + 1, suggestions.size() == 1);
+ Map.Entry<String,Integer> entry = suggestions.entrySet().iterator().next();
+ assertTrue(entry.getKey() + " is not equal to " + "flash", entry.getKey().equals("flash") == true);
+ assertTrue(entry.getValue() + " does not equal: " + 1, entry.getValue() == 1);
+
+ //test something not in the spell checker
+ spellOpts.tokens = queryConverter.convert("super");
+ result = checker.getSuggestions(spellOpts);
+ assertTrue("result is null and it shouldn't be", result != null);
+ suggestions = result.get(spellOpts.tokens.iterator().next());
+ assertTrue("suggestions size should be 0", suggestions.size() == 0);
+
+ spellOpts.tokens = queryConverter.convert("Caroline");
+ result = checker.getSuggestions(spellOpts);
+ assertTrue("result is null and it shouldn't be", result != null);
+ suggestions = result.get(spellOpts.tokens.iterator().next());
+ assertTrue("suggestions is not null and it should be", suggestions == null);
+ return null;
+ });
+ }
}
}
diff --git a/solr/core/src/test/org/apache/solr/update/AddBlockUpdateTest.java b/solr/core/src/test/org/apache/solr/update/AddBlockUpdateTest.java
index 1daea96..d0a8b54 100644
--- a/solr/core/src/test/org/apache/solr/update/AddBlockUpdateTest.java
+++ b/solr/core/src/test/org/apache/solr/update/AddBlockUpdateTest.java
@@ -60,6 +60,7 @@ import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.util.JavaBinCodec;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.handler.loader.XMLLoader;
import org.apache.solr.request.LocalSolrQueryRequest;
import org.apache.solr.request.SolrQueryRequest;
@@ -131,7 +132,9 @@ public class AddBlockUpdateTest extends SolrTestCaseJ4 {
private SolrIndexSearcher getSearcher() {
if (_searcher == null) {
- searcherRef = h.getCore().getSearcher();
+ try (SolrCore core = h.getCore()) {
+ searcherRef = core.getSearcher();
+ }
_searcher = searcherRef.get();
}
return _searcher;
diff --git a/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java b/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
index 63d0938..3845791 100644
--- a/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
+++ b/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
@@ -32,6 +32,7 @@ import org.apache.solr.common.MapSerializable;
import org.apache.solr.common.SolrException;
import org.apache.solr.core.DirectoryFactory;
import org.apache.solr.core.SolrConfig;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.core.TestMergePolicyConfig;
import org.apache.solr.index.SortingMergePolicy;
@@ -67,11 +68,15 @@ public class SolrIndexConfigTest extends SolrTestCaseJ4 {
SolrConfig solrConfig = new SolrConfig(loader, "bad-mpf-solrconfig.xml");
SolrIndexConfig solrIndexConfig = new SolrIndexConfig(solrConfig, null, null);
IndexSchema indexSchema = IndexSchemaFactory.buildIndexSchema(schemaFileName, solrConfig);
- h.getCore().setLatestSchema(indexSchema);
+ try (SolrCore core = h.getCore()) {
+ core.setLatestSchema(indexSchema);
+ }
// this should fail as mergePolicy doesn't have any public constructor
- SolrException ex = expectThrows(SolrException.class, () -> solrIndexConfig.toIndexWriterConfig(h.getCore()));
- assertTrue(ex.getMessage().contains("Error instantiating class: 'org.apache.solr.index.DummyMergePolicyFactory'"));
+ try (SolrCore core = h.getCore()) {
+ SolrException ex = expectThrows(SolrException.class, () -> solrIndexConfig.toIndexWriterConfig(core));
+ assertTrue(ex.getMessage().contains("Error instantiating class: 'org.apache.solr.index.DummyMergePolicyFactory'"));
+ }
}
}
@@ -82,22 +87,23 @@ public class SolrIndexConfigTest extends SolrTestCaseJ4 {
SolrConfig solrConfig = new SolrConfig(loader, solrConfigFileName);
SolrIndexConfig solrIndexConfig = new SolrIndexConfig(solrConfig, null, null);
IndexSchema indexSchema = IndexSchemaFactory.buildIndexSchema(schemaFileName, solrConfig);
-
- h.getCore().setLatestSchema(indexSchema);
- IndexWriterConfig iwc = solrIndexConfig.toIndexWriterConfig(h.getCore());
-
- assertNotNull("null mp", iwc.getMergePolicy());
- assertTrue("mp is not TieredMergePolicy", iwc.getMergePolicy() instanceof TieredMergePolicy);
- TieredMergePolicy mp = (TieredMergePolicy) iwc.getMergePolicy();
- assertEquals("mp.maxMergeAtOnceExplicit", 19, mp.getMaxMergeAtOnceExplicit());
- assertEquals("mp.segmentsPerTier", 9, (int) mp.getSegmentsPerTier());
-
- assertNotNull("null ms", iwc.getMergeScheduler());
- assertTrue("ms is not CMS", iwc.getMergeScheduler() instanceof ConcurrentMergeScheduler);
- ConcurrentMergeScheduler ms = (ConcurrentMergeScheduler) iwc.getMergeScheduler();
- assertEquals("ms.maxMergeCount", 987, ms.getMaxMergeCount());
- assertEquals("ms.maxThreadCount", 42, ms.getMaxThreadCount());
- assertEquals("ms.isAutoIOThrottle", true, ms.getAutoIOThrottle());
+ try (SolrCore core = h.getCore()) {
+ core.setLatestSchema(indexSchema);
+ IndexWriterConfig iwc = solrIndexConfig.toIndexWriterConfig(core);
+
+ assertNotNull("null mp", iwc.getMergePolicy());
+ assertTrue("mp is not TieredMergePolicy", iwc.getMergePolicy() instanceof TieredMergePolicy);
+ TieredMergePolicy mp = (TieredMergePolicy) iwc.getMergePolicy();
+ assertEquals("mp.maxMergeAtOnceExplicit", 19, mp.getMaxMergeAtOnceExplicit());
+ assertEquals("mp.segmentsPerTier", 9, (int) mp.getSegmentsPerTier());
+
+ assertNotNull("null ms", iwc.getMergeScheduler());
+ assertTrue("ms is not CMS", iwc.getMergeScheduler() instanceof ConcurrentMergeScheduler);
+ ConcurrentMergeScheduler ms = (ConcurrentMergeScheduler) iwc.getMergeScheduler();
+ assertEquals("ms.maxMergeCount", 987, ms.getMaxMergeCount());
+ assertEquals("ms.maxThreadCount", 42, ms.getMaxThreadCount());
+ assertEquals("ms.isAutoIOThrottle", true, ms.getAutoIOThrottle());
+ }
}
}
@@ -109,19 +115,20 @@ public class SolrIndexConfigTest extends SolrTestCaseJ4 {
SolrConfig solrConfig = new SolrConfig(loader, solrConfigFileName);
SolrIndexConfig solrIndexConfig = new SolrIndexConfig(solrConfig, null, null);
IndexSchema indexSchema = IndexSchemaFactory.buildIndexSchema(schemaFileName, solrConfig);
-
- h.getCore().setLatestSchema(indexSchema);
- IndexWriterConfig iwc = solrIndexConfig.toIndexWriterConfig(h.getCore());
-
- assertNotNull("null mp", iwc.getMergePolicy());
- assertTrue("mp is not TieredMergePolicy", iwc.getMergePolicy() instanceof TieredMergePolicy);
-
- assertNotNull("null ms", iwc.getMergeScheduler());
- assertTrue("ms is not CMS", iwc.getMergeScheduler() instanceof ConcurrentMergeScheduler);
- ConcurrentMergeScheduler ms = (ConcurrentMergeScheduler) iwc.getMergeScheduler();
- assertEquals("ms.maxMergeCount", 987, ms.getMaxMergeCount());
- assertEquals("ms.maxThreadCount", 42, ms.getMaxThreadCount());
- assertEquals("ms.isAutoIOThrottle", false, ms.getAutoIOThrottle());
+ try (SolrCore core = h.getCore()) {
+ core.setLatestSchema(indexSchema);
+ IndexWriterConfig iwc = solrIndexConfig.toIndexWriterConfig(core);
+
+ assertNotNull("null mp", iwc.getMergePolicy());
+ assertTrue("mp is not TieredMergePolicy", iwc.getMergePolicy() instanceof TieredMergePolicy);
+
+ assertNotNull("null ms", iwc.getMergeScheduler());
+ assertTrue("ms is not CMS", iwc.getMergeScheduler() instanceof ConcurrentMergeScheduler);
+ ConcurrentMergeScheduler ms = (ConcurrentMergeScheduler) iwc.getMergeScheduler();
+ assertEquals("ms.maxMergeCount", 987, ms.getMaxMergeCount());
+ assertEquals("ms.maxThreadCount", 42, ms.getMaxThreadCount());
+ assertEquals("ms.isAutoIOThrottle", false, ms.getAutoIOThrottle());
+ }
}
}
@@ -135,17 +142,18 @@ public class SolrIndexConfigTest extends SolrTestCaseJ4 {
SolrIndexConfig solrIndexConfig = new SolrIndexConfig(solrConfig, null, null);
assertNotNull(solrIndexConfig);
IndexSchema indexSchema = IndexSchemaFactory.buildIndexSchema(schemaFileName, solrConfig);
-
- h.getCore().setLatestSchema(indexSchema);
- IndexWriterConfig iwc = solrIndexConfig.toIndexWriterConfig(h.getCore());
-
- final MergePolicy mergePolicy = iwc.getMergePolicy();
- assertNotNull("null mergePolicy", mergePolicy);
- assertTrue("mergePolicy (" + mergePolicy + ") is not a SortingMergePolicy", mergePolicy instanceof SortingMergePolicy);
- final SortingMergePolicy sortingMergePolicy = (SortingMergePolicy) mergePolicy;
- final Sort expected = new Sort(new SortField(expectedFieldName, expectedFieldType, expectedFieldSortDescending));
- final Sort actual = sortingMergePolicy.getSort();
- assertEquals("SortingMergePolicy.getSort", expected, actual);
+ try (SolrCore core = h.getCore()) {
+ core.setLatestSchema(indexSchema);
+ IndexWriterConfig iwc = solrIndexConfig.toIndexWriterConfig(core);
+
+ final MergePolicy mergePolicy = iwc.getMergePolicy();
+ assertNotNull("null mergePolicy", mergePolicy);
+ assertTrue("mergePolicy (" + mergePolicy + ") is not a SortingMergePolicy", mergePolicy instanceof SortingMergePolicy);
+ final SortingMergePolicy sortingMergePolicy = (SortingMergePolicy) mergePolicy;
+ final Sort expected = new Sort(new SortField(expectedFieldName, expectedFieldType, expectedFieldSortDescending));
+ final Sort actual = sortingMergePolicy.getSort();
+ assertEquals("SortingMergePolicy.getSort", expected, actual);
+ }
}
}
@@ -157,9 +165,11 @@ public class SolrIndexConfigTest extends SolrTestCaseJ4 {
assertNotNull(solrIndexConfig.mergedSegmentWarmerInfo);
assertEquals(SimpleMergedSegmentWarmer.class.getName(), solrIndexConfig.mergedSegmentWarmerInfo.className);
IndexSchema indexSchema = IndexSchemaFactory.buildIndexSchema(schemaFileName, solrConfig);
- h.getCore().setLatestSchema(indexSchema);
- IndexWriterConfig iwc = solrIndexConfig.toIndexWriterConfig(h.getCore());
- assertEquals(SimpleMergedSegmentWarmer.class, iwc.getMergedSegmentWarmer().getClass());
+ try (SolrCore core = h.getCore()) {
+ core.setLatestSchema(indexSchema);
+ IndexWriterConfig iwc = solrIndexConfig.toIndexWriterConfig(core);
+ assertEquals(SimpleMergedSegmentWarmer.class, iwc.getMergedSegmentWarmer().getClass());
+ }
}
}
diff --git a/solr/core/src/test/org/apache/solr/update/TestNestedUpdateProcessor.java b/solr/core/src/test/org/apache/solr/update/TestNestedUpdateProcessor.java
index e125f7e..23e60d7 100644
--- a/solr/core/src/test/org/apache/solr/update/TestNestedUpdateProcessor.java
+++ b/solr/core/src/test/org/apache/solr/update/TestNestedUpdateProcessor.java
@@ -22,6 +22,7 @@ import java.util.List;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.update.processor.NestedUpdateProcessorFactory;
import org.apache.solr.update.processor.UpdateRequestProcessor;
@@ -157,10 +158,12 @@ public class TestNestedUpdateProcessor extends SolrTestCaseJ4 {
public void testDeeplyNestedURPSanity() throws Exception {
SolrInputDocument docHierarchy = sdoc("id", "1", "children", sdocs(sdoc("id", "2", "name_s", "Yaz"),
sdoc("id", "3", "name_s", "Jazz", "grandChild", sdoc("id", "4", "name_s", "Gaz"))), "lonelyChild", sdoc("id", "5", "name_s", "Loner"));
- UpdateRequestProcessor nestedUpdate = new NestedUpdateProcessorFactory().getInstance(req(), null, null);
- AddUpdateCommand cmd = new AddUpdateCommand(req());
+ SolrQueryRequest req = req();
+ UpdateRequestProcessor nestedUpdate = new NestedUpdateProcessorFactory().getInstance(req, null, null);
+ AddUpdateCommand cmd = new AddUpdateCommand(req);
cmd.solrDoc = docHierarchy;
nestedUpdate.processAdd(cmd);
+ req.close();
cmd.clear();
List children = (List) docHierarchy.get("children").getValues();
@@ -184,11 +187,13 @@ public class TestNestedUpdateProcessor extends SolrTestCaseJ4 {
final String rootId = "1";
final String childKey = "grandChild";
final String expectedId = rootId + "/children#1/" + childKey + NUM_SEP_CHAR + SINGLE_VAL_CHAR;
+ SolrQueryRequest req = req();
SolrInputDocument noIdChildren = sdoc("id", rootId, "children", sdocs(sdoc("name_s", "Yaz"), sdoc("name_s", "Jazz", childKey, sdoc("name_s", "Gaz"))));
- UpdateRequestProcessor nestedUpdate = new NestedUpdateProcessorFactory().getInstance(req(), null, null);
- AddUpdateCommand cmd = new AddUpdateCommand(req());
+ UpdateRequestProcessor nestedUpdate = new NestedUpdateProcessorFactory().getInstance(req, null, null);
+ AddUpdateCommand cmd = new AddUpdateCommand(req);
cmd.solrDoc = noIdChildren;
nestedUpdate.processAdd(cmd);
+ req.close();
cmd.clear();
List children = (List) noIdChildren.get("children").getValues();
SolrInputDocument idLessChild = (SolrInputDocument)((SolrInputDocument) children.get(1)).get(childKey).getValue();
diff --git a/solr/core/src/test/org/apache/solr/update/TestUpdate.java b/solr/core/src/test/org/apache/solr/update/TestUpdate.java
index 2418169..4c6fc41 100644
--- a/solr/core/src/test/org/apache/solr/update/TestUpdate.java
+++ b/solr/core/src/test/org/apache/solr/update/TestUpdate.java
@@ -22,6 +22,7 @@ import java.util.concurrent.Callable;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.request.SolrQueryRequest;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -224,18 +225,19 @@ public class TestUpdate extends SolrTestCaseJ4 {
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", "444");
doc.addField("text", new Object());//Object shouldn't be serialized later...
-
- AddUpdateCommand cmd = new AddUpdateCommand(req());
- cmd.solrDoc = doc;
- try {
- h.getCore().getUpdateHandler().addDoc(cmd); // should throw
- } catch (SolrException e) {
- if (e.getMessage().contains("serialize")) {
- return;//passed test
+ try (SolrQueryRequest req = req()){
+ AddUpdateCommand cmd = new AddUpdateCommand(req);
+ cmd.solrDoc = doc;
+ try {
+ h.getCore().getUpdateHandler().addDoc(cmd); // should throw
+ } catch (SolrException e) {
+ if (e.getMessage().contains("serialize")) {
+ return;//passed test
+ }
+ throw e;
}
- throw e;
+ fail();
}
- fail();
}
}
diff --git a/solr/core/src/test/org/apache/solr/update/processor/AtomicUpdateProcessorFactoryTest.java b/solr/core/src/test/org/apache/solr/update/processor/AtomicUpdateProcessorFactoryTest.java
index a531216..ca3d666 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/AtomicUpdateProcessorFactoryTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/AtomicUpdateProcessorFactoryTest.java
@@ -27,6 +27,7 @@ import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.request.LocalSolrQueryRequest;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
@@ -52,10 +53,10 @@ public class AtomicUpdateProcessorFactoryTest extends SolrTestCaseJ4 {
.add("processor", "Atomic")
.add("atomic.cat", "delete")
.add("commit", "true");
- try (SolrQueryRequest req = new LocalSolrQueryRequest(h.getCore(), params)) {
+ try (SolrQueryRequest req = new LocalSolrQueryRequest(h.getCore(), params, true)) {
AddUpdateCommand cmd = new AddUpdateCommand(req);
AtomicUpdateProcessorFactory factory = new AtomicUpdateProcessorFactory();
- factory.inform(h.getCore());
+ factory.inform(req.getCore());
UpdateRequestProcessor proc = factory.getInstance(cmd.getReq(), new SolrQueryResponse(),
null);
try {
@@ -74,12 +75,12 @@ public class AtomicUpdateProcessorFactoryTest extends SolrTestCaseJ4 {
.add("processor", "atomic")
.add("atomic.cat", "add")
.add("commit", "true");
- try (SolrQueryRequest req = new LocalSolrQueryRequest(h.getCore(), params)) {
+ try (SolrQueryRequest req = new LocalSolrQueryRequest(h.getCore(), params, true)) {
AddUpdateCommand cmd = new AddUpdateCommand(req);
cmd.solrDoc = new SolrInputDocument();
cmd.solrDoc.addField("title", 1);
AtomicUpdateProcessorFactory factory = new AtomicUpdateProcessorFactory();
- factory.inform(h.getCore());
+ factory.inform(req.getCore());
UpdateRequestProcessor proc = factory.getInstance(cmd.getReq(), new SolrQueryResponse(),
null);
proc.processAdd(cmd);
@@ -99,7 +100,7 @@ public class AtomicUpdateProcessorFactoryTest extends SolrTestCaseJ4 {
.add("atomic.name_s", "set")
.add("atomic.multiDefault", "set")
.add("commit", "true");
- try (SolrQueryRequest req = new LocalSolrQueryRequest(h.getCore(), params)) {
+ try (SolrQueryRequest req = new LocalSolrQueryRequest(h.getCore(), params, true)) {
AddUpdateCommand cmd = new AddUpdateCommand(req);
cmd.solrDoc = new SolrInputDocument();
@@ -110,7 +111,7 @@ public class AtomicUpdateProcessorFactoryTest extends SolrTestCaseJ4 {
cmd.solrDoc.addField("name_s", "Virat");
cmd.solrDoc.addField("multiDefault", "Delhi");
- UpdateRequestProcessor proc = h.getCore()
+ UpdateRequestProcessor proc = req.getCore()
.getUpdateProcessorChain(params)
.createProcessor(cmd.getReq(), new SolrQueryResponse());
proc.processAdd(cmd);
@@ -151,7 +152,7 @@ public class AtomicUpdateProcessorFactoryTest extends SolrTestCaseJ4 {
.add("atomic.name_s", "remove")
.add("atomic.multiDefault", "removeregex")
.add("commit", "true");
- try (SolrQueryRequest req = new LocalSolrQueryRequest(h.getCore(), params)) {
+ try (SolrQueryRequest req = new LocalSolrQueryRequest(h.getCore(), params, true)) {
AddUpdateCommand cmd = new AddUpdateCommand(req);
cmd.solrDoc = new SolrInputDocument();
@@ -161,7 +162,7 @@ public class AtomicUpdateProcessorFactoryTest extends SolrTestCaseJ4 {
cmd.solrDoc.addField("count_i", 20);
cmd.solrDoc.addField("name_s", "Virat");
cmd.solrDoc.addField("multiDefault", ".elh.");
- UpdateRequestProcessor proc = h.getCore()
+ UpdateRequestProcessor proc = req.getCore()
.getUpdateProcessorChain(params)
.createProcessor(cmd.getReq(), new SolrQueryResponse());
proc.processAdd(cmd);
@@ -223,7 +224,9 @@ public class AtomicUpdateProcessorFactoryTest extends SolrTestCaseJ4 {
int finalCount = 0; //int_i
AtomicUpdateProcessorFactory factory = new AtomicUpdateProcessorFactory();
- factory.inform(h.getCore());
+ try (SolrCore core = h.getCore()) {
+ factory.inform(core);
+ }
for (int i = 0; i < 10; i++) {
int index = random().nextInt(5);
@@ -235,7 +238,7 @@ public class AtomicUpdateProcessorFactoryTest extends SolrTestCaseJ4 {
.add("atomic.cat", "add")
.add("atomic.int_i", "inc")
.add("commit","true");
- try (SolrQueryRequest req = new LocalSolrQueryRequest(h.getCore(), params)) {
+ try (SolrQueryRequest req = new LocalSolrQueryRequest(h.getCore(), params, true)) {
AddUpdateCommand cmd = new AddUpdateCommand(req);
cmd.solrDoc = new SolrInputDocument();
cmd.solrDoc.addField("id", 10); //hardcoded id=10
diff --git a/solr/core/src/test/org/apache/solr/update/processor/FieldMutatingUpdateProcessorTest.java b/solr/core/src/test/org/apache/solr/update/processor/FieldMutatingUpdateProcessorTest.java
index 1f48d71..b2025c5 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/FieldMutatingUpdateProcessorTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/FieldMutatingUpdateProcessorTest.java
@@ -23,6 +23,7 @@ import java.util.Arrays;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.SolrInputField;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.schema.IndexSchema;
import org.junit.BeforeClass;
@@ -600,8 +601,10 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
}
public void testIgnore() throws Exception {
-
- IndexSchema schema = h.getCore().getLatestSchema();
+ IndexSchema schema;
+ try (SolrCore core = h.getCore()) {
+ schema = core.getLatestSchema();
+ }
assertNull("test expects 'foo_giberish' to not be a valid field, looks like schema was changed out from under us",
schema.getFieldTypeNoEx("foo_giberish"));
assertNull("test expects 'bar_giberish' to not be a valid field, looks like schema was changed out from under us",
diff --git a/solr/core/src/test/org/apache/solr/update/processor/NestedAtomicUpdateTest.java b/solr/core/src/test/org/apache/solr/update/processor/NestedAtomicUpdateTest.java
index 8693c38..1f08fe9 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/NestedAtomicUpdateTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/NestedAtomicUpdateTest.java
@@ -31,9 +31,9 @@ import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.SolrInputField;
import org.apache.solr.core.SolrCore;
import org.apache.solr.handler.component.RealTimeGetComponent;
+import org.apache.solr.request.SolrQueryRequest;
import org.junit.After;
import org.junit.Before;
-import org.junit.BeforeClass;
import org.junit.Test;
public class NestedAtomicUpdateTest extends SolrTestCaseJ4 {
@@ -63,13 +63,15 @@ public class NestedAtomicUpdateTest extends SolrTestCaseJ4 {
dummyBlock.removeField(VERSION);
SolrInputDocument preMergeDoc = new SolrInputDocument(dummyBlock);
- AtomicUpdateDocumentMerger docMerger = new AtomicUpdateDocumentMerger(req());
- docMerger.merge(addedDoc, dummyBlock);
- assertEquals("merged document should have the same id", preMergeDoc.getFieldValue("id"), dummyBlock.getFieldValue("id"));
- assertDocContainsSubset(preMergeDoc, dummyBlock);
- assertDocContainsSubset(addedDoc, dummyBlock);
- assertDocContainsSubset(newChildDoc, (SolrInputDocument) ((List) dummyBlock.getFieldValues("child")).get(1));
- assertEquals(dummyBlock.getFieldValue("id"), dummyBlock.getFieldValue("id"));
+ try (SolrQueryRequest req = req()) {
+ AtomicUpdateDocumentMerger docMerger = new AtomicUpdateDocumentMerger(req);
+ docMerger.merge(addedDoc, dummyBlock);
+ assertEquals("merged document should have the same id", preMergeDoc.getFieldValue("id"), dummyBlock.getFieldValue("id"));
+ assertDocContainsSubset(preMergeDoc, dummyBlock);
+ assertDocContainsSubset(addedDoc, dummyBlock);
+ assertDocContainsSubset(newChildDoc, (SolrInputDocument) ((List) dummyBlock.getFieldValues("child")).get(1));
+ assertEquals(dummyBlock.getFieldValue("id"), dummyBlock.getFieldValue("id"));
+ }
}
@Test
diff --git a/solr/core/src/test/org/apache/solr/update/processor/SignatureUpdateProcessorFactoryTest.java b/solr/core/src/test/org/apache/solr/update/processor/SignatureUpdateProcessorFactoryTest.java
index 06af046..70794f4 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/SignatureUpdateProcessorFactoryTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/SignatureUpdateProcessorFactoryTest.java
@@ -86,6 +86,7 @@ public class SignatureUpdateProcessorFactoryTest extends SolrTestCaseJ4 {
SolrCore core = h.getCore();
UpdateRequestProcessorChain chained = core.getUpdateProcessingChain(this.chain);
SignatureUpdateProcessorFactory factory = ((SignatureUpdateProcessorFactory) chained.getProcessors().get(0));
+ core.close();
factory.setEnabled(true);
assertNotNull(chained);
@@ -106,6 +107,7 @@ public class SignatureUpdateProcessorFactoryTest extends SolrTestCaseJ4 {
UpdateRequestProcessorChain chained = core.getUpdateProcessingChain(
"dedupe");
SignatureUpdateProcessorFactory factory = ((SignatureUpdateProcessorFactory) chained.getProcessors().get(0));
+ core.close();
factory.setEnabled(true);
assertNotNull(chained);
@@ -148,9 +150,11 @@ public class SignatureUpdateProcessorFactoryTest extends SolrTestCaseJ4 {
@Test
public void testMultiThreaded() throws Exception {
- UpdateRequestProcessorChain chained = h.getCore().getUpdateProcessingChain(
+ SolrCore core = h.getCore();
+ UpdateRequestProcessorChain chained = core.getUpdateProcessingChain(
"dedupe");
SignatureUpdateProcessorFactory factory = ((SignatureUpdateProcessorFactory) chained.getProcessors().get(0));
+ core.close();
factory.setEnabled(true);
Thread[] threads = null;
Thread[] threads2 = null;
@@ -216,7 +220,6 @@ public class SignatureUpdateProcessorFactoryTest extends SolrTestCaseJ4 {
for (int i = 0; i < threads2.length; i++) {
threads2[i].join();
}
- SolrCore core = h.getCore();
assertU(commit());
@@ -229,8 +232,6 @@ public class SignatureUpdateProcessorFactoryTest extends SolrTestCaseJ4 {
*/
@Test
public void testNonIndexedSignatureField() throws Exception {
- SolrCore core = h.getCore();
-
checkNumDocs(0);
chain = "stored_sig";
@@ -255,6 +256,7 @@ public class SignatureUpdateProcessorFactoryTest extends SolrTestCaseJ4 {
} catch (Exception e) {
exception_ok = true;
}
+ core.close();
assertTrue("Should have gotten an exception from inform(SolrCore)",
exception_ok);
}
@@ -268,7 +270,7 @@ public class SignatureUpdateProcessorFactoryTest extends SolrTestCaseJ4 {
.getUpdateProcessingChain(chain);
SignatureUpdateProcessorFactory factory = ((SignatureUpdateProcessorFactory) chained.getProcessors().get(0));
factory.setEnabled(true);
-
+ core.close();
Map<String,String[]> params = new HashMap<>();
MultiMapSolrParams mmparams = new MultiMapSolrParams(params);
params.put(UpdateParams.UPDATE_CHAIN, new String[] {chain});
@@ -324,7 +326,7 @@ public class SignatureUpdateProcessorFactoryTest extends SolrTestCaseJ4 {
}
- LocalSolrQueryRequest req = new LocalSolrQueryRequest(h.getCore(), mmparams);
+ LocalSolrQueryRequest req = new LocalSolrQueryRequest(h.getCore(), mmparams, true);
try {
req.setContentStreams(Collections.singletonList(ContentStreamBase.create(new BinaryRequestWriter(), ureq)));
UpdateRequestHandler h = new UpdateRequestHandler();
diff --git a/solr/core/src/test/org/apache/solr/update/processor/SkipExistingDocumentsProcessorFactoryTest.java b/solr/core/src/test/org/apache/solr/update/processor/SkipExistingDocumentsProcessorFactoryTest.java
index e0ff260..5c0f3b9 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/SkipExistingDocumentsProcessorFactoryTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/SkipExistingDocumentsProcessorFactoryTest.java
@@ -35,6 +35,8 @@ import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.update.AddUpdateCommand;
import org.apache.solr.update.processor.SkipExistingDocumentsProcessorFactory.SkipExistingDocumentsUpdateProcessor;
+import org.junit.After;
+import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mockito;
@@ -42,11 +44,17 @@ import org.mockito.Mockito;
public class SkipExistingDocumentsProcessorFactoryTest {
private BytesRef docId = new BytesRef();
- private SolrQueryRequest defaultRequest = new LocalSolrQueryRequest(null, new NamedList());
+ private static SolrQueryRequest defaultRequest;
@BeforeClass
public static void beforeClass() {
- SolrTestCaseJ4.assumeWorkingMockito();
+ defaultRequest = new LocalSolrQueryRequest(null, new NamedList());
+ }
+
+ @AfterClass
+ public static void afterClass() {
+ defaultRequest.close();
+ defaultRequest = null;
}
// Tests for logic in the factory
@@ -189,6 +197,7 @@ public class SkipExistingDocumentsProcessorFactoryTest {
assertTrue("Expected skipUpdateIfMissing to be true", processor.isSkipUpdateIfMissing());
next.close();
processor.close();
+ req.close();
}
@Test
@@ -207,6 +216,7 @@ public class SkipExistingDocumentsProcessorFactoryTest {
assertFalse("Expected skipUpdateIfMissing to be false", processor.isSkipUpdateIfMissing());
next.close();
processor.close();
+ req.close();
}
@Test
@@ -226,6 +236,7 @@ public class SkipExistingDocumentsProcessorFactoryTest {
assertTrue("Expected skipUpdateIfMissing to be true", processor.isSkipUpdateIfMissing());
next.close();
processor.close();
+ req.close();
}
diff --git a/solr/core/src/test/org/apache/solr/update/processor/TolerantUpdateProcessorTest.java b/solr/core/src/test/org/apache/solr/update/processor/TolerantUpdateProcessorTest.java
index 1657c01..d5d9a71 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/TolerantUpdateProcessorTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/TolerantUpdateProcessorTest.java
@@ -337,16 +337,18 @@ public class TolerantUpdateProcessorTest extends UpdateProcessorTestBase {
public String update(String chain, String xml) {
- DirectSolrConnection connection = new DirectSolrConnection(h.getCore());
- SolrRequestHandler handler = h.getCore().getRequestHandler("/update");
- ModifiableSolrParams params = new ModifiableSolrParams();
- params.add("update.chain", chain);
- try {
- return connection.request(handler, params, xml);
- } catch (SolrException e) {
- throw (SolrException)e;
- } catch (Exception e) {
- throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e);
+ try (SolrCore core = h.getCore()) {
+ DirectSolrConnection connection = new DirectSolrConnection(core);
+ SolrRequestHandler handler = core.getRequestHandler("/update");
+ ModifiableSolrParams params = new ModifiableSolrParams();
+ params.add("update.chain", chain);
+ try {
+ return connection.request(handler, params, xml);
+ } catch (SolrException e) {
+ throw (SolrException) e;
+ } catch (Exception e) {
+ throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e);
+ }
}
}
@@ -393,7 +395,7 @@ public class TolerantUpdateProcessorTest extends UpdateProcessorTestBase {
requestParams = new ModifiableSolrParams();
}
- SolrQueryRequest req = new LocalSolrQueryRequest(core, requestParams);
+ SolrQueryRequest req = new LocalSolrQueryRequest(core, requestParams, true);
UpdateRequestProcessor processor = null;
try {
processor = pc.createProcessor(req, rsp);
diff --git a/solr/core/src/test/org/apache/solr/update/processor/UpdateRequestProcessorFactoryTest.java b/solr/core/src/test/org/apache/solr/update/processor/UpdateRequestProcessorFactoryTest.java
index 5e5f82d..e51df01 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/UpdateRequestProcessorFactoryTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/UpdateRequestProcessorFactoryTest.java
@@ -24,6 +24,7 @@ import java.util.List;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.core.SolrCore;
+import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.junit.BeforeClass;
import org.slf4j.Logger;
@@ -55,7 +56,7 @@ public class UpdateRequestProcessorFactoryTest extends SolrTestCaseJ4 {
UpdateRequestProcessorChain chain = core.getUpdateProcessorChain(params);
List<UpdateRequestProcessorFactory> l = chain.getProcessors();
assertTrue(l.get(0) instanceof TemplateUpdateProcessorFactory);
-
+ core.close();
}
@@ -89,6 +90,8 @@ public class UpdateRequestProcessorFactoryTest extends SolrTestCaseJ4 {
// Make sure the NamedListArgs got through ok
assertEquals( "{name={n8=88, n9=99}}", link.args.toString() );
+
+ core.close();
}
public void testUpdateDistribChainSkipping() throws Exception {
@@ -119,8 +122,10 @@ public class UpdateRequestProcessorFactoryTest extends SolrTestCaseJ4 {
chain.getProcessors().size());
// test a basic (non distrib) chain
- proc = chain.createProcessor(req(), new SolrQueryResponse());
+ SolrQueryRequest req = req();
+ proc = chain.createProcessor(req, new SolrQueryResponse());
procs = procToList(proc);
+ req.close();
int expectedProcLen = EXPECTED_CHAIN_LENGTH;
if ("distrib-chain-noop".equals(name)) { // NoOpDistributingUpdateProcessorFactory produces no processor
@@ -148,9 +153,11 @@ public class UpdateRequestProcessorFactoryTest extends SolrTestCaseJ4 {
&& procs.get(1) instanceof LogUpdateProcessorFactory.LogUpdateProcessor));
proc.close();
// fetch the distributed version of this chain
- proc = chain.createProcessor(req(DISTRIB_UPDATE_PARAM, "NONE"), // just some non-blank value
+ req = req(DISTRIB_UPDATE_PARAM, "NONE");
+ proc = chain.createProcessor(req, // just some non-blank value
new SolrQueryResponse());
procs = procToList(proc);
+ req.close();
assertNotNull(name + " (distrib) chain produced null proc", proc);
assertFalse(name + " (distrib) procs is empty", procs.isEmpty());
@@ -181,7 +188,7 @@ public class UpdateRequestProcessorFactoryTest extends SolrTestCaseJ4 {
expectedProcLen, procs.size());
proc.close();
}
-
+ core.close();
}
/**
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
index 514fa82..db1c38b 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
@@ -1045,6 +1045,7 @@ public class Http2SolrClient extends SolrClient {
} catch (IllegalStateException e) {
log.error("Unexpected, perhaps came after close; ?", e);
} catch (InterruptedException e) {
+ ParWork.propagateInterrupt(e);
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
} catch (TimeoutException e) {
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Timeout", e);
@@ -1075,6 +1076,7 @@ public class Http2SolrClient extends SolrClient {
available.acquire();
}
} catch (InterruptedException e) {
+ ParWork.propagateInterrupt(e);
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
}
phaser.register();
diff --git a/solr/solrj/src/java/org/apache/solr/common/ParWork.java b/solr/solrj/src/java/org/apache/solr/common/ParWork.java
index 718fed8..174927d 100644
--- a/solr/solrj/src/java/org/apache/solr/common/ParWork.java
+++ b/solr/solrj/src/java/org/apache/solr/common/ParWork.java
@@ -58,6 +58,7 @@ import org.slf4j.LoggerFactory;
*/
public class ParWork implements Closeable {
public static final int PROC_COUNT = ManagementFactory.getOperatingSystemMXBean().getAvailableProcessors();
+ public static final String ROOT_EXEC_NAME = "Root";
private static final String WORK_WAS_INTERRUPTED = "Work was interrupted!";
private static final String RAN_INTO_AN_ERROR_WHILE_DOING_WORK =
@@ -77,7 +78,7 @@ public class ParWork implements Closeable {
if (EXEC == null) {
synchronized (ParWork.class) {
if (EXEC == null) {
- EXEC = (ParWorkExecutor) getParExecutorService("Root",
+ EXEC = (ParWorkExecutor) getParExecutorService(ROOT_EXEC_NAME,
Integer.getInteger("solr.rootSharedThreadPoolCoreSize", 32), Integer.MAX_VALUE, 1000,
new SynchronousQueue());
((ParWorkExecutor)EXEC).enableCloseLock();
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamingTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamingTest.java
index f5eb82e..0a80357 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamingTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamingTest.java
@@ -26,11 +26,13 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
+import java.util.function.Supplier;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
+import org.apache.solr.client.solrj.io.Lang;
import org.apache.solr.client.solrj.io.SolrClientCache;
import org.apache.solr.client.solrj.io.Tuple;
import org.apache.solr.client.solrj.io.comp.ComparatorOrder;
@@ -38,6 +40,8 @@ import org.apache.solr.client.solrj.io.comp.FieldComparator;
import org.apache.solr.client.solrj.io.comp.MultipleFieldComparator;
import org.apache.solr.client.solrj.io.eq.FieldEqualitor;
import org.apache.solr.client.solrj.io.ops.GroupOperation;
+import org.apache.solr.client.solrj.io.stream.expr.DefaultStreamFactory;
+import org.apache.solr.client.solrj.io.stream.expr.Expressible;
import org.apache.solr.client.solrj.io.stream.expr.StreamFactory;
import org.apache.solr.client.solrj.io.stream.metrics.Bucket;
import org.apache.solr.client.solrj.io.stream.metrics.CountMetric;
@@ -94,6 +98,7 @@ private static boolean useAlias;
@BeforeClass
public static void configureCluster() throws Exception {
+
numShards = random().nextInt(2) + 2; //1 - 3
numWorkers = numShards > 2 ? random().nextInt(numShards - 1) + 1 : numShards;
configureCluster(numShards)
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/request/SchemaTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/request/SchemaTest.java
index 40c4cb0..e6b3bd3 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/request/SchemaTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/request/SchemaTest.java
@@ -29,7 +29,6 @@ import java.util.TreeMap;
import org.apache.commons.io.FileUtils;
import org.apache.solr.client.solrj.SolrClient;
-import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.impl.BaseHttpSolrClient;
import org.apache.solr.client.solrj.request.schema.AnalyzerDefinition;
import org.apache.solr.client.solrj.request.schema.FieldTypeDefinition;
diff --git a/solr/test-framework/src/java/org/apache/solr/SolrTestCase.java b/solr/test-framework/src/java/org/apache/solr/SolrTestCase.java
index fb64618..7c34893 100644
--- a/solr/test-framework/src/java/org/apache/solr/SolrTestCase.java
+++ b/solr/test-framework/src/java/org/apache/solr/SolrTestCase.java
@@ -29,9 +29,6 @@ import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.QuickPatchThreadsFilter;
import org.apache.solr.client.solrj.impl.Http2SolrClient;
import org.apache.solr.client.solrj.impl.HttpClientUtil;
-import org.apache.solr.client.solrj.io.Lang;
-import org.apache.solr.client.solrj.io.stream.expr.DefaultStreamFactory;
-import org.apache.solr.client.solrj.io.stream.expr.Expressible;
import org.apache.solr.common.AlreadyClosedException;
import org.apache.solr.common.ParWork;
import org.apache.solr.common.ParWorkExecutor;
@@ -44,6 +41,7 @@ import org.apache.solr.common.util.CloseTracker;
import org.apache.solr.common.util.ObjectReleaseTracker;
import org.apache.solr.common.util.SolrQueuedThreadPool;
import org.apache.solr.common.util.SysStats;
+import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.security.PublicKeyHandler;
import org.apache.solr.servlet.SolrDispatchFilter;
import org.apache.solr.util.CryptoKeys;
@@ -87,7 +85,6 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
-import java.util.function.Supplier;
/**
* All Solr test cases should derive from this class eventually. This is originally a result of async logging, see:
@@ -423,13 +420,6 @@ public class SolrTestCase extends LuceneTestCase {
SolrDispatchFilter.SOLR_DEFAULT_CONFDIR_ATTRIBUTE, ExternalPaths.DEFAULT_CONFIGSET);
}
- // preinit static
- Lang.register(new DefaultStreamFactory(){
- public void setFunctionNames(Map<String,Supplier<Class<? extends Expressible>>> functionNames) {
-
- }
- });
-
log.info("@BeforeClass end ------------------------------------------------------");
log.info("*******************************************************************");
}
@@ -507,7 +497,7 @@ public class SolrTestCase extends LuceneTestCase {
if (testExecutor != null) {
testExecutor.disableCloseLock();
- testExecutor.shutdownNow();
+ testExecutor.shutdown();
}
@@ -543,6 +533,7 @@ public class SolrTestCase extends LuceneTestCase {
ParWork.shutdownParWorkExecutor();
} finally {
+ SolrResourceLoader.refreshConf();
ObjectReleaseTracker.clear();
TestInjection.reset();
}
@@ -692,7 +683,7 @@ public class SolrTestCase extends LuceneTestCase {
if (thread.getName().contains("ForkJoinPool.") || thread.getName().contains("Log4j2-")) {
return false;
}
- if (thread.getName().contains("RootExec")) {
+ if (thread.getName().contains(ParWork.ROOT_EXEC_NAME + "-")) {
log.warn("interrupt on " + thread.getName());
thread.interrupt();
return true;
@@ -887,7 +878,8 @@ public class SolrTestCase extends LuceneTestCase {
if (testExecutor != null) {
return testExecutor;
}
- testExecutor = (ParWorkExecutor) ParWork.getParExecutorService("testExecutor", 3, 100, 3000, new BlockingArrayQueue(30, 16));
+ testExecutor = (ParWorkExecutor) ParWork.getParExecutorService("testExecutor", 10, 30, 1000, new BlockingArrayQueue(30, 16));
+ testExecutor.prestartAllCoreThreads();
((ParWorkExecutor) testExecutor).enableCloseLock();
return testExecutor;
}
diff --git a/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java b/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
index 282b05d..0322eec 100644
--- a/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
+++ b/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
@@ -95,6 +95,7 @@ import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.params.UpdateParams;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.ContentStreamBase;
+import org.apache.solr.common.util.IOUtils;
import org.apache.solr.common.util.Utils;
import org.apache.solr.common.util.XML;
import org.apache.solr.core.CoreContainer;
@@ -1014,18 +1015,19 @@ public abstract class SolrTestCaseJ4 extends SolrTestCase {
Map<String, String[]> params = new HashMap<>();
MultiMapSolrParams mmparams = new MultiMapSolrParams(params);
params.put(UpdateParams.UPDATE_CHAIN, new String[]{updateRequestProcessorChain});
- SolrQueryRequestBase req = new SolrQueryRequestBase(h.getCore(),
- (SolrParams) mmparams) {
- };
-
- UpdateRequestHandler handler = new UpdateRequestHandler();
- handler.init(null);
- ArrayList<ContentStream> streams = new ArrayList<>(2);
- streams.add(new ContentStreamBase.StringStream(doc));
- req.setContentStreams(streams);
- handler.handleRequestBody(req, new SolrQueryResponse());
- req.close();
- handler.close();
+ try (SolrCore core = h.getCore()) {
+ SolrQueryRequestBase req = new SolrQueryRequestBase(core, (SolrParams) mmparams) {
+ };
+
+ UpdateRequestHandler handler = new UpdateRequestHandler();
+ handler.init(null);
+ ArrayList<ContentStream> streams = new ArrayList<>(2);
+ streams.add(new ContentStreamBase.StringStream(doc));
+ req.setContentStreams(streams);
+ handler.handleRequestBody(req, new SolrQueryResponse());
+ req.close();
+ handler.close();
+ }
}
/**
@@ -1127,7 +1129,7 @@ public abstract class SolrTestCaseJ4 extends SolrTestCase {
for (int i=0; i<moreParams.length; i+=2) {
mp.add(moreParams[i], moreParams[i+1]);
}
- return new LocalSolrQueryRequest(h.getCore(), mp);
+ return new LocalSolrQueryRequest(h.getCore(), mp, true);
}
/** Necessary to make method signatures un-ambiguous */
@@ -1683,7 +1685,7 @@ public abstract class SolrTestCaseJ4 extends SolrTestCase {
// merging segments no longer selects just adjacent segments hence ids (doc.order) can be shuffled.
// we need to look at the index to determine the order.
- String responseStr = h.query(req("q","*:*", "fl","id", "sort","_docid_ asc", "rows",Integer.toString(model.size()*2), "wt","json", "indent","true"));
+ String responseStr = query(req("q","*:*", "fl","id", "sort","_docid_ asc", "rows",Integer.toString(model.size()*2), "wt","json", "indent","true"));
Object response = ObjectBuilder.fromJSON(responseStr);
response = ((Map)response).get("response");
@@ -2511,7 +2513,27 @@ public abstract class SolrTestCaseJ4 extends SolrTestCase {
}
protected void waitForWarming() throws InterruptedException {
- waitForWarming(h.getCore());
+ try (SolrCore core = h.getCore()) {
+ waitForWarming(core);
+ }
+ }
+
+ protected String query(SolrQueryRequest req) throws Exception {
+ try {
+ String resp = h.query(req);
+ return resp;
+ } finally {
+ IOUtils.closeQuietly(req);
+ }
+ }
+
+ protected String query(String handler, SolrQueryRequest req) throws Exception {
+ try {
+ String resp = h.query(handler, req);
+ return resp;
+ } finally {
+ IOUtils.closeQuietly(req);
+ }
}
public static void assertNonBlockingRandomGeneratorAvailable() throws InterruptedException {
diff --git a/solr/test-framework/src/java/org/apache/solr/update/processor/UpdateProcessorTestBase.java b/solr/test-framework/src/java/org/apache/solr/update/processor/UpdateProcessorTestBase.java
index 827c07f..5f14a13 100644
--- a/solr/test-framework/src/java/org/apache/solr/update/processor/UpdateProcessorTestBase.java
+++ b/solr/test-framework/src/java/org/apache/solr/update/processor/UpdateProcessorTestBase.java
@@ -63,7 +63,7 @@ public class UpdateProcessorTestBase extends SolrTestCaseJ4 {
SolrQueryResponse rsp = new SolrQueryResponse();
- SolrQueryRequest req = new LocalSolrQueryRequest(core, requestParams);
+ SolrQueryRequest req = new LocalSolrQueryRequest(core, requestParams, true);
try {
SolrRequestInfo.setRequestInfo(new SolrRequestInfo(req, rsp));
AddUpdateCommand cmd = new AddUpdateCommand(req);
@@ -95,7 +95,7 @@ public class UpdateProcessorTestBase extends SolrTestCaseJ4 {
SolrQueryResponse rsp = new SolrQueryResponse();
- SolrQueryRequest req = new LocalSolrQueryRequest(core, new ModifiableSolrParams());
+ SolrQueryRequest req = new LocalSolrQueryRequest(core, new ModifiableSolrParams(), true);
CommitUpdateCommand cmd = new CommitUpdateCommand(req,false);
UpdateRequestProcessor processor = pc.createProcessor(req, rsp);
@@ -114,7 +114,7 @@ public class UpdateProcessorTestBase extends SolrTestCaseJ4 {
SolrQueryResponse rsp = new SolrQueryResponse();
- SolrQueryRequest req = new LocalSolrQueryRequest(core, new ModifiableSolrParams());
+ SolrQueryRequest req = new LocalSolrQueryRequest(core, new ModifiableSolrParams(), true);
DeleteUpdateCommand cmd = new DeleteUpdateCommand(req);
cmd.setId(id);
@@ -133,7 +133,7 @@ public class UpdateProcessorTestBase extends SolrTestCaseJ4 {
assertNotNull("No Chain named: " + chain, pc);
SolrQueryResponse rsp = new SolrQueryResponse();
- SolrQueryRequest req = new LocalSolrQueryRequest(core, new ModifiableSolrParams());
+ SolrQueryRequest req = new LocalSolrQueryRequest(core, new ModifiableSolrParams(), true);
UpdateRequestProcessor processor = pc.createProcessor(req, rsp);
try {
diff --git a/solr/test-framework/src/test/org/apache/solr/cloud/MiniSolrCloudClusterTest.java b/solr/test-framework/src/test/org/apache/solr/cloud/MiniSolrCloudClusterTest.java
index 228842c..dc7f0c5 100644
--- a/solr/test-framework/src/test/org/apache/solr/cloud/MiniSolrCloudClusterTest.java
+++ b/solr/test-framework/src/test/org/apache/solr/cloud/MiniSolrCloudClusterTest.java
@@ -24,6 +24,7 @@ import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.junit.Test;
@LuceneTestCase.SuppressSysoutChecks(bugUrl = "Solr logs to JUL")
+@LuceneTestCase.Nightly
public class MiniSolrCloudClusterTest extends SolrTestCaseJ4 {
@Test