[ML] Skip index health checks for remote indices on datafeed node sel (elastic/x-pack-elasticsearch#3301)

Upon selecting a node to run a datafeed we normally check that the
data indices exists and their primaries are active. However, these
checks cannot be applied for CCS to a remote cluster. This commit
skips these checks for remote indices.

This removes the last obstacle for running CCS datafeeds.

Relates elastic/x-pack-elasticsearch#1071

Original commit: elastic/x-pack-elasticsearch@092f44feee
This commit is contained in:
Dimitris Athanasiou 2017-12-12 15:12:33 +00:00 committed by GitHub
parent 711254fd24
commit 92c40061c5
2 changed files with 27 additions and 0 deletions

View File

@ -89,6 +89,12 @@ public class DatafeedNodeSelector {
private AssignmentFailure verifyIndicesActive(DatafeedConfig datafeed) {
List<String> indices = datafeed.getIndices();
for (String index : indices) {
if (isRemoteIndex(index)) {
// We cannot verify remote indices
continue;
}
String[] concreteIndices;
String reason = "cannot start datafeed [" + datafeed.getId() + "] because index ["
+ index + "] does not exist, is closed, or is still initializing.";
@ -115,6 +121,10 @@ public class DatafeedNodeSelector {
return null;
}
private boolean isRemoteIndex(String index) {
return index.indexOf(':') != -1;
}
private static class AssignmentFailure {
private final String reason;
private final boolean isCriticalForTaskCreation;

View File

@ -226,6 +226,23 @@ public class DatafeedNodeSelectorTests extends ESTestCase {
+ "[cannot start datafeed [datafeed_id] because index [not_foo] does not exist, is closed, or is still initializing.]"));
}
public void testRemoteIndex() {
MlMetadata.Builder mlMetadataBuilder = new MlMetadata.Builder();
Job job = createScheduledJob("job_id").build(new Date());
mlMetadataBuilder.putJob(job, false);
mlMetadataBuilder.putDatafeed(createDatafeed("datafeed_id", job.getId(), Collections.singletonList("remote:foo")), null);
mlMetadata = mlMetadataBuilder.build();
PersistentTasksCustomMetaData.Builder tasksBuilder = PersistentTasksCustomMetaData.builder();
addJobTask(job.getId(), "node_id", JobState.OPENED, tasksBuilder);
tasks = tasksBuilder.build();
givenClusterState("foo", 1, 0);
PersistentTasksCustomMetaData.Assignment result = new DatafeedNodeSelector(clusterState, resolver, "datafeed_id").selectNode();
assertNotNull(result.getExecutorNode());
}
public void testSelectNode_jobTaskStale() {
MlMetadata.Builder mlMetadataBuilder = new MlMetadata.Builder();
Job job = createScheduledJob("job_id").build(new Date());