Skip to content

Commit 7a05826

Browse files
Fixing issues caused by 3.0 version bumping (#696)
* Update BaseNodeRequest dependency Signed-off-by: Jackie Han <[email protected]> * Migrate client transports to Apache HttpClient / Core 5.x Signed-off-by: Jackie Han <[email protected]> * Address spotlessCheck failures Signed-off-by: Jackie Han <[email protected]> * Upgrade bwc version because 1.1.0 cannot be upgraded directly to version 3.0.0 Signed-off-by: Jackie Han <[email protected]> * update bwc version to 2.4 Signed-off-by: Jackie Han <[email protected]> * Update bwc version Signed-off-by: Jackie Han <[email protected]> * update bwc download link Signed-off-by: Jackie Han <[email protected]> * use latest 2.4 build for bwc test Signed-off-by: Jackie Han <[email protected]> * move bwc constants to build script block Signed-off-by: Jackie Han <[email protected]> Signed-off-by: Jackie Han <[email protected]>
1 parent 24232ae commit 7a05826

18 files changed

+97
-78
lines changed

build.gradle

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,15 @@ buildscript {
3838
'/latest/linux/x64/tar/builds/opensearch/plugins/opensearch-job-scheduler-' + plugin_no_snapshot + '.zip'
3939
anomaly_detection_build_download = 'https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/' + opensearch_no_snapshot +
4040
'/latest/linux/x64/tar/builds/opensearch/plugins/opensearch-anomaly-detection-' + plugin_no_snapshot + '.zip'
41-
bwcOpenSearchADDownload = 'https://ci.opensearch.org/ci/dbc/bundle-build/1.1.0/20210930/linux/x64/builds/opensearch/plugins/' +
42-
'opensearch-anomaly-detection-1.1.0.0.zip'
43-
bwcOpenSearchJSDownload = 'https://ci.opensearch.org/ci/dbc/bundle-build/1.1.0/20210930/linux/x64/builds/opensearch/plugins/' +
44-
'opensearch-job-scheduler-1.1.0.0.zip'
41+
bwcOpenSearchADDownload = 'https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/2.4.0/latest/linux/x64/tar/builds/' +
42+
'opensearch/plugins/opensearch-anomaly-detection-2.4.0.0.zip'
43+
bwcOpenSearchJSDownload = 'https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/2.4.0/latest/linux/x64/tar/builds/' +
44+
'opensearch/plugins/opensearch-job-scheduler-2.4.0.0.zip'
45+
bwcVersion = "2.4.0.0"
46+
baseName = "adBwcCluster"
47+
bwcFilePath = "src/test/resources/org/opensearch/ad/bwc/"
48+
bwcJobSchedulerPath = bwcFilePath + "job-scheduler/"
49+
bwcAnomalyDetectionPath = bwcFilePath + "anomaly-detection/"
4550

4651
// gradle build won't print logs during test by default unless there is a failure.
4752
// It is useful to record intermediately information like prediction precision and recall.
@@ -136,7 +141,7 @@ configurations.all {
136141
force "joda-time:joda-time:${versions.joda}"
137142
force "com.fasterxml.jackson.core:jackson-core:2.13.4"
138143
force "commons-logging:commons-logging:${versions.commonslogging}"
139-
force "org.apache.httpcomponents:httpcore:${versions.httpcore}"
144+
force "org.apache.httpcomponents:httpcore5:${versions.httpcore5}"
140145
force "commons-codec:commons-codec:${versions.commonscodec}"
141146

142147
force "org.mockito:mockito-core:2.25.0"
@@ -372,17 +377,11 @@ task integTestRemote(type: RestIntegTestTask) {
372377
}
373378
}
374379

375-
String bwcVersion = "1.1.0.0"
376-
String baseName = "adBwcCluster"
377-
String bwcFilePath = "src/test/resources/org/opensearch/ad/bwc/"
378-
String bwcJobSchedulerPath = bwcFilePath + "job-scheduler/"
379-
String bwcAnomalyDetectionPath = bwcFilePath + "anomaly-detection/"
380-
381380
2.times {i ->
382381
testClusters {
383382
"${baseName}$i" {
384383
testDistribution = "ARCHIVE"
385-
versions = ["1.1.0", opensearch_version]
384+
versions = ["2.4.0", opensearch_version]
386385
numberOfNodes = 3
387386
plugin(provider(new Callable<RegularFile>(){
388387
@Override

src/main/java/org/opensearch/ad/transport/ADCancelTaskNodeRequest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313

1414
import java.io.IOException;
1515

16-
import org.opensearch.action.support.nodes.BaseNodeRequest;
1716
import org.opensearch.common.io.stream.StreamInput;
1817
import org.opensearch.common.io.stream.StreamOutput;
18+
import org.opensearch.transport.TransportRequest;
1919

20-
public class ADCancelTaskNodeRequest extends BaseNodeRequest {
20+
public class ADCancelTaskNodeRequest extends TransportRequest {
2121
private String detectorId;
2222
private String detectorTaskId;
2323
private String userName;

src/main/java/org/opensearch/ad/transport/ADStatsNodeRequest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@
1313

1414
import java.io.IOException;
1515

16-
import org.opensearch.action.support.nodes.BaseNodeRequest;
1716
import org.opensearch.common.io.stream.StreamInput;
1817
import org.opensearch.common.io.stream.StreamOutput;
18+
import org.opensearch.transport.TransportRequest;
1919

2020
/**
2121
* ADStatsNodeRequest to get a nodes stat
2222
*/
23-
public class ADStatsNodeRequest extends BaseNodeRequest {
23+
public class ADStatsNodeRequest extends TransportRequest {
2424
private ADStatsRequest request;
2525

2626
/**

src/main/java/org/opensearch/ad/transport/ADTaskProfileNodeRequest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313

1414
import java.io.IOException;
1515

16-
import org.opensearch.action.support.nodes.BaseNodeRequest;
1716
import org.opensearch.common.io.stream.StreamInput;
1817
import org.opensearch.common.io.stream.StreamOutput;
18+
import org.opensearch.transport.TransportRequest;
1919

20-
public class ADTaskProfileNodeRequest extends BaseNodeRequest {
20+
public class ADTaskProfileNodeRequest extends TransportRequest {
2121
private String detectorId;
2222

2323
public ADTaskProfileNodeRequest(StreamInput in) throws IOException {

src/main/java/org/opensearch/ad/transport/CronNodeRequest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
1313

1414
import java.io.IOException;
1515

16-
import org.opensearch.action.support.nodes.BaseNodeRequest;
1716
import org.opensearch.common.io.stream.StreamInput;
17+
import org.opensearch.transport.TransportRequest;
1818

1919
/**
2020
* Delete model represents the request to an individual node
2121
*/
22-
public class CronNodeRequest extends BaseNodeRequest {
22+
public class CronNodeRequest extends TransportRequest {
2323

2424
public CronNodeRequest() {}
2525

src/main/java/org/opensearch/ad/transport/DeleteModelNodeRequest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@
1313

1414
import java.io.IOException;
1515

16-
import org.opensearch.action.support.nodes.BaseNodeRequest;
1716
import org.opensearch.common.io.stream.StreamInput;
1817
import org.opensearch.common.io.stream.StreamOutput;
18+
import org.opensearch.transport.TransportRequest;
1919

2020
/**
2121
* Delete model represents the request to an individual node
2222
*/
23-
public class DeleteModelNodeRequest extends BaseNodeRequest {
23+
public class DeleteModelNodeRequest extends TransportRequest {
2424

2525
private String adID;
2626

src/main/java/org/opensearch/ad/transport/ProfileNodeRequest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@
1414
import java.io.IOException;
1515
import java.util.Set;
1616

17-
import org.opensearch.action.support.nodes.BaseNodeRequest;
1817
import org.opensearch.ad.model.DetectorProfileName;
1918
import org.opensearch.common.io.stream.StreamInput;
2019
import org.opensearch.common.io.stream.StreamOutput;
20+
import org.opensearch.transport.TransportRequest;
2121

2222
/**
2323
* Class representing a nodes's profile request
2424
*/
25-
public class ProfileNodeRequest extends BaseNodeRequest {
25+
public class ProfileNodeRequest extends TransportRequest {
2626
private ProfileRequest request;
2727

2828
public ProfileNodeRequest(StreamInput in) throws IOException {

src/test/java/org/opensearch/ad/AnomalyDetectorRestTestCase.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
import java.util.Locale;
2222
import java.util.Map;
2323

24-
import org.apache.http.HttpHeaders;
25-
import org.apache.http.message.BasicHeader;
24+
import org.apache.hc.core5.http.HttpHeaders;
25+
import org.apache.hc.core5.http.message.BasicHeader;
2626
import org.opensearch.ad.model.ADTask;
2727
import org.opensearch.ad.model.AnomalyDetector;
2828
import org.opensearch.ad.model.AnomalyDetectorExecutionInput;

src/test/java/org/opensearch/ad/HistoricalAnalysisRestTestCase.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@
2222
import java.util.Set;
2323
import java.util.function.ToDoubleFunction;
2424

25-
import org.apache.http.HttpHeaders;
26-
import org.apache.http.message.BasicHeader;
27-
import org.apache.http.util.EntityUtils;
25+
import org.apache.hc.core5.http.HttpHeaders;
26+
import org.apache.hc.core5.http.ParseException;
27+
import org.apache.hc.core5.http.io.entity.EntityUtils;
28+
import org.apache.hc.core5.http.message.BasicHeader;
2829
import org.junit.Before;
2930
import org.opensearch.ad.mock.model.MockSimpleLog;
3031
import org.opensearch.ad.model.ADTaskProfile;
@@ -62,7 +63,7 @@ public ToXContentObject[] getHistoricalAnomalyDetector(String detectorId, boolea
6263
return getAnomalyDetector(detectorId, header, false, returnTask, client);
6364
}
6465

65-
public ADTaskProfile getADTaskProfile(String detectorId) throws IOException {
66+
public ADTaskProfile getADTaskProfile(String detectorId) throws IOException, ParseException {
6667
Response profileResponse = TestHelpers
6768
.makeRequest(
6869
client(),
@@ -99,7 +100,8 @@ public Response ingestSimpleMockLog(
99100
ToDoubleFunction<Integer> valueFunc,
100101
int ipSize,
101102
int categorySize
102-
) throws IOException {
103+
) throws IOException,
104+
ParseException {
103105
TestHelpers
104106
.makeRequest(
105107
client(),
@@ -150,7 +152,7 @@ public Response ingestSimpleMockLog(
150152
return bulkResponse;
151153
}
152154

153-
public ADTaskProfile parseADTaskProfile(Response profileResponse) throws IOException {
155+
public ADTaskProfile parseADTaskProfile(Response profileResponse) throws IOException, ParseException {
154156
String profileResult = EntityUtils.toString(profileResponse.getEntity());
155157
XContentParser parser = TestHelpers.parser(profileResult);
156158
ADTaskProfile adTaskProfile = null;
@@ -166,7 +168,8 @@ public ADTaskProfile parseADTaskProfile(Response profileResponse) throws IOExcep
166168
return adTaskProfile;
167169
}
168170

169-
protected void ingestTestDataForHistoricalAnalysis(String indexName, int detectionIntervalInMinutes) throws IOException {
171+
protected void ingestTestDataForHistoricalAnalysis(String indexName, int detectionIntervalInMinutes) throws IOException,
172+
ParseException {
170173
ingestSimpleMockLog(indexName, 10, 3000, detectionIntervalInMinutes, (i) -> {
171174
if (i % 500 == 0) {
172175
return randomDoubleBetween(100, 1000, true);

src/test/java/org/opensearch/ad/ODFERestTestCase.java

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,19 @@
2828
import java.util.Optional;
2929
import java.util.stream.Collectors;
3030

31-
import org.apache.http.Header;
32-
import org.apache.http.HttpHost;
33-
import org.apache.http.auth.AuthScope;
34-
import org.apache.http.auth.UsernamePasswordCredentials;
35-
import org.apache.http.client.CredentialsProvider;
36-
import org.apache.http.conn.ssl.NoopHostnameVerifier;
37-
import org.apache.http.impl.client.BasicCredentialsProvider;
38-
import org.apache.http.message.BasicHeader;
39-
import org.apache.http.ssl.SSLContextBuilder;
31+
import org.apache.hc.client5.http.auth.AuthScope;
32+
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
33+
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
34+
import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManager;
35+
import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManagerBuilder;
36+
import org.apache.hc.client5.http.ssl.ClientTlsStrategyBuilder;
37+
import org.apache.hc.client5.http.ssl.NoopHostnameVerifier;
38+
import org.apache.hc.core5.http.Header;
39+
import org.apache.hc.core5.http.HttpHost;
40+
import org.apache.hc.core5.http.message.BasicHeader;
41+
import org.apache.hc.core5.http.nio.ssl.TlsStrategy;
42+
import org.apache.hc.core5.ssl.SSLContextBuilder;
43+
import org.apache.hc.core5.util.Timeout;
4044
import org.junit.After;
4145
import org.opensearch.client.Request;
4246
import org.opensearch.client.Response;
@@ -139,7 +143,7 @@ protected RestClient buildClient(Settings settings, HttpHost[] hosts) throws IOE
139143
@After
140144
protected void wipeAllODFEIndices() throws IOException {
141145
Response response = adminClient().performRequest(new Request("GET", "/_cat/indices?format=json&expand_wildcards=all"));
142-
XContentType xContentType = XContentType.fromMediaType(response.getEntity().getContentType().getValue());
146+
XContentType xContentType = XContentType.fromMediaType(response.getEntity().getContentType());
143147
try (
144148
XContentParser parser = xContentType
145149
.xContent()
@@ -181,14 +185,25 @@ protected static void configureHttpsClient(RestClientBuilder builder, Settings s
181185
String password = Optional
182186
.ofNullable(System.getProperty("password"))
183187
.orElseThrow(() -> new RuntimeException("password is missing"));
184-
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
185-
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
188+
BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
189+
credentialsProvider
190+
.setCredentials(
191+
new AuthScope(new HttpHost("localhost", 9200)),
192+
new UsernamePasswordCredentials(userName, password.toCharArray())
193+
);
186194
try {
187-
return httpClientBuilder
188-
.setDefaultCredentialsProvider(credentialsProvider)
195+
final TlsStrategy tlsStrategy = ClientTlsStrategyBuilder
196+
.create()
197+
.setSslContext(SSLContextBuilder.create().loadTrustMaterial(null, (chains, authType) -> true).build())
189198
// disable the certificate since our testing cluster just uses the default security configuration
190-
.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
191-
.setSSLContext(SSLContextBuilder.create().loadTrustMaterial(null, (chains, authType) -> true).build());
199+
.setHostnameVerifier(NoopHostnameVerifier.INSTANCE)
200+
.build();
201+
202+
final PoolingAsyncClientConnectionManager connectionManager = PoolingAsyncClientConnectionManagerBuilder
203+
.create()
204+
.setTlsStrategy(tlsStrategy)
205+
.build();
206+
return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider).setConnectionManager(connectionManager);
192207
} catch (Exception e) {
193208
throw new RuntimeException(e);
194209
}
@@ -197,7 +212,8 @@ protected static void configureHttpsClient(RestClientBuilder builder, Settings s
197212
final String socketTimeoutString = settings.get(CLIENT_SOCKET_TIMEOUT);
198213
final TimeValue socketTimeout = TimeValue
199214
.parseTimeValue(socketTimeoutString == null ? "60s" : socketTimeoutString, CLIENT_SOCKET_TIMEOUT);
200-
builder.setRequestConfigCallback(conf -> conf.setSocketTimeout(Math.toIntExact(socketTimeout.getMillis())));
215+
builder
216+
.setRequestConfigCallback(conf -> conf.setResponseTimeout(Timeout.ofMilliseconds(Math.toIntExact(socketTimeout.getMillis()))));
201217
if (settings.hasValue(CLIENT_PATH_PREFIX)) {
202218
builder.setPathPrefix(settings.get(CLIENT_PATH_PREFIX));
203219
}

0 commit comments

Comments
 (0)