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 2020/07/24 02:34:16 UTC
[lucene-solr] branch reference_impl updated: @319 Tests that
produce a lot of garbage.
This is an automated email from the ASF dual-hosted git repository.
markrmiller pushed a commit to branch reference_impl
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/reference_impl by this push:
new 1508063 @319 Tests that produce a lot of garbage.
1508063 is described below
commit 1508063988595bae7ad64d3525a2cf516f4dbc60
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Thu Jul 23 21:34:02 2020 -0500
@319 Tests that produce a lot of garbage.
---
.../solr/handler/component/HttpShardHandler.java | 3 ++-
.../solr/legacy/TestNumericRangeQuery32.java | 2 ++
.../org/apache/solr/search/TestSolr4Spatial.java | 2 ++
.../src/test/org/apache/solr/search/TestSort.java | 2 ++
.../function/TestMinMaxOnMultiValuedField.java | 2 ++
.../solr/uninverting/TestNumericTerms64.java | 7 ++++---
.../solr/client/solrj/impl/Http2SolrClient.java | 23 +++++-----------------
7 files changed, 19 insertions(+), 22 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java
index b94e4df..bfae227 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java
@@ -81,7 +81,7 @@ public class HttpShardHandler extends ShardHandler {
private Set<ShardResponse> asyncPending;
private Set<Future<ShardResponse>> pending;
private Map<String,List<String>> shardToURLs;
- private Http2SolrClient solrClient;
+ private final Http2SolrClient solrClient;
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@@ -264,6 +264,7 @@ public class HttpShardHandler extends ShardHandler {
if (urls.size() <= 1) {
String url = urls.get(0);
srsp.setShardAddress(url);
+ assert solrClient != null;
try (SolrClient client = new Builder(url).withHttpClient(solrClient).markInternalRequest().build()) {
ssr.nl = client.request(req);
}
diff --git a/solr/core/src/test/org/apache/solr/legacy/TestNumericRangeQuery32.java b/solr/core/src/test/org/apache/solr/legacy/TestNumericRangeQuery32.java
index 1b904fe..7dd2e4f 100644
--- a/solr/core/src/test/org/apache/solr/legacy/TestNumericRangeQuery32.java
+++ b/solr/core/src/test/org/apache/solr/legacy/TestNumericRangeQuery32.java
@@ -33,6 +33,7 @@ import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.TopFieldCollector;
import org.apache.lucene.search.TopScoreDocCollector;
import org.apache.lucene.store.Directory;
+import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.NumericUtils;
import org.apache.lucene.util.TestUtil;
import org.apache.solr.SolrTestCase;
@@ -40,6 +41,7 @@ import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
+@LuceneTestCase.Nightly // this test generates a lot of garbage
public class TestNumericRangeQuery32 extends SolrTestCase {
// distance of entries
private static int distance;
diff --git a/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java b/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java
index 7722664..87778cc 100644
--- a/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java
+++ b/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java
@@ -20,6 +20,7 @@ import java.text.ParseException;
import java.util.Arrays;
import com.carrotsearch.randomizedtesting.annotations.ParametersFactory;
+import org.apache.lucene.util.LuceneTestCase;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.SolrException;
import org.apache.solr.core.SolrCore;
@@ -40,6 +41,7 @@ import org.locationtech.spatial4j.shape.Rectangle;
* Test Solr 4's new spatial capabilities from the new Lucene spatial module. Don't thoroughly test it here because
* Lucene spatial has its own tests. Some of these tests were ported from Solr 3 spatial tests.
*/
+@LuceneTestCase.Nightly // this test generates a lot of garbage
public class TestSolr4Spatial extends SolrTestCaseJ4 {
private final String fieldName;
diff --git a/solr/core/src/test/org/apache/solr/search/TestSort.java b/solr/core/src/test/org/apache/solr/search/TestSort.java
index c95e9b6..13390c2 100644
--- a/solr/core/src/test/org/apache/solr/search/TestSort.java
+++ b/solr/core/src/test/org/apache/solr/search/TestSort.java
@@ -50,6 +50,7 @@ import org.apache.lucene.store.Directory;
import org.apache.lucene.util.BitDocIdSet;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.FixedBitSet;
+import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.TestUtil;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.request.SolrQueryRequest;
@@ -59,6 +60,7 @@ import org.junit.BeforeClass;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+@LuceneTestCase.Nightly // this test generates a lot of garbage
public class TestSort extends SolrTestCaseJ4 {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
diff --git a/solr/core/src/test/org/apache/solr/search/function/TestMinMaxOnMultiValuedField.java b/solr/core/src/test/org/apache/solr/search/function/TestMinMaxOnMultiValuedField.java
index f273ba5..9c53727 100644
--- a/solr/core/src/test/org/apache/solr/search/function/TestMinMaxOnMultiValuedField.java
+++ b/solr/core/src/test/org/apache/solr/search/function/TestMinMaxOnMultiValuedField.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
import org.apache.lucene.util.TestUtil;
import org.apache.solr.SolrTestCaseJ4;
@@ -40,6 +41,7 @@ import org.junit.BeforeClass;
* Tests the behavior of <code>field(foo,min|max)</code> on numerious types of multivalued 'foo' fields,
* as well as the beahvior of sorting on <code>foo asc|desc</code> to implicitly choose the min|max.
*/
+@LuceneTestCase.Nightly // this test generates a lot of garbage
@SuppressCodecs({"SimpleText"}) // see TestSortedSetSelector
public class TestMinMaxOnMultiValuedField extends SolrTestCaseJ4 {
diff --git a/solr/core/src/test/org/apache/solr/uninverting/TestNumericTerms64.java b/solr/core/src/test/org/apache/solr/uninverting/TestNumericTerms64.java
index ab44c42..11fdbe0 100644
--- a/solr/core/src/test/org/apache/solr/uninverting/TestNumericTerms64.java
+++ b/solr/core/src/test/org/apache/solr/uninverting/TestNumericTerms64.java
@@ -40,6 +40,7 @@ import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
+// Tamped down for non Nightly runs as this test generates a large amount of garbage
public class TestNumericTerms64 extends SolrTestCase {
// distance of entries
private static long distance;
@@ -54,12 +55,12 @@ public class TestNumericTerms64 extends SolrTestCase {
@BeforeClass
public static void beforeClass() throws Exception {
- noDocs = atLeast(4096);
+ noDocs = atLeast(TEST_NIGHTLY ? 4096 : 256);
distance = (1L << 60) / noDocs;
directory = newDirectory();
RandomIndexWriter writer = new RandomIndexWriter(random(), directory,
newIndexWriterConfig(new MockAnalyzer(random()))
- .setMaxBufferedDocs(TestUtil.nextInt(random(), 100, 1000))
+ .setMaxBufferedDocs(TestUtil.nextInt(random(), TEST_NIGHTLY ? 100 : 990, 1000))
.setMergePolicy(newLogMergePolicy()));
final LegacyFieldType storedLong = new LegacyFieldType(LegacyLongField.TYPE_NOT_STORED);
@@ -127,7 +128,7 @@ public class TestNumericTerms64 extends SolrTestCase {
String field="field"+precisionStep;
// 10 random tests, the index order is ascending,
// so using a reverse sort field should retun descending documents
- int num = TestUtil.nextInt(random(), 10, 20);
+ int num = TestUtil.nextInt(random(), 10, TEST_NIGHTLY ? 20 : 14);
for (int i = 0; i < num; i++) {
long lower=(long)(random().nextDouble()*noDocs*distance)+startOffset;
long upper=(long)(random().nextDouble()*noDocs*distance)+startOffset;
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 e88e7af..e549ee0 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
@@ -66,6 +66,7 @@ import org.apache.solr.common.params.QoSParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.params.UpdateParams;
import org.apache.solr.common.util.Base64;
+import org.apache.solr.common.util.CloseTracker;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.ObjectReleaseTracker;
@@ -123,12 +124,11 @@ public class Http2SolrClient extends SolrClient {
private static final List<String> errPath = Arrays.asList("metadata", "error-class");
private final Map<String, String> headers;
private final SolrHttpClientScheduler scheduler;
+ private final CloseTracker closeTracker;
private volatile HttpClient httpClient;
private volatile Set<String> queryParams = Collections.emptySet();
private int idleTimeout;
- volatile String closed = null;
-
private volatile ResponseParser parser = new BinaryResponseParser();
private volatile RequestWriter requestWriter = new BinaryRequestWriter();
private final Set<HttpListenerFactory> listenerFactory = ConcurrentHashMap.newKeySet();
@@ -141,6 +141,7 @@ public class Http2SolrClient extends SolrClient {
private volatile SolrQueuedThreadPool httpClientExecutor;
protected Http2SolrClient(String serverBaseUrl, Builder builder) {
+ closeTracker = new CloseTracker();
if (serverBaseUrl != null) {
if (!serverBaseUrl.equals("/") && serverBaseUrl.endsWith("/")) {
serverBaseUrl = serverBaseUrl.substring(0, serverBaseUrl.length() - 1);
@@ -165,7 +166,6 @@ public class Http2SolrClient extends SolrClient {
} else {
httpClient = builder.http2SolrClient.httpClient;
}
- httpClient.setScheduler(scheduler);
assert ObjectReleaseTracker.track(this);
}
@@ -229,7 +229,6 @@ public class Http2SolrClient extends SolrClient {
httpClientExecutor.setMinThreads(3);
httpClient.setIdleTimeout(idleTimeout);
try {
- // httpClientExecutor.start();
httpClient.setExecutor(httpClientExecutor);
httpClient.setStrictEventOrdering(false);
httpClient.setConnectBlocking(false);
@@ -238,7 +237,7 @@ public class Http2SolrClient extends SolrClient {
httpClient.setUserAgentField(new HttpField(HttpHeader.USER_AGENT, AGENT));
httpClient.setIdleTimeout(idleTimeout);
if (builder.connectionTimeout != null) httpClient.setConnectTimeout(builder.connectionTimeout);
-
+ httpClient.setScheduler(scheduler);
httpClient.start();
} catch (Exception e) {
ParWork.propegateInterrupt(e);
@@ -249,13 +248,7 @@ public class Http2SolrClient extends SolrClient {
}
public void close() {
- if (this.closed != null) {
- throw new AlreadyClosedException("Already closed! " + this.closed);
- }
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw);
- new AlreadyClosedException("Already closed at: ").printStackTrace(pw);
- this.closed = sw.toString();
+ closeTracker.close();
if (httpClientExecutor != null) {
try {
@@ -433,9 +426,6 @@ public class Http2SolrClient extends SolrClient {
Request req = makeRequest(solrRequest, collection);
final ResponseParser parser = solrRequest.getResponseParser() == null
? this.parser: solrRequest.getResponseParser();
- if (this.closed != null) {
- throw new AlreadyClosedException();
- }
if (onComplete != null) {
// This async call only suitable for indexing since the response size is limited by 5MB
req.onRequestQueued(asyncTracker.queuedListener).send(new BufferingResponseListener(5 * 1024 * 1024) {
@@ -895,9 +885,6 @@ public class Http2SolrClient extends SolrClient {
}
public synchronized void waitForComplete() {
- if (Http2SolrClient.this.closed != null) {
- throw new IllegalStateException("Already closed! " + Http2SolrClient.this.closed );
- }
if (log.isDebugEnabled()) log.debug("Before wait for outstanding requests registered: {} arrived: {}", phaser.getRegisteredParties(), phaser.getArrivedParties());
int arrival = phaser.arriveAndAwaitAdvance();