9696import java .util .concurrent .CountDownLatch ;
9797import java .util .concurrent .TimeUnit ;
9898import java .util .concurrent .atomic .AtomicReference ;
99+ import java .util .function .Predicate ;
99100
100101import static org .hamcrest .CoreMatchers .anyOf ;
101102import static org .hamcrest .CoreMatchers .equalTo ;
@@ -675,12 +676,12 @@ public void testTermsAggs() throws Exception {
675676 {
676677 SearchRequest searchRequest = initLocalAndRemoteSearchRequest ();
677678 searchRequest .source (buildTermsAggsSource ());
678- duelRequest (searchRequest , CCSDuelIT ::assertAggs );
679+ duelRequest (searchRequest , CCSDuelIT ::assertAggs , true , path -> path . endsWith ( "/doc_count_error_upper_bound" ) == false );
679680 }
680681 {
681682 SearchRequest searchRequest = initRemoteOnlySearchRequest ();
682683 searchRequest .source (buildTermsAggsSource ());
683- duelRequest (searchRequest , CCSDuelIT ::assertAggs );
684+ duelRequest (searchRequest , CCSDuelIT ::assertAggs , true , path -> path . endsWith ( "/doc_count_error_upper_bound" ) == false );
684685 }
685686 }
686687
@@ -689,12 +690,12 @@ public void testTermsAggsWithProfile() throws Exception {
689690 {
690691 SearchRequest searchRequest = initLocalAndRemoteSearchRequest ();
691692 searchRequest .source (buildTermsAggsSource ().profile (true ));
692- duelRequest (searchRequest , CCSDuelIT ::assertAggs );
693+ duelRequest (searchRequest , CCSDuelIT ::assertAggs , true , path -> path . endsWith ( "/doc_count_error_upper_bound" ) == false );
693694 }
694695 {
695696 SearchRequest searchRequest = initRemoteOnlySearchRequest ();
696697 searchRequest .source (buildTermsAggsSource ().profile (true ));
697- duelRequest (searchRequest , CCSDuelIT ::assertAggs );
698+ duelRequest (searchRequest , CCSDuelIT ::assertAggs , true , path -> path . endsWith ( "/doc_count_error_upper_bound" ) == false );
698699 }
699700 }
700701
@@ -875,7 +876,7 @@ public void testShardFailures() throws Exception {
875876 assertNull (response .evaluate ("suggest" ));
876877 assertThat (response .evaluateArraySize ("hits.hits" ), greaterThan (0 ));
877878 assertThat (response .evaluate ("_shards.failed" ), greaterThanOrEqualTo (2 ));
878- }, compareAsyncAndSyncResponses );
879+ }, compareAsyncAndSyncResponses , path -> true );
879880 }
880881
881882 public void testTermSuggester () throws Exception {
@@ -984,18 +985,19 @@ private static SearchRequest initRemoteOnlySearchRequest() {
984985 }
985986
986987 private void duelRequest (SearchRequest searchRequest , CheckedConsumer <ObjectPath , IOException > responseChecker ) throws Exception {
987- duelRequest (searchRequest , responseChecker , true );
988+ duelRequest (searchRequest , responseChecker , true , p -> true );
988989 }
989990
990991 private void duelRequest (
991992 SearchRequest searchRequest ,
992993 CheckedConsumer <ObjectPath , IOException > responseChecker ,
993- boolean compareAsyncToSyncResponses
994+ boolean compareAsyncToSyncResponses ,
995+ Predicate <String > pathFilter
994996 ) throws Exception {
995- Map <String , Object > syncResponseMap = duelSearchSync (searchRequest , responseChecker );
996- Map <String , Object > asyncResponseMap = duelSearchAsync (searchRequest , responseChecker );
997+ Map <String , Object > syncResponseMap = duelSearchSync (searchRequest , responseChecker , pathFilter );
998+ Map <String , Object > asyncResponseMap = duelSearchAsync (searchRequest , responseChecker , pathFilter );
997999 if (compareAsyncToSyncResponses ) {
998- compareResponseMaps (syncResponseMap , asyncResponseMap , "Comparing sync_search CCS vs. async_search CCS" );
1000+ compareResponseMaps (syncResponseMap , asyncResponseMap , "Comparing sync_search CCS vs. async_search CCS" , pathFilter );
9991001 }
10001002 }
10011003
@@ -1004,11 +1006,24 @@ private void duelRequest(
10041006 */
10051007 private static Map <String , Object > duelSearchSync (SearchRequest searchRequest , CheckedConsumer <ObjectPath , IOException > responseChecker )
10061008 throws Exception {
1009+ return duelSearchSync (searchRequest , responseChecker , p -> true );
1010+ }
1011+
1012+ /**
1013+ * @return responseMap from one of the Synchronous Search Requests
1014+ */
1015+ private static Map <String , Object > duelSearchSync (
1016+ SearchRequest searchRequest ,
1017+ CheckedConsumer <ObjectPath , IOException > responseChecker ,
1018+ Predicate <String > pathFilter
1019+ ) throws Exception {
10071020 CountDownLatch latch = new CountDownLatch (2 );
1021+
10081022 AtomicReference <Exception > exception1 = new AtomicReference <>();
10091023 AtomicReference <Response > minimizeRoundtripsResponse = new AtomicReference <>();
10101024 searchRequest .setCcsMinimizeRoundtrips (true );
10111025 submitSyncSearch (searchRequest , minimizeRoundtripsResponse , exception1 , latch );
1026+
10121027 AtomicReference <Exception > exception2 = new AtomicReference <>();
10131028 AtomicReference <Response > fanOutResponse = new AtomicReference <>();
10141029 searchRequest .setCcsMinimizeRoundtrips (false );
@@ -1075,7 +1090,12 @@ private static Map<String, Object> duelSearchSync(SearchRequest searchRequest, C
10751090 Map <String , Object > minimizeRoundtripsResponseMap = responseToMap (minimizeRoundtripsSearchResponse );
10761091 if (minimizeRoundtripsSearchResponse .evaluate ("_clusters" ) != null && fanOutSearchResponse .evaluate ("_clusters" ) != null ) {
10771092 Map <String , Object > fanOutResponseMap = responseToMap (fanOutSearchResponse );
1078- compareResponseMaps (minimizeRoundtripsResponseMap , fanOutResponseMap , "Comparing sync_search minimizeRoundTrip vs. fanOut" );
1093+ compareResponseMaps (
1094+ minimizeRoundtripsResponseMap ,
1095+ fanOutResponseMap ,
1096+ "Comparing sync_search minimizeRoundTrip vs. fanOut" ,
1097+ pathFilter
1098+ );
10791099 assertThat (
10801100 minimizeRoundtripsSearchResponse .evaluate ("_shards.skipped" ),
10811101 lessThanOrEqualTo ((Integer ) fanOutSearchResponse .evaluate ("_shards.skipped" ))
@@ -1123,6 +1143,17 @@ public void onFailure(Exception exception) {
11231143 private static Map <String , Object > duelSearchAsync (
11241144 SearchRequest searchRequest ,
11251145 CheckedConsumer <ObjectPath , IOException > responseChecker
1146+ ) throws Exception {
1147+ return duelSearchAsync (searchRequest , responseChecker , p -> true );
1148+ }
1149+
1150+ /**
1151+ * @return responseMap from one of the async searches
1152+ */
1153+ private static Map <String , Object > duelSearchAsync (
1154+ SearchRequest searchRequest ,
1155+ CheckedConsumer <ObjectPath , IOException > responseChecker ,
1156+ Predicate <String > pathFilter
11261157 ) throws Exception {
11271158 searchRequest .setCcsMinimizeRoundtrips (true );
11281159 ObjectPath minimizeRoundtripsResponse = submitAsyncSearch (searchRequest , TimeValue .timeValueSeconds (1 ));
@@ -1183,7 +1214,12 @@ private static Map<String, Object> duelSearchAsync(
11831214 Map <String , Object > minimizeRoundtripsResponseMap = responseToMap (minimizeRoundtripsResponse );
11841215 if (minimizeRoundtripsResponse .evaluate ("_clusters" ) != null && fanOutResponse .evaluate ("_clusters" ) != null ) {
11851216 Map <String , Object > fanOutResponseMap = responseToMap (fanOutResponse );
1186- compareResponseMaps (minimizeRoundtripsResponseMap , fanOutResponseMap , "Comparing async_search minimizeRoundTrip vs. fanOut" );
1217+ compareResponseMaps (
1218+ minimizeRoundtripsResponseMap ,
1219+ fanOutResponseMap ,
1220+ "Comparing async_search minimizeRoundTrip vs. fanOut" ,
1221+ pathFilter
1222+ );
11871223 assertThat (
11881224 minimizeRoundtripsResponse .evaluate ("_shards.skipped" ),
11891225 lessThanOrEqualTo ((Integer ) fanOutResponse .evaluate ("_shards.skipped" ))
@@ -1192,8 +1228,13 @@ private static Map<String, Object> duelSearchAsync(
11921228 return minimizeRoundtripsResponseMap ;
11931229 }
11941230
1195- private static void compareResponseMaps (Map <String , Object > responseMap1 , Map <String , Object > responseMap2 , String info ) {
1196- String diff = XContentTestUtils .differenceBetweenMapsIgnoringArrayOrder (responseMap1 , responseMap2 );
1231+ private static void compareResponseMaps (
1232+ Map <String , Object > responseMap1 ,
1233+ Map <String , Object > responseMap2 ,
1234+ String info ,
1235+ Predicate <String > pathFilter
1236+ ) {
1237+ String diff = XContentTestUtils .differenceBetweenMapsIgnoringArrayOrder (responseMap1 , responseMap2 , pathFilter );
11971238 if (diff != null ) {
11981239 NotEqualMessageBuilder builder = new NotEqualMessageBuilder ();
11991240 builder .compareMaps (responseMap1 , responseMap2 );
0 commit comments