Skip to content

Commit edba50d

Browse files
committed
Merge branch 'master' into always-fetch-leases
2 parents c766645 + 53e80e9 commit edba50d

File tree

116 files changed

+2491
-643
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

116 files changed

+2491
-643
lines changed

.ci/packer_cache.sh

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,9 @@ while [ -h "$SCRIPT" ] ; do
1616
done
1717

1818
source $(dirname "${SCRIPT}")/java-versions.properties
19-
JAVA_HOME="${HOME}"/.java/${ES_BUILD_JAVA} ./gradlew --parallel resolveAllDependencies composePull
19+
export JAVA_HOME="${HOME}"/.java/${ES_BUILD_JAVA}
20+
# We are caching BWC versions too, need these so we can build those
21+
export JAVA8_HOME="${HOME}"/.java/java8
22+
export JAVA11_HOME="${HOME}"/.java/java11
23+
export JAVA12_HOME="${HOME}"/.java/java12
24+
./gradlew --parallel clean pullFixture --scan -Porg.elasticsearch.acceptScanTOS=true -s resolveAllDependencies

buildSrc/src/main/java/org/elasticsearch/gradle/testfixtures/TestFixturesPlugin.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,17 @@ public void apply(Project project) {
5959
disableTaskByType(tasks, JarHellTask.class);
6060

6161
Task buildFixture = project.getTasks().create("buildFixture");
62+
Task pullFixture = project.getTasks().create("pullFixture");
6263
Task preProcessFixture = project.getTasks().create("preProcessFixture");
6364
buildFixture.dependsOn(preProcessFixture);
65+
pullFixture.dependsOn(preProcessFixture);
6466
Task postProcessFixture = project.getTasks().create("postProcessFixture");
6567

6668
if (dockerComposeSupported(project) == false) {
6769
preProcessFixture.setEnabled(false);
6870
postProcessFixture.setEnabled(false);
6971
buildFixture.setEnabled(false);
72+
pullFixture.setEnabled(false);
7073
return;
7174
}
7275

@@ -81,7 +84,9 @@ public void apply(Project project) {
8184
);
8285

8386
buildFixture.dependsOn(tasks.getByName("composeUp"));
87+
pullFixture.dependsOn(tasks.getByName("composePull"));
8488
tasks.getByName("composeUp").mustRunAfter(preProcessFixture);
89+
tasks.getByName("composePull").mustRunAfter(preProcessFixture);
8590
postProcessFixture.dependsOn(buildFixture);
8691

8792
configureServiceInfoForTask(

client/rest-high-level/src/main/java/org/elasticsearch/client/MLRequestConverters.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
import org.elasticsearch.client.ml.PutFilterRequest;
6565
import org.elasticsearch.client.ml.PutJobRequest;
6666
import org.elasticsearch.client.ml.RevertModelSnapshotRequest;
67+
import org.elasticsearch.client.ml.SetUpgradeModeRequest;
6768
import org.elasticsearch.client.ml.StartDatafeedRequest;
6869
import org.elasticsearch.client.ml.StopDatafeedRequest;
6970
import org.elasticsearch.client.ml.UpdateDatafeedRequest;
@@ -624,6 +625,17 @@ static Request deleteFilter(DeleteFilterRequest deleteFilterRequest) {
624625
return request;
625626
}
626627

628+
static Request setUpgradeMode(SetUpgradeModeRequest setUpgradeModeRequest) {
629+
String endpoint = new EndpointBuilder().addPathPartAsIs("_ml", "set_upgrade_mode").build();
630+
Request request = new Request(HttpPost.METHOD_NAME, endpoint);
631+
RequestConverters.Params params = new RequestConverters.Params(request);
632+
params.putParam(SetUpgradeModeRequest.ENABLED.getPreferredName(), Boolean.toString(setUpgradeModeRequest.isEnabled()));
633+
if (setUpgradeModeRequest.getTimeout() != null) {
634+
params.putParam(SetUpgradeModeRequest.TIMEOUT.getPreferredName(), setUpgradeModeRequest.getTimeout().toString());
635+
}
636+
return request;
637+
}
638+
627639
static Request mlInfo(MlInfoRequest infoRequest) {
628640
String endpoint = new EndpointBuilder()
629641
.addPathPartAsIs("_ml", "info")

client/rest-high-level/src/main/java/org/elasticsearch/client/MachineLearningClient.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
import org.elasticsearch.client.ml.PutJobResponse;
8787
import org.elasticsearch.client.ml.RevertModelSnapshotRequest;
8888
import org.elasticsearch.client.ml.RevertModelSnapshotResponse;
89+
import org.elasticsearch.client.ml.SetUpgradeModeRequest;
8990
import org.elasticsearch.client.ml.StartDatafeedRequest;
9091
import org.elasticsearch.client.ml.StartDatafeedResponse;
9192
import org.elasticsearch.client.ml.StopDatafeedRequest;
@@ -1838,4 +1839,42 @@ public void findFileStructureAsync(FindFileStructureRequest request, RequestOpti
18381839
listener,
18391840
Collections.emptySet());
18401841
}
1842+
1843+
/**
1844+
* Sets the ML cluster setting upgrade_mode
1845+
* <p>
1846+
* For additional info
1847+
* see <a href="http://www.elastic.co/guide/en/elasticsearch/reference/current/ml-set-upgrade-mode.html">Set Upgrade Mode</a>
1848+
*
1849+
* @param request The request to set upgrade mode
1850+
* @param options Additional request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
1851+
* @return response
1852+
* @throws IOException when there is a serialization issue sending the request or receiving the response
1853+
*/
1854+
public AcknowledgedResponse setUpgradeMode(SetUpgradeModeRequest request, RequestOptions options) throws IOException {
1855+
return restHighLevelClient.performRequestAndParseEntity(request,
1856+
MLRequestConverters::setUpgradeMode,
1857+
options,
1858+
AcknowledgedResponse::fromXContent,
1859+
Collections.emptySet());
1860+
}
1861+
1862+
/**
1863+
* Sets the ML cluster setting upgrade_mode asynchronously
1864+
* <p>
1865+
* For additional info
1866+
* see <a href="http://www.elastic.co/guide/en/elasticsearch/reference/current/ml-set-upgrade-mode.html">Set Upgrade Mode</a>
1867+
*
1868+
* @param request The request of Machine Learning info
1869+
* @param options Additional request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
1870+
* @param listener Listener to be notified upon request completion
1871+
*/
1872+
public void setUpgradeModeAsync(SetUpgradeModeRequest request, RequestOptions options, ActionListener<AcknowledgedResponse> listener) {
1873+
restHighLevelClient.performRequestAsyncAndParseEntity(request,
1874+
MLRequestConverters::setUpgradeMode,
1875+
options,
1876+
AcknowledgedResponse::fromXContent,
1877+
listener,
1878+
Collections.emptySet());
1879+
}
18411880
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/*
2+
* Licensed to Elasticsearch under one or more contributor
3+
* license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright
5+
* ownership. Elasticsearch licenses this file to you under
6+
* the Apache License, Version 2.0 (the "License"); you may
7+
* not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package org.elasticsearch.client.ml;
20+
21+
import org.elasticsearch.action.ActionRequest;
22+
import org.elasticsearch.action.ActionRequestValidationException;
23+
import org.elasticsearch.common.ParseField;
24+
import org.elasticsearch.common.unit.TimeValue;
25+
26+
import java.util.Objects;
27+
28+
/**
29+
* Sets ML into upgrade_mode
30+
*/
31+
public class SetUpgradeModeRequest extends ActionRequest {
32+
33+
34+
public static final ParseField ENABLED = new ParseField("enabled");
35+
public static final ParseField TIMEOUT = new ParseField("timeout");
36+
37+
private boolean enabled;
38+
private TimeValue timeout;
39+
40+
/**
41+
* Create a new request
42+
*
43+
* @param enabled whether to enable `upgrade_mode` or not
44+
*/
45+
public SetUpgradeModeRequest(boolean enabled) {
46+
this.enabled = enabled;
47+
}
48+
49+
public boolean isEnabled() {
50+
return enabled;
51+
}
52+
53+
public void setEnabled(boolean enabled) {
54+
this.enabled = enabled;
55+
}
56+
57+
public TimeValue getTimeout() {
58+
return timeout;
59+
}
60+
61+
/**
62+
* How long to wait for the request to be completed
63+
*
64+
* @param timeout default value of 30 seconds
65+
*/
66+
public void setTimeout(TimeValue timeout) {
67+
this.timeout = timeout;
68+
}
69+
70+
@Override
71+
public ActionRequestValidationException validate() {
72+
return null;
73+
}
74+
75+
@Override
76+
public int hashCode() {
77+
return Objects.hash(enabled, timeout);
78+
}
79+
80+
@Override
81+
public boolean equals(Object other) {
82+
if (this == other) {
83+
return true;
84+
}
85+
86+
if (other == null || getClass() != other.getClass()) {
87+
return false;
88+
}
89+
90+
SetUpgradeModeRequest that = (SetUpgradeModeRequest) other;
91+
return Objects.equals(enabled, that.enabled) && Objects.equals(timeout, that.timeout);
92+
}
93+
}

client/rest-high-level/src/test/java/org/elasticsearch/client/MLRequestConvertersTests.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import org.elasticsearch.client.ml.PutFilterRequest;
6262
import org.elasticsearch.client.ml.PutJobRequest;
6363
import org.elasticsearch.client.ml.RevertModelSnapshotRequest;
64+
import org.elasticsearch.client.ml.SetUpgradeModeRequest;
6465
import org.elasticsearch.client.ml.StartDatafeedRequest;
6566
import org.elasticsearch.client.ml.StartDatafeedRequestTests;
6667
import org.elasticsearch.client.ml.StopDatafeedRequest;
@@ -818,6 +819,22 @@ public void testFindFileStructure() throws Exception {
818819
assertEquals(sample, requestEntityToString(request));
819820
}
820821

822+
public void testSetUpgradeMode() {
823+
SetUpgradeModeRequest setUpgradeModeRequest = new SetUpgradeModeRequest(true);
824+
825+
Request request = MLRequestConverters.setUpgradeMode(setUpgradeModeRequest);
826+
assertThat(request.getEndpoint(), equalTo("/_ml/set_upgrade_mode"));
827+
assertThat(request.getMethod(), equalTo(HttpPost.METHOD_NAME));
828+
assertThat(request.getParameters().get(SetUpgradeModeRequest.ENABLED.getPreferredName()), equalTo(Boolean.toString(true)));
829+
assertThat(request.getParameters().containsKey(SetUpgradeModeRequest.TIMEOUT.getPreferredName()), is(false));
830+
831+
setUpgradeModeRequest.setTimeout(TimeValue.timeValueHours(1));
832+
setUpgradeModeRequest.setEnabled(false);
833+
request = MLRequestConverters.setUpgradeMode(setUpgradeModeRequest);
834+
assertThat(request.getParameters().get(SetUpgradeModeRequest.ENABLED.getPreferredName()), equalTo(Boolean.toString(false)));
835+
assertThat(request.getParameters().get(SetUpgradeModeRequest.TIMEOUT.getPreferredName()), is("1h"));
836+
}
837+
821838
private static Job createValidJob(String jobId) {
822839
AnalysisConfig.Builder analysisConfig = AnalysisConfig.builder(Collections.singletonList(
823840
Detector.builder().setFunction("count").build()));

client/rest-high-level/src/test/java/org/elasticsearch/client/MachineLearningIT.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
import org.elasticsearch.client.ml.PutJobResponse;
8585
import org.elasticsearch.client.ml.RevertModelSnapshotRequest;
8686
import org.elasticsearch.client.ml.RevertModelSnapshotResponse;
87+
import org.elasticsearch.client.ml.SetUpgradeModeRequest;
8788
import org.elasticsearch.client.ml.StartDatafeedRequest;
8889
import org.elasticsearch.client.ml.StartDatafeedResponse;
8990
import org.elasticsearch.client.ml.StopDatafeedRequest;
@@ -1614,4 +1615,30 @@ public void testFindFileStructure() throws IOException {
16141615
assertEquals("timestamp", structure.getTimestampField());
16151616
assertFalse(structure.needClientTimezone());
16161617
}
1618+
1619+
public void testEnableUpgradeMode() throws Exception {
1620+
MachineLearningClient machineLearningClient = highLevelClient().machineLearning();
1621+
1622+
MlInfoResponse mlInfoResponse = machineLearningClient.getMlInfo(new MlInfoRequest(), RequestOptions.DEFAULT);
1623+
assertThat(mlInfoResponse.getInfo().get("upgrade_mode"), equalTo(false));
1624+
1625+
AcknowledgedResponse setUpgrademodeResponse = execute(new SetUpgradeModeRequest(true),
1626+
machineLearningClient::setUpgradeMode,
1627+
machineLearningClient::setUpgradeModeAsync);
1628+
1629+
assertThat(setUpgrademodeResponse.isAcknowledged(), is(true));
1630+
1631+
1632+
mlInfoResponse = machineLearningClient.getMlInfo(new MlInfoRequest(), RequestOptions.DEFAULT);
1633+
assertThat(mlInfoResponse.getInfo().get("upgrade_mode"), equalTo(true));
1634+
1635+
setUpgrademodeResponse = execute(new SetUpgradeModeRequest(false),
1636+
machineLearningClient::setUpgradeMode,
1637+
machineLearningClient::setUpgradeModeAsync);
1638+
1639+
assertThat(setUpgrademodeResponse.isAcknowledged(), is(true));
1640+
1641+
mlInfoResponse = machineLearningClient.getMlInfo(new MlInfoRequest(), RequestOptions.DEFAULT);
1642+
assertThat(mlInfoResponse.getInfo().get("upgrade_mode"), equalTo(false));
1643+
}
16171644
}

client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/MlClientDocumentationIT.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@
9999
import org.elasticsearch.client.ml.PutJobResponse;
100100
import org.elasticsearch.client.ml.RevertModelSnapshotRequest;
101101
import org.elasticsearch.client.ml.RevertModelSnapshotResponse;
102+
import org.elasticsearch.client.ml.SetUpgradeModeRequest;
102103
import org.elasticsearch.client.ml.StartDatafeedRequest;
103104
import org.elasticsearch.client.ml.StartDatafeedResponse;
104105
import org.elasticsearch.client.ml.StopDatafeedRequest;
@@ -3078,6 +3079,57 @@ public void onFailure(Exception e) {
30783079
}
30793080
}
30803081

3082+
public void testSetUpgradeMode() throws Exception {
3083+
RestHighLevelClient client = highLevelClient();
3084+
{
3085+
// tag::set-upgrade-mode-request
3086+
SetUpgradeModeRequest request = new SetUpgradeModeRequest(true); // <1>
3087+
request.setTimeout(TimeValue.timeValueMinutes(10)); // <2>
3088+
// end::set-upgrade-mode-request
3089+
3090+
// Set to false so that the cluster setting does not have to be unset at the end of the test.
3091+
request.setEnabled(false);
3092+
3093+
// tag::set-upgrade-mode-execute
3094+
AcknowledgedResponse acknowledgedResponse = client.machineLearning().setUpgradeMode(request, RequestOptions.DEFAULT);
3095+
// end::set-upgrade-mode-execute
3096+
3097+
// tag::set-upgrade-mode-response
3098+
boolean acknowledged = acknowledgedResponse.isAcknowledged(); // <1>
3099+
// end::set-upgrade-mode-response
3100+
assertThat(acknowledged, is(true));
3101+
}
3102+
{
3103+
SetUpgradeModeRequest request = new SetUpgradeModeRequest(false);
3104+
3105+
// tag::set-upgrade-mode-execute-listener
3106+
ActionListener<AcknowledgedResponse> listener = new ActionListener<AcknowledgedResponse>() {
3107+
@Override
3108+
public void onResponse(AcknowledgedResponse acknowledgedResponse) {
3109+
// <1>
3110+
}
3111+
3112+
@Override
3113+
public void onFailure(Exception e) {
3114+
// <2>
3115+
}
3116+
};
3117+
// end::set-upgrade-mode-execute-listener
3118+
3119+
// Replace the empty listener by a blocking listener in test
3120+
final CountDownLatch latch = new CountDownLatch(1);
3121+
listener = new LatchedActionListener<>(listener, latch);
3122+
3123+
// tag::set-upgrade-mode-execute-async
3124+
client.machineLearning()
3125+
.setUpgradeModeAsync(request, RequestOptions.DEFAULT, listener); // <1>
3126+
// end::set-upgrade-mode-execute-async
3127+
3128+
assertTrue(latch.await(30L, TimeUnit.SECONDS));
3129+
3130+
}
3131+
}
3132+
30813133
private String createFilter(RestHighLevelClient client) throws IOException {
30823134
MlFilter.Builder filterBuilder = MlFilter.builder("my_safe_domains")
30833135
.setDescription("A list of safe domains")

distribution/docker/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@ dependencies {
1818
}
1919

2020
ext.expansions = { oss ->
21+
String classifier = 'linux-x86_64'
2122
return [
22-
'elasticsearch' : oss ? "elasticsearch-oss-${VersionProperties.elasticsearch}.tar.gz" : "elasticsearch-${VersionProperties.elasticsearch}.tar.gz",
23+
'elasticsearch' : oss ? "elasticsearch-oss-${VersionProperties.elasticsearch}-${classifier}.tar.gz" : "elasticsearch-${VersionProperties.elasticsearch}-${classifier}.tar.gz",
2324
'jdkUrl' : 'https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz',
2425
'jdkVersion' : '11.0.2',
2526
'license': oss ? 'Apache-2.0' : 'Elastic License',
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
--
2+
:api: set-upgrade-mode
3+
:request: SetUpgradeModeRequest
4+
:response: AcknowledgedResponse
5+
--
6+
[id="{upid}-{api}"]
7+
=== Set Upgrade Mode API
8+
9+
The Set Upgrade Mode API temporarily halts all {ml} job and {dfeed} tasks when `enabled=true`. Their
10+
reported states remain unchanged. Consequently, when exiting upgrade mode the halted {ml} jobs and
11+
{dfeeds} will return to their previous state.
12+
13+
It accepts a +{request}+ object and responds with a +{response}+ object.
14+
15+
When `enabled=true`, no new jobs can be opened, and no job or {dfeed} tasks will
16+
be running. Be sure to set `enabled=false` once upgrade actions are completed.
17+
18+
[id="{upid}-{api}-request"]
19+
==== Set Upgrade Mode Request
20+
21+
A +{request}+ object gets created setting the desired `enabled` state.
22+
23+
["source","java",subs="attributes,callouts,macros"]
24+
--------------------------------------------------
25+
include-tagged::{doc-tests-file}[{api}-request]
26+
--------------------------------------------------
27+
<1> Constructing a new request referencing enabling upgrade mode
28+
<2> Optionally setting the `timeout` value for how long the
29+
execution should wait.
30+
31+
[id="{upid}-{api}-response"]
32+
==== Set Upgrade Mode Response
33+
34+
["source","java",subs="attributes,callouts,macros"]
35+
--------------------------------------------------
36+
include-tagged::{doc-tests-file}[{api}-response]
37+
--------------------------------------------------
38+
<1> `isAcknowledged()` from the +{response}+ indicates if the setting was set successfully.
39+
40+
include::../execution.asciidoc[]

0 commit comments

Comments
 (0)