|
@@ -157,11 +157,12 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
request.getSearchRequest().searchType(SearchType.DFS_QUERY_THEN_FETCH);
|
|
|
}
|
|
|
|
|
|
- AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
- assertNotNull(response.getSearchResponse());
|
|
|
- assertTrue(response.isRunning());
|
|
|
-
|
|
|
- {
|
|
|
+ final String responseId;
|
|
|
+ final AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
+ try {
|
|
|
+ responseId = response.getId();
|
|
|
+ assertNotNull(response.getSearchResponse());
|
|
|
+ assertTrue(response.isRunning());
|
|
|
SearchResponse.Clusters clusters = response.getSearchResponse().getClusters();
|
|
|
assertThat(clusters.getTotal(), equalTo(2));
|
|
|
assertTrue("search cluster results should be marked as partial", clusters.hasPartialResults());
|
|
@@ -173,14 +174,16 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
SearchResponse.Cluster remoteClusterSearchInfo = clusters.getCluster(REMOTE_CLUSTER);
|
|
|
assertNotNull(remoteClusterSearchInfo);
|
|
|
assertThat(localClusterSearchInfo.getStatus(), equalTo(SearchResponse.Cluster.Status.RUNNING));
|
|
|
+ } finally {
|
|
|
+ response.decRef();
|
|
|
}
|
|
|
|
|
|
SearchListenerPlugin.waitSearchStarted();
|
|
|
SearchListenerPlugin.allowQueryPhase();
|
|
|
|
|
|
waitForSearchTasksToFinish();
|
|
|
- {
|
|
|
- AsyncSearchResponse finishedResponse = getAsyncSearch(response.getId());
|
|
|
+ final AsyncSearchResponse finishedResponse = getAsyncSearch(responseId);
|
|
|
+ try {
|
|
|
assertFalse(finishedResponse.isPartial());
|
|
|
|
|
|
SearchResponse.Clusters clusters = finishedResponse.getSearchResponse().getClusters();
|
|
@@ -211,11 +214,13 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
assertThat(remoteClusterSearchInfo.getFailedShards(), equalTo(0));
|
|
|
assertThat(remoteClusterSearchInfo.getFailures().size(), equalTo(0));
|
|
|
assertThat(remoteClusterSearchInfo.getTook().millis(), greaterThan(0L));
|
|
|
+ } finally {
|
|
|
+ finishedResponse.decRef();
|
|
|
}
|
|
|
|
|
|
// check that the async_search/status response includes the same cluster details
|
|
|
{
|
|
|
- AsyncStatusResponse statusResponse = getAsyncStatus(response.getId());
|
|
|
+ AsyncStatusResponse statusResponse = getAsyncStatus(responseId);
|
|
|
assertFalse(statusResponse.isPartial());
|
|
|
|
|
|
SearchResponse.Clusters clusters = statusResponse.getClusters();
|
|
@@ -276,11 +281,12 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
|
|
|
boolean minimizeRoundtrips = TransportSearchAction.shouldMinimizeRoundtrips(request.getSearchRequest());
|
|
|
|
|
|
- AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
- assertNotNull(response.getSearchResponse());
|
|
|
- assertTrue(response.isRunning());
|
|
|
-
|
|
|
- {
|
|
|
+ final String responseId;
|
|
|
+ final AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
+ try {
|
|
|
+ responseId = response.getId();
|
|
|
+ assertNotNull(response.getSearchResponse());
|
|
|
+ assertTrue(response.isRunning());
|
|
|
SearchResponse.Clusters clusters = response.getSearchResponse().getClusters();
|
|
|
assertThat(clusters.getTotal(), equalTo(2));
|
|
|
assertTrue("search cluster results should be marked as partial", clusters.hasPartialResults());
|
|
@@ -292,14 +298,16 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
SearchResponse.Cluster remoteClusterSearchInfo = clusters.getCluster(REMOTE_CLUSTER);
|
|
|
assertNotNull(remoteClusterSearchInfo);
|
|
|
assertThat(localClusterSearchInfo.getStatus(), equalTo(SearchResponse.Cluster.Status.RUNNING));
|
|
|
+ } finally {
|
|
|
+ response.decRef();
|
|
|
}
|
|
|
|
|
|
SearchListenerPlugin.waitSearchStarted();
|
|
|
SearchListenerPlugin.allowQueryPhase();
|
|
|
|
|
|
waitForSearchTasksToFinish();
|
|
|
- {
|
|
|
- AsyncSearchResponse finishedResponse = getAsyncSearch(response.getId());
|
|
|
+ final AsyncSearchResponse finishedResponse = getAsyncSearch(responseId);
|
|
|
+ try {
|
|
|
assertNotNull(finishedResponse);
|
|
|
assertFalse(finishedResponse.isPartial());
|
|
|
|
|
@@ -341,9 +349,11 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
assertThat(remoteClusterSearchInfo.getFailedShards(), equalTo(0));
|
|
|
assertThat(remoteClusterSearchInfo.getFailures().size(), equalTo(0));
|
|
|
assertThat(remoteClusterSearchInfo.getTook().millis(), greaterThanOrEqualTo(0L));
|
|
|
+ } finally {
|
|
|
+ finishedResponse.decRef();
|
|
|
}
|
|
|
{
|
|
|
- AsyncStatusResponse statusResponse = getAsyncStatus(response.getId());
|
|
|
+ AsyncStatusResponse statusResponse = getAsyncStatus(responseId);
|
|
|
assertNotNull(statusResponse);
|
|
|
assertFalse(statusResponse.isPartial());
|
|
|
|
|
@@ -413,13 +423,17 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
|
|
|
boolean minimizeRoundtrips = TransportSearchAction.shouldMinimizeRoundtrips(request.getSearchRequest());
|
|
|
|
|
|
- AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
- assertNotNull(response.getSearchResponse());
|
|
|
-
|
|
|
- waitForSearchTasksToFinish();
|
|
|
-
|
|
|
- {
|
|
|
- AsyncSearchResponse finishedResponse = getAsyncSearch(response.getId());
|
|
|
+ final AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
+ final String responseId;
|
|
|
+ try {
|
|
|
+ assertNotNull(response.getSearchResponse());
|
|
|
+ waitForSearchTasksToFinish();
|
|
|
+ responseId = response.getId();
|
|
|
+ } finally {
|
|
|
+ response.decRef();
|
|
|
+ }
|
|
|
+ final AsyncSearchResponse finishedResponse = getAsyncSearch(responseId);
|
|
|
+ try {
|
|
|
assertTrue(finishedResponse.isPartial());
|
|
|
|
|
|
SearchResponse.Clusters clusters = finishedResponse.getSearchResponse().getClusters();
|
|
@@ -447,6 +461,8 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
: SearchResponse.Cluster.Status.FAILED;
|
|
|
assertThat(remoteClusterSearchInfo.getStatus(), equalTo(expectedStatus));
|
|
|
assertAllShardsFailed(minimizeRoundtrips, remoteClusterSearchInfo, remoteNumShards);
|
|
|
+ } finally {
|
|
|
+ finishedResponse.decRef();
|
|
|
}
|
|
|
// check that the async_search/status response includes the same cluster details
|
|
|
{
|
|
@@ -505,11 +521,10 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
ThrowingQueryBuilder queryBuilder = new ThrowingQueryBuilder(randomLong(), new IllegalStateException("index corrupted"), 0);
|
|
|
request.getSearchRequest().source(new SearchSourceBuilder().query(queryBuilder).size(10));
|
|
|
|
|
|
- AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
- assertNotNull(response.getSearchResponse());
|
|
|
- assertTrue(response.isRunning());
|
|
|
-
|
|
|
- {
|
|
|
+ final AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
+ try {
|
|
|
+ assertNotNull(response.getSearchResponse());
|
|
|
+ assertTrue(response.isRunning());
|
|
|
SearchResponse.Clusters clusters = response.getSearchResponse().getClusters();
|
|
|
assertThat(clusters.getTotal(), equalTo(2));
|
|
|
assertTrue("search cluster results should be marked as partial", clusters.hasPartialResults());
|
|
@@ -521,6 +536,8 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
SearchResponse.Cluster remoteClusterSearchInfo = clusters.getCluster(REMOTE_CLUSTER);
|
|
|
assertNotNull(remoteClusterSearchInfo);
|
|
|
assertThat(localClusterSearchInfo.getStatus(), equalTo(SearchResponse.Cluster.Status.RUNNING));
|
|
|
+ } finally {
|
|
|
+ response.decRef();
|
|
|
}
|
|
|
|
|
|
SearchListenerPlugin.waitSearchStarted();
|
|
@@ -528,8 +545,8 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
|
|
|
waitForSearchTasksToFinish();
|
|
|
|
|
|
- {
|
|
|
- AsyncSearchResponse finishedResponse = getAsyncSearch(response.getId());
|
|
|
+ final AsyncSearchResponse finishedResponse = getAsyncSearch(response.getId());
|
|
|
+ try {
|
|
|
assertTrue(finishedResponse.isPartial());
|
|
|
|
|
|
SearchResponse.Clusters clusters = finishedResponse.getSearchResponse().getClusters();
|
|
@@ -563,6 +580,8 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
assertThat(remoteClusterSearchInfo.getTook().millis(), greaterThan(0L));
|
|
|
ShardSearchFailure remoteShardSearchFailure = remoteClusterSearchInfo.getFailures().get(0);
|
|
|
assertTrue("should have 'index corrupted' in reason", remoteShardSearchFailure.reason().contains("index corrupted"));
|
|
|
+ } finally {
|
|
|
+ finishedResponse.decRef();
|
|
|
}
|
|
|
// check that the async_search/status response includes the same cluster details
|
|
|
{
|
|
@@ -635,10 +654,10 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
|
|
|
boolean minimizeRoundtrips = TransportSearchAction.shouldMinimizeRoundtrips(request.getSearchRequest());
|
|
|
|
|
|
- AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
- assertNotNull(response.getSearchResponse());
|
|
|
- assertTrue(response.isRunning());
|
|
|
- {
|
|
|
+ final AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
+ try {
|
|
|
+ assertNotNull(response.getSearchResponse());
|
|
|
+ assertTrue(response.isRunning());
|
|
|
SearchResponse.Clusters clusters = response.getSearchResponse().getClusters();
|
|
|
assertThat(clusters.getTotal(), equalTo(2));
|
|
|
assertTrue("search cluster results should be marked as partial", clusters.hasPartialResults());
|
|
@@ -650,6 +669,8 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
SearchResponse.Cluster remoteClusterSearchInfo = clusters.getCluster(REMOTE_CLUSTER);
|
|
|
assertNotNull(remoteClusterSearchInfo);
|
|
|
assertThat(localClusterSearchInfo.getStatus(), equalTo(SearchResponse.Cluster.Status.RUNNING));
|
|
|
+ } finally {
|
|
|
+ response.decRef();
|
|
|
}
|
|
|
|
|
|
SearchListenerPlugin.waitSearchStarted();
|
|
@@ -657,8 +678,8 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
|
|
|
waitForSearchTasksToFinish();
|
|
|
|
|
|
- {
|
|
|
- AsyncSearchResponse finishedResponse = getAsyncSearch(response.getId());
|
|
|
+ final AsyncSearchResponse finishedResponse = getAsyncSearch(response.getId());
|
|
|
+ try {
|
|
|
assertTrue(finishedResponse.isPartial());
|
|
|
|
|
|
SearchResponse.Clusters clusters = finishedResponse.getSearchResponse().getClusters();
|
|
@@ -707,6 +728,8 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
assertFalse(remoteClusterSearchInfo.isTimedOut());
|
|
|
ShardSearchFailure remoteShardSearchFailure = remoteClusterSearchInfo.getFailures().get(0);
|
|
|
assertTrue("should have 'index corrupted' in reason", remoteShardSearchFailure.reason().contains("index corrupted"));
|
|
|
+ } finally {
|
|
|
+ finishedResponse.decRef();
|
|
|
}
|
|
|
// check that the async_search/status response includes the same cluster details
|
|
|
{
|
|
@@ -780,15 +803,16 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
request.getSearchRequest().searchType(SearchType.DFS_QUERY_THEN_FETCH);
|
|
|
}
|
|
|
|
|
|
- AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
- assertNotNull(response.getSearchResponse());
|
|
|
- assertTrue(response.isRunning());
|
|
|
+ final AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
+ try {
|
|
|
+ assertNotNull(response.getSearchResponse());
|
|
|
+ assertTrue(response.isRunning());
|
|
|
+
|
|
|
+ boolean minimizeRoundtrips = TransportSearchAction.shouldMinimizeRoundtrips(request.getSearchRequest());
|
|
|
|
|
|
- boolean minimizeRoundtrips = TransportSearchAction.shouldMinimizeRoundtrips(request.getSearchRequest());
|
|
|
+ assertNotNull(response.getSearchResponse());
|
|
|
+ assertTrue(response.isRunning());
|
|
|
|
|
|
- assertNotNull(response.getSearchResponse());
|
|
|
- assertTrue(response.isRunning());
|
|
|
- {
|
|
|
SearchResponse.Clusters clusters = response.getSearchResponse().getClusters();
|
|
|
assertThat(clusters.getTotal(), equalTo(2));
|
|
|
assertTrue("search cluster results should be marked as partial", clusters.hasPartialResults());
|
|
@@ -800,6 +824,8 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
SearchResponse.Cluster remoteClusterSearchInfo = clusters.getCluster(REMOTE_CLUSTER);
|
|
|
assertNotNull(remoteClusterSearchInfo);
|
|
|
assertThat(localClusterSearchInfo.getStatus(), equalTo(SearchResponse.Cluster.Status.RUNNING));
|
|
|
+ } finally {
|
|
|
+ response.decRef();
|
|
|
}
|
|
|
|
|
|
SearchListenerPlugin.waitSearchStarted();
|
|
@@ -807,8 +833,8 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
|
|
|
waitForSearchTasksToFinish();
|
|
|
|
|
|
- {
|
|
|
- AsyncSearchResponse finishedResponse = getAsyncSearch(response.getId());
|
|
|
+ final AsyncSearchResponse finishedResponse = getAsyncSearch(response.getId());
|
|
|
+ try {
|
|
|
assertFalse(finishedResponse.isPartial());
|
|
|
|
|
|
SearchResponse.Clusters clusters = finishedResponse.getSearchResponse().getClusters();
|
|
@@ -839,6 +865,8 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
|
|
|
assertNotNull(remoteClusterSearchInfo.getTook());
|
|
|
assertFalse(remoteClusterSearchInfo.isTimedOut());
|
|
|
+ } finally {
|
|
|
+ finishedResponse.decRef();
|
|
|
}
|
|
|
// check that the async_search/status response includes the same cluster details
|
|
|
{
|
|
@@ -902,13 +930,18 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
request.getSearchRequest().searchType(SearchType.DFS_QUERY_THEN_FETCH);
|
|
|
}
|
|
|
|
|
|
- AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
- assertNotNull(response.getSearchResponse());
|
|
|
-
|
|
|
- waitForSearchTasksToFinish();
|
|
|
+ final String responseId;
|
|
|
+ final AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
+ try {
|
|
|
+ assertNotNull(response.getSearchResponse());
|
|
|
+ waitForSearchTasksToFinish();
|
|
|
+ responseId = response.getId();
|
|
|
+ } finally {
|
|
|
+ response.decRef();
|
|
|
+ }
|
|
|
|
|
|
- {
|
|
|
- AsyncSearchResponse finishedResponse = getAsyncSearch(response.getId());
|
|
|
+ final AsyncSearchResponse finishedResponse = getAsyncSearch(responseId);
|
|
|
+ try {
|
|
|
assertTrue(finishedResponse.getSearchResponse().isTimedOut());
|
|
|
assertTrue(finishedResponse.isPartial());
|
|
|
|
|
@@ -943,10 +976,12 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
assertThat(remoteClusterSearchInfo.getFailures().size(), equalTo(0));
|
|
|
assertThat(remoteClusterSearchInfo.getTook().millis(), greaterThanOrEqualTo(0L));
|
|
|
assertTrue(remoteClusterSearchInfo.isTimedOut());
|
|
|
+ } finally {
|
|
|
+ finishedResponse.decRef();
|
|
|
}
|
|
|
// check that the async_search/status response includes the same cluster details
|
|
|
{
|
|
|
- AsyncStatusResponse statusResponse = getAsyncStatus(response.getId());
|
|
|
+ AsyncStatusResponse statusResponse = getAsyncStatus(responseId);
|
|
|
assertTrue(statusResponse.isPartial());
|
|
|
|
|
|
SearchResponse.Clusters clusters = statusResponse.getClusters();
|
|
@@ -1006,13 +1041,19 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
}
|
|
|
request.getSearchRequest().source(new SearchSourceBuilder().query(new MatchAllQueryBuilder()).size(10));
|
|
|
|
|
|
- AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
- assertNotNull(response.getSearchResponse());
|
|
|
+ final String responseId;
|
|
|
+ final AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
+ try {
|
|
|
+ assertNotNull(response.getSearchResponse());
|
|
|
+ responseId = response.getId();
|
|
|
+ } finally {
|
|
|
+ response.decRef();
|
|
|
+ }
|
|
|
|
|
|
waitForSearchTasksToFinish();
|
|
|
|
|
|
- {
|
|
|
- AsyncSearchResponse finishedResponse = getAsyncSearch(response.getId());
|
|
|
+ final AsyncSearchResponse finishedResponse = getAsyncSearch(responseId);
|
|
|
+ try {
|
|
|
assertFalse(finishedResponse.isPartial());
|
|
|
|
|
|
SearchResponse.Clusters clusters = finishedResponse.getSearchResponse().getClusters();
|
|
@@ -1035,11 +1076,13 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
assertThat(remoteClusterSearchInfo.getFailedShards(), equalTo(0));
|
|
|
assertThat(remoteClusterSearchInfo.getFailures().size(), equalTo(0));
|
|
|
assertThat(remoteClusterSearchInfo.getTook().millis(), greaterThan(0L));
|
|
|
+ } finally {
|
|
|
+ finishedResponse.decRef();
|
|
|
}
|
|
|
|
|
|
// check that the async_search/status response includes the same cluster details
|
|
|
{
|
|
|
- AsyncStatusResponse statusResponse = getAsyncStatus(response.getId());
|
|
|
+ AsyncStatusResponse statusResponse = getAsyncStatus(responseId);
|
|
|
assertFalse(statusResponse.isPartial());
|
|
|
|
|
|
SearchResponse.Clusters clusters = statusResponse.getClusters();
|
|
@@ -1089,13 +1132,16 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
ThrowingQueryBuilder queryBuilder = new ThrowingQueryBuilder(randomLong(), new IllegalStateException("index corrupted"), 0);
|
|
|
request.getSearchRequest().source(new SearchSourceBuilder().query(queryBuilder).size(10));
|
|
|
|
|
|
- AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
- assertNotNull(response.getSearchResponse());
|
|
|
-
|
|
|
+ final AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
+ try {
|
|
|
+ assertNotNull(response.getSearchResponse());
|
|
|
+ } finally {
|
|
|
+ response.decRef();
|
|
|
+ }
|
|
|
waitForSearchTasksToFinish();
|
|
|
|
|
|
- {
|
|
|
- AsyncSearchResponse finishedResponse = getAsyncSearch(response.getId());
|
|
|
+ final AsyncSearchResponse finishedResponse = getAsyncSearch(response.getId());
|
|
|
+ try {
|
|
|
assertTrue(finishedResponse.isPartial());
|
|
|
|
|
|
SearchResponse.Clusters clusters = finishedResponse.getSearchResponse().getClusters();
|
|
@@ -1119,6 +1165,8 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
assertThat(remoteClusterSearchInfo.getTook().millis(), greaterThan(0L));
|
|
|
ShardSearchFailure remoteShardSearchFailure = remoteClusterSearchInfo.getFailures().get(0);
|
|
|
assertTrue("should have 'index corrupted' in reason", remoteShardSearchFailure.reason().contains("index corrupted"));
|
|
|
+ } finally {
|
|
|
+ finishedResponse.decRef();
|
|
|
}
|
|
|
// check that the async_search/status response includes the same cluster details
|
|
|
{
|
|
@@ -1177,12 +1225,16 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
|
|
|
boolean minimizeRoundtrips = TransportSearchAction.shouldMinimizeRoundtrips(request.getSearchRequest());
|
|
|
|
|
|
- AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
- assertNotNull(response.getSearchResponse());
|
|
|
+ final AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
+ try {
|
|
|
+ assertNotNull(response.getSearchResponse());
|
|
|
+ } finally {
|
|
|
+ response.decRef();
|
|
|
+ }
|
|
|
|
|
|
waitForSearchTasksToFinish();
|
|
|
- {
|
|
|
- AsyncSearchResponse finishedResponse = getAsyncSearch(response.getId());
|
|
|
+ final AsyncSearchResponse finishedResponse = getAsyncSearch(response.getId());
|
|
|
+ try {
|
|
|
assertTrue(finishedResponse.isPartial());
|
|
|
|
|
|
SearchResponse.Clusters clusters = finishedResponse.getSearchResponse().getClusters();
|
|
@@ -1207,6 +1259,8 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
: SearchResponse.Cluster.Status.FAILED;
|
|
|
assertThat(remoteClusterSearchInfo.getStatus(), equalTo(expectedStatus));
|
|
|
assertAllShardsFailed(minimizeRoundtrips, remoteClusterSearchInfo, remoteNumShards);
|
|
|
+ } finally {
|
|
|
+ finishedResponse.decRef();
|
|
|
}
|
|
|
// check that the async_search/status response includes the same cluster details
|
|
|
{
|
|
@@ -1254,9 +1308,13 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
request.getSearchRequest().allowPartialSearchResults(false);
|
|
|
request.getSearchRequest().source(new SearchSourceBuilder().query(new MatchAllQueryBuilder()).size(10));
|
|
|
|
|
|
- AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
- assertNotNull(response.getSearchResponse());
|
|
|
- assertTrue(response.isRunning());
|
|
|
+ final AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
+ try {
|
|
|
+ assertNotNull(response.getSearchResponse());
|
|
|
+ } finally {
|
|
|
+ response.decRef();
|
|
|
+ assertTrue(response.isRunning());
|
|
|
+ }
|
|
|
|
|
|
SearchListenerPlugin.waitSearchStarted();
|
|
|
|
|
@@ -1317,17 +1375,21 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
}
|
|
|
|
|
|
// check async search status before allowing query to continue but after cancellation
|
|
|
- AsyncSearchResponse searchResponseAfterCancellation = getAsyncSearch(response.getId());
|
|
|
- assertTrue(searchResponseAfterCancellation.isPartial());
|
|
|
- assertTrue(searchResponseAfterCancellation.isRunning());
|
|
|
- assertFalse(searchResponseAfterCancellation.getSearchResponse().isTimedOut());
|
|
|
- assertThat(searchResponseAfterCancellation.getSearchResponse().getClusters().getTotal(), equalTo(2));
|
|
|
-
|
|
|
- AsyncStatusResponse statusResponse = getAsyncStatus(response.getId());
|
|
|
- assertTrue(statusResponse.isPartial());
|
|
|
- assertTrue(statusResponse.isRunning());
|
|
|
- assertThat(statusResponse.getClusters().getTotal(), equalTo(2));
|
|
|
- assertNull(statusResponse.getCompletionStatus());
|
|
|
+ final AsyncSearchResponse searchResponseAfterCancellation = getAsyncSearch(response.getId());
|
|
|
+ try {
|
|
|
+ assertTrue(searchResponseAfterCancellation.isPartial());
|
|
|
+ assertTrue(searchResponseAfterCancellation.isRunning());
|
|
|
+ assertFalse(searchResponseAfterCancellation.getSearchResponse().isTimedOut());
|
|
|
+ assertThat(searchResponseAfterCancellation.getSearchResponse().getClusters().getTotal(), equalTo(2));
|
|
|
+
|
|
|
+ AsyncStatusResponse statusResponse = getAsyncStatus(response.getId());
|
|
|
+ assertTrue(statusResponse.isPartial());
|
|
|
+ assertTrue(statusResponse.isRunning());
|
|
|
+ assertThat(statusResponse.getClusters().getTotal(), equalTo(2));
|
|
|
+ assertNull(statusResponse.getCompletionStatus());
|
|
|
+ } finally {
|
|
|
+ searchResponseAfterCancellation.decRef();
|
|
|
+ }
|
|
|
|
|
|
} finally {
|
|
|
SearchListenerPlugin.allowQueryPhase();
|
|
@@ -1343,18 +1405,22 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
assertThat(statusResponseAfterCompletion.getClusters().getTotal(), equalTo(2));
|
|
|
assertThat(statusResponseAfterCompletion.getCompletionStatus(), equalTo(RestStatus.BAD_REQUEST));
|
|
|
|
|
|
- AsyncSearchResponse searchResponseAfterCompletion = getAsyncSearch(response.getId());
|
|
|
- assertTrue(searchResponseAfterCompletion.isPartial());
|
|
|
- assertFalse(searchResponseAfterCompletion.isRunning());
|
|
|
- assertFalse(searchResponseAfterCompletion.getSearchResponse().isTimedOut());
|
|
|
- assertThat(searchResponseAfterCompletion.getSearchResponse().getClusters().getTotal(), equalTo(2));
|
|
|
- Throwable cause = ExceptionsHelper.unwrap(searchResponseAfterCompletion.getFailure(), TaskCancelledException.class);
|
|
|
- assertNotNull("TaskCancelledException should be in the causal chain", cause);
|
|
|
- String json = Strings.toString(
|
|
|
- ChunkedToXContent.wrapAsToXContent(searchResponseAfterCompletion)
|
|
|
- .toXContent(XContentFactory.jsonBuilder(), ToXContent.EMPTY_PARAMS)
|
|
|
- );
|
|
|
- assertThat(json, matchesRegex(".*task (was)?\s*cancelled.*"));
|
|
|
+ final AsyncSearchResponse searchResponseAfterCompletion = getAsyncSearch(response.getId());
|
|
|
+ try {
|
|
|
+ assertTrue(searchResponseAfterCompletion.isPartial());
|
|
|
+ assertFalse(searchResponseAfterCompletion.isRunning());
|
|
|
+ assertFalse(searchResponseAfterCompletion.getSearchResponse().isTimedOut());
|
|
|
+ assertThat(searchResponseAfterCompletion.getSearchResponse().getClusters().getTotal(), equalTo(2));
|
|
|
+ Throwable cause = ExceptionsHelper.unwrap(searchResponseAfterCompletion.getFailure(), TaskCancelledException.class);
|
|
|
+ assertNotNull("TaskCancelledException should be in the causal chain", cause);
|
|
|
+ String json = Strings.toString(
|
|
|
+ ChunkedToXContent.wrapAsToXContent(searchResponseAfterCompletion)
|
|
|
+ .toXContent(XContentFactory.jsonBuilder(), ToXContent.EMPTY_PARAMS)
|
|
|
+ );
|
|
|
+ assertThat(json, matchesRegex(".*task (was)?\s*cancelled.*"));
|
|
|
+ } finally {
|
|
|
+ searchResponseAfterCompletion.decRef();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public void testCancelViaAsyncSearchDelete() throws Exception {
|
|
@@ -1374,9 +1440,13 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
request.getSearchRequest().allowPartialSearchResults(false);
|
|
|
request.getSearchRequest().source(new SearchSourceBuilder().query(new MatchAllQueryBuilder()).size(10));
|
|
|
|
|
|
- AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
- assertNotNull(response.getSearchResponse());
|
|
|
- assertTrue(response.isRunning());
|
|
|
+ final AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
+ try {
|
|
|
+ assertNotNull(response.getSearchResponse());
|
|
|
+ assertTrue(response.isRunning());
|
|
|
+ } finally {
|
|
|
+ response.decRef();
|
|
|
+ }
|
|
|
|
|
|
SearchListenerPlugin.waitSearchStarted();
|
|
|
|
|
@@ -1477,9 +1547,13 @@ public class CrossClusterAsyncSearchIT extends AbstractMultiClustersTestCase {
|
|
|
request.setWaitForCompletionTimeout(TimeValue.timeValueMillis(1));
|
|
|
request.setKeepOnCompletion(true);
|
|
|
|
|
|
- AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
- assertNotNull(response.getSearchResponse());
|
|
|
- assertTrue(response.isRunning());
|
|
|
+ final AsyncSearchResponse response = submitAsyncSearch(request);
|
|
|
+ try {
|
|
|
+ assertNotNull(response.getSearchResponse());
|
|
|
+ assertTrue(response.isRunning());
|
|
|
+ } finally {
|
|
|
+ response.decRef();
|
|
|
+ }
|
|
|
|
|
|
SearchListenerPlugin.waitSearchStarted();
|
|
|
|