Skip to content

Commit 31f058f

Browse files
committed
Test for promotion warnings
1 parent 5a934cf commit 31f058f

File tree

1 file changed

+110
-0
lines changed
  • x-pack/plugin/ccr/qa/multi-cluster/src/test/java/org/elasticsearch/xpack/ccr

1 file changed

+110
-0
lines changed

x-pack/plugin/ccr/qa/multi-cluster/src/test/java/org/elasticsearch/xpack/ccr/AutoFollowIT.java

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.elasticsearch.client.Response;
1414
import org.elasticsearch.client.ResponseException;
1515
import org.elasticsearch.client.RestClient;
16+
import org.elasticsearch.client.WarningFailureException;
1617
import org.elasticsearch.cluster.metadata.DataStream;
1718
import org.elasticsearch.common.Strings;
1819
import org.elasticsearch.common.settings.SecureString;
@@ -1120,6 +1121,115 @@ public void testAutoFollowSearchableSnapshotsFails() throws Exception {
11201121
}
11211122
}
11221123

1124+
public void testNoWarningOnPromoteDatastreamWhenTemplateExistsOnFollower() throws Exception {
1125+
if ("follow".equals(targetCluster) == false) {
1126+
return;
1127+
}
1128+
testDatastreamPromotionWarnings(true);
1129+
}
1130+
1131+
public void testWarningOnPromoteDatastreamWhenTemplateDoesNotExistsOnFollower() {
1132+
if ("follow".equals(targetCluster) == false) {
1133+
return;
1134+
}
1135+
WarningFailureException exception = assertThrows(WarningFailureException.class, () -> testDatastreamPromotionWarnings(false));
1136+
assertThat(
1137+
exception.getMessage(),
1138+
containsString(
1139+
"does not have a matching index template. " + "This will cause rollover to fail until a matching index template is created]"
1140+
)
1141+
);
1142+
}
1143+
1144+
private void testDatastreamPromotionWarnings(Boolean createFollowerTemplate) throws Exception {
1145+
final int numDocs = 64;
1146+
final String dataStreamName = getTestName().toLowerCase(Locale.ROOT) + "-dopromo";
1147+
final String autoFollowPatternName = getTestName().toLowerCase(Locale.ROOT);
1148+
1149+
int initialNumberOfSuccessfulFollowedIndices = getNumberOfSuccessfulFollowedIndices();
1150+
List<String> backingIndexNames = null;
1151+
try {
1152+
// Create index template
1153+
Request putComposableIndexTemplateRequest = new Request("POST", "/_index_template/" + getTestName().toLowerCase(Locale.ROOT));
1154+
putComposableIndexTemplateRequest.setJsonEntity("{\"index_patterns\":[\"" + dataStreamName + "*\"],\"data_stream\":{}}");
1155+
1156+
if (createFollowerTemplate) {
1157+
assertOK(client().performRequest(putComposableIndexTemplateRequest));
1158+
}
1159+
1160+
// Create auto follow pattern
1161+
createAutoFollowPattern(client(), autoFollowPatternName, dataStreamName + "*", "leader_cluster", null);
1162+
1163+
// Create data stream and ensure that it is auto followed
1164+
try (var leaderClient = buildLeaderClient()) {
1165+
assertOK(leaderClient.performRequest(putComposableIndexTemplateRequest));
1166+
1167+
for (int i = 0; i < numDocs; i++) {
1168+
var indexRequest = new Request("POST", "/" + dataStreamName + "/_doc");
1169+
indexRequest.addParameter("refresh", "true");
1170+
indexRequest.setJsonEntity("{\"@timestamp\": \"" + DATE_FORMAT.format(new Date()) + "\",\"message\":\"abc\"}");
1171+
assertOK(leaderClient.performRequest(indexRequest));
1172+
}
1173+
verifyDataStream(leaderClient, dataStreamName, backingIndexName(dataStreamName, 1));
1174+
verifyDocuments(leaderClient, dataStreamName, numDocs);
1175+
}
1176+
assertBusy(() -> {
1177+
assertThat(getNumberOfSuccessfulFollowedIndices(), equalTo(initialNumberOfSuccessfulFollowedIndices + 1));
1178+
verifyDataStream(client(), dataStreamName, backingIndexName(dataStreamName, 1));
1179+
ensureYellow(dataStreamName);
1180+
verifyDocuments(client(), dataStreamName, numDocs);
1181+
});
1182+
1183+
// Rollover in leader cluster and ensure second backing index is replicated:
1184+
try (var leaderClient = buildLeaderClient()) {
1185+
var rolloverRequest = new Request("POST", "/" + dataStreamName + "/_rollover");
1186+
assertOK(leaderClient.performRequest(rolloverRequest));
1187+
verifyDataStream(leaderClient, dataStreamName, backingIndexName(dataStreamName, 1), backingIndexName(dataStreamName, 2));
1188+
1189+
var indexRequest = new Request("POST", "/" + dataStreamName + "/_doc");
1190+
indexRequest.addParameter("refresh", "true");
1191+
indexRequest.setJsonEntity("{\"@timestamp\": \"" + DATE_FORMAT.format(new Date()) + "\",\"message\":\"abc\"}");
1192+
assertOK(leaderClient.performRequest(indexRequest));
1193+
verifyDocuments(leaderClient, dataStreamName, numDocs + 1);
1194+
}
1195+
assertBusy(() -> {
1196+
assertThat(getNumberOfSuccessfulFollowedIndices(), equalTo(initialNumberOfSuccessfulFollowedIndices + 2));
1197+
verifyDataStream(client(), dataStreamName, backingIndexName(dataStreamName, 1), backingIndexName(dataStreamName, 2));
1198+
ensureYellow(dataStreamName);
1199+
verifyDocuments(client(), dataStreamName, numDocs + 1);
1200+
});
1201+
1202+
backingIndexNames = verifyDataStream(
1203+
client(),
1204+
dataStreamName,
1205+
backingIndexName(dataStreamName, 1),
1206+
backingIndexName(dataStreamName, 2)
1207+
);
1208+
1209+
// Promote local data stream
1210+
var promoteRequest = new Request("POST", "/_data_stream/_promote/" + dataStreamName);
1211+
Response response = client().performRequest(promoteRequest);
1212+
assertOK(response);
1213+
} finally {
1214+
if (backingIndexNames == null) {
1215+
// we failed to compute the actual backing index names in the test because we failed earlier on, guessing them on a
1216+
// best-effort basis
1217+
backingIndexNames = List.of(backingIndexName(dataStreamName, 1), backingIndexName(dataStreamName, 2));
1218+
}
1219+
1220+
cleanUpFollower(backingIndexNames, List.of(dataStreamName), List.of(autoFollowPatternName));
1221+
cleanUpLeader(backingIndexNames.subList(0, 1), List.of(dataStreamName), List.of());
1222+
Request deleteTemplateRequest = new Request("DELETE", "/_index_template/" + getTestName().toLowerCase(Locale.ROOT));
1223+
if (createFollowerTemplate) {
1224+
assertOK(client().performRequest(deleteTemplateRequest));
1225+
}
1226+
try (var leaderClient = buildLeaderClient()) {
1227+
assertOK(leaderClient.performRequest(deleteTemplateRequest));
1228+
}
1229+
}
1230+
1231+
}
1232+
11231233
private int getNumberOfSuccessfulFollowedIndices() throws IOException {
11241234
return getNumberOfSuccessfulFollowedIndices(client());
11251235
}

0 commit comments

Comments
 (0)