|
@@ -34,6 +34,7 @@ import java.io.IOException;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
import java.time.Instant;
|
|
|
import java.util.List;
|
|
|
+import java.util.Locale;
|
|
|
import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
@@ -208,7 +209,9 @@ public class DataStreamsUpgradeIT extends AbstractUpgradeTestCase {
|
|
|
} else if (CLUSTER_TYPE == ClusterType.UPGRADED) {
|
|
|
Map<String, Map<String, Object>> oldIndicesMetadata = getIndicesMetadata(dataStreamName);
|
|
|
upgradeDataStream(dataStreamName, numRollovers, numRollovers + 1, 0, ilmEnabled);
|
|
|
+ cancelReindexTask(dataStreamName);
|
|
|
upgradeDataStream(dataStreamFromNonDataStreamIndices, 0, 1, 0, ilmEnabled);
|
|
|
+ cancelReindexTask(dataStreamFromNonDataStreamIndices);
|
|
|
Map<String, Map<String, Object>> upgradedIndicesMetadata = getIndicesMetadata(dataStreamName);
|
|
|
|
|
|
if (ilmEnabled) {
|
|
@@ -219,6 +222,38 @@ public class DataStreamsUpgradeIT extends AbstractUpgradeTestCase {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public void testMigrateDoesNotRestartOnUpgrade() throws Exception {
|
|
|
+ /*
|
|
|
+ * This test makes sure that if reindex is run and completed, then when the cluster is upgraded the task
|
|
|
+ * does not begin running again.
|
|
|
+ */
|
|
|
+ String dataStreamName = "reindex_test_data_stream_ugprade_test";
|
|
|
+ int numRollovers = randomIntBetween(0, 5);
|
|
|
+ boolean hasILMPolicy = randomBoolean();
|
|
|
+ boolean ilmEnabled = hasILMPolicy && randomBoolean();
|
|
|
+ if (CLUSTER_TYPE == ClusterType.OLD) {
|
|
|
+ createAndRolloverDataStream(dataStreamName, numRollovers, hasILMPolicy, ilmEnabled);
|
|
|
+ upgradeDataStream(dataStreamName, numRollovers, numRollovers + 1, 0, ilmEnabled);
|
|
|
+ } else if (CLUSTER_TYPE == ClusterType.UPGRADED) {
|
|
|
+ makeSureNoUpgrade(dataStreamName);
|
|
|
+ cancelReindexTask(dataStreamName);
|
|
|
+ } else {
|
|
|
+ makeSureNoUpgrade(dataStreamName);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void cancelReindexTask(String dataStreamName) throws IOException {
|
|
|
+ Request cancelRequest = new Request("POST", "_migration/reindex/" + dataStreamName + "/_cancel");
|
|
|
+ String upgradeUser = "upgrade_user";
|
|
|
+ String upgradeUserPassword = "x-pack-test-password";
|
|
|
+ createRole("upgrade_role", dataStreamName);
|
|
|
+ createUser(upgradeUser, upgradeUserPassword, "upgrade_role");
|
|
|
+ try (RestClient upgradeUserClient = getClient(upgradeUser, upgradeUserPassword)) {
|
|
|
+ Response cancelResponse = upgradeUserClient.performRequest(cancelRequest);
|
|
|
+ assertOK(cancelResponse);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void compareIndexMetadata(
|
|
|
Map<String, Map<String, Object>> oldIndicesMetadata,
|
|
|
Map<String, Map<String, Object>> upgradedIndicesMetadata
|
|
@@ -422,7 +457,10 @@ public class DataStreamsUpgradeIT extends AbstractUpgradeTestCase {
|
|
|
"data_stream": {
|
|
|
}
|
|
|
}""";
|
|
|
- var putIndexTemplateRequest = new Request("POST", "/_index_template/reindex_test_data_stream_template");
|
|
|
+ var putIndexTemplateRequest = new Request(
|
|
|
+ "POST",
|
|
|
+ "/_index_template/reindex_test_data_stream_template" + randomAlphanumericOfLength(10).toLowerCase(Locale.ROOT)
|
|
|
+ );
|
|
|
putIndexTemplateRequest.setJsonEntity(indexTemplate.replace("$TEMPLATE", template).replace("$PATTERN", dataStreamName));
|
|
|
assertOK(client().performRequest(putIndexTemplateRequest));
|
|
|
bulkLoadData(dataStreamName);
|
|
@@ -651,7 +689,7 @@ public class DataStreamsUpgradeIT extends AbstractUpgradeTestCase {
|
|
|
assertOK(statusResponse);
|
|
|
assertThat(statusResponseString, statusResponseMap.get("complete"), equalTo(true));
|
|
|
final int originalWriteIndex = 1;
|
|
|
- if (isOriginalClusterSameMajorVersionAsCurrent()) {
|
|
|
+ if (isOriginalClusterSameMajorVersionAsCurrent() || CLUSTER_TYPE == ClusterType.OLD) {
|
|
|
assertThat(
|
|
|
statusResponseString,
|
|
|
statusResponseMap.get("total_indices_in_data_stream"),
|
|
@@ -698,10 +736,35 @@ public class DataStreamsUpgradeIT extends AbstractUpgradeTestCase {
|
|
|
// Verify it's possible to reindex again after a successful reindex
|
|
|
reindexResponse = upgradeUserClient.performRequest(reindexRequest);
|
|
|
assertOK(reindexResponse);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- Request cancelRequest = new Request("POST", "_migration/reindex/" + dataStreamName + "/_cancel");
|
|
|
- Response cancelResponse = upgradeUserClient.performRequest(cancelRequest);
|
|
|
- assertOK(cancelResponse);
|
|
|
+ private void makeSureNoUpgrade(String dataStreamName) throws Exception {
|
|
|
+ String upgradeUser = "upgrade_user";
|
|
|
+ String upgradeUserPassword = "x-pack-test-password";
|
|
|
+ createRole("upgrade_role", dataStreamName);
|
|
|
+ createUser(upgradeUser, upgradeUserPassword, "upgrade_role");
|
|
|
+ try (RestClient upgradeUserClient = getClient(upgradeUser, upgradeUserPassword)) {
|
|
|
+ assertBusy(() -> {
|
|
|
+ try {
|
|
|
+ Request statusRequest = new Request("GET", "_migration/reindex/" + dataStreamName + "/_status");
|
|
|
+ Response statusResponse = upgradeUserClient.performRequest(statusRequest);
|
|
|
+ Map<String, Object> statusResponseMap = XContentHelper.convertToMap(
|
|
|
+ JsonXContent.jsonXContent,
|
|
|
+ statusResponse.getEntity().getContent(),
|
|
|
+ false
|
|
|
+ );
|
|
|
+ String statusResponseString = statusResponseMap.keySet()
|
|
|
+ .stream()
|
|
|
+ .map(key -> key + "=" + statusResponseMap.get(key))
|
|
|
+ .collect(Collectors.joining(", ", "{", "}"));
|
|
|
+ assertOK(statusResponse);
|
|
|
+ assertThat(statusResponseString, statusResponseMap.get("complete"), equalTo(true));
|
|
|
+ assertThat(statusResponseString, statusResponseMap.get("successes"), equalTo(0));
|
|
|
+ } catch (Exception e) {
|
|
|
+ fail(e);
|
|
|
+ }
|
|
|
+ }, 60, TimeUnit.SECONDS);
|
|
|
}
|
|
|
}
|
|
|
|