|
@@ -8,6 +8,9 @@ package org.elasticsearch.xpack.ml.job.process.autodetect;
|
|
|
import org.elasticsearch.ElasticsearchException;
|
|
|
import org.elasticsearch.action.ActionListener;
|
|
|
import org.elasticsearch.client.Client;
|
|
|
+import org.elasticsearch.cluster.ClusterState;
|
|
|
+import org.elasticsearch.cluster.metadata.AliasOrIndex;
|
|
|
+import org.elasticsearch.cluster.metadata.MetaData;
|
|
|
import org.elasticsearch.common.CheckedConsumer;
|
|
|
import org.elasticsearch.common.settings.Settings;
|
|
|
import org.elasticsearch.common.util.concurrent.EsExecutors;
|
|
@@ -32,6 +35,7 @@ import org.elasticsearch.xpack.core.ml.job.config.JobTaskState;
|
|
|
import org.elasticsearch.xpack.core.ml.job.config.JobUpdate;
|
|
|
import org.elasticsearch.xpack.core.ml.job.config.MlFilter;
|
|
|
import org.elasticsearch.xpack.core.ml.job.config.ModelPlotConfig;
|
|
|
+import org.elasticsearch.xpack.core.ml.job.persistence.AnomalyDetectorsIndex;
|
|
|
import org.elasticsearch.xpack.core.ml.job.process.autodetect.state.DataCounts;
|
|
|
import org.elasticsearch.xpack.core.ml.job.process.autodetect.state.ModelSizeStats;
|
|
|
import org.elasticsearch.xpack.core.ml.job.process.autodetect.state.ModelSnapshot;
|
|
@@ -63,6 +67,8 @@ import java.util.HashSet;
|
|
|
import java.util.List;
|
|
|
import java.util.Optional;
|
|
|
import java.util.Set;
|
|
|
+import java.util.SortedMap;
|
|
|
+import java.util.TreeMap;
|
|
|
import java.util.concurrent.Callable;
|
|
|
import java.util.concurrent.CountDownLatch;
|
|
|
import java.util.concurrent.ExecutorService;
|
|
@@ -109,6 +115,7 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
private JobDataCountsPersister jobDataCountsPersister;
|
|
|
private NormalizerFactory normalizerFactory;
|
|
|
private Auditor auditor;
|
|
|
+ private ClusterState clusterState;
|
|
|
|
|
|
private DataCounts dataCounts = new DataCounts("foo");
|
|
|
private ModelSizeStats modelSizeStats = new ModelSizeStats.Builder("foo").build();
|
|
@@ -128,6 +135,12 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
jobDataCountsPersister = mock(JobDataCountsPersister.class);
|
|
|
normalizerFactory = mock(NormalizerFactory.class);
|
|
|
auditor = mock(Auditor.class);
|
|
|
+ MetaData metaData = mock(MetaData.class);
|
|
|
+ SortedMap<String, AliasOrIndex> aliasOrIndexSortedMap = new TreeMap<>();
|
|
|
+ aliasOrIndexSortedMap.put(AnomalyDetectorsIndex.jobStateIndexWriteAlias(), mock(AliasOrIndex.Alias.class));
|
|
|
+ when(metaData.getAliasAndIndexLookup()).thenReturn(aliasOrIndexSortedMap);
|
|
|
+ clusterState = mock(ClusterState.class);
|
|
|
+ when(clusterState.getMetaData()).thenReturn(metaData);
|
|
|
|
|
|
doAnswer(invocationOnMock -> {
|
|
|
@SuppressWarnings("unchecked")
|
|
@@ -170,7 +183,7 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
JobTask jobTask = mock(JobTask.class);
|
|
|
when(jobTask.getJobId()).thenReturn("foo");
|
|
|
when(jobTask.getAllocationId()).thenReturn(1L);
|
|
|
- manager.openJob(jobTask, e -> {});
|
|
|
+ manager.openJob(jobTask, clusterState, e -> {});
|
|
|
assertEquals(1, manager.numberOfOpenJobs());
|
|
|
assertTrue(manager.jobHasActiveAutodetectProcess(jobTask));
|
|
|
verify(jobTask).updatePersistentTaskState(eq(new JobTaskState(JobState.OPENED, 1L)), any());
|
|
@@ -196,7 +209,7 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
JobTask jobTask = mock(JobTask.class);
|
|
|
when(jobTask.getJobId()).thenReturn(job.getId());
|
|
|
AtomicReference<Exception> errorHolder = new AtomicReference<>();
|
|
|
- manager.openJob(jobTask, errorHolder::set);
|
|
|
+ manager.openJob(jobTask, clusterState, errorHolder::set);
|
|
|
Exception error = errorHolder.get();
|
|
|
assertThat(error, is(notNullValue()));
|
|
|
assertThat(error.getMessage(), equalTo("Cannot open job [no_version] because jobs created prior to version 5.5 are not supported"));
|
|
@@ -242,22 +255,22 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
|
|
|
JobTask jobTask = mock(JobTask.class);
|
|
|
when(jobTask.getJobId()).thenReturn("foo");
|
|
|
- manager.openJob(jobTask, e -> {});
|
|
|
+ manager.openJob(jobTask, clusterState, e -> {});
|
|
|
jobTask = mock(JobTask.class);
|
|
|
when(jobTask.getJobId()).thenReturn("bar");
|
|
|
when(jobTask.getAllocationId()).thenReturn(1L);
|
|
|
- manager.openJob(jobTask, e -> {});
|
|
|
+ manager.openJob(jobTask, clusterState, e -> {});
|
|
|
jobTask = mock(JobTask.class);
|
|
|
when(jobTask.getJobId()).thenReturn("baz");
|
|
|
when(jobTask.getAllocationId()).thenReturn(2L);
|
|
|
- manager.openJob(jobTask, e -> {});
|
|
|
+ manager.openJob(jobTask, clusterState, e -> {});
|
|
|
assertEquals(3, manager.numberOfOpenJobs());
|
|
|
|
|
|
Exception[] holder = new Exception[1];
|
|
|
jobTask = mock(JobTask.class);
|
|
|
when(jobTask.getJobId()).thenReturn("foobar");
|
|
|
when(jobTask.getAllocationId()).thenReturn(3L);
|
|
|
- manager.openJob(jobTask, e -> holder[0] = e);
|
|
|
+ manager.openJob(jobTask, clusterState, e -> holder[0] = e);
|
|
|
Exception e = holder[0];
|
|
|
assertEquals("max running job capacity [3] reached", e.getMessage());
|
|
|
|
|
@@ -266,7 +279,7 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
when(jobTask.getJobId()).thenReturn("baz");
|
|
|
manager.closeJob(jobTask, false, null);
|
|
|
assertEquals(2, manager.numberOfOpenJobs());
|
|
|
- manager.openJob(jobTask, e1 -> {});
|
|
|
+ manager.openJob(jobTask, clusterState, e1 -> {});
|
|
|
assertEquals(3, manager.numberOfOpenJobs());
|
|
|
}
|
|
|
|
|
@@ -278,7 +291,7 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
JobTask jobTask = mock(JobTask.class);
|
|
|
when(jobTask.getJobId()).thenReturn("foo");
|
|
|
DataLoadParams params = new DataLoadParams(TimeRange.builder().build(), Optional.empty());
|
|
|
- manager.openJob(jobTask, e -> {});
|
|
|
+ manager.openJob(jobTask, clusterState, e -> {});
|
|
|
manager.processData(jobTask, analysisRegistry, createInputStream(""), randomFrom(XContentType.values()),
|
|
|
params, (dataCounts1, e) -> {});
|
|
|
assertEquals(1, manager.numberOfOpenJobs());
|
|
@@ -301,7 +314,7 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
|
|
|
JobTask jobTask = mock(JobTask.class);
|
|
|
when(jobTask.getJobId()).thenReturn("foo");
|
|
|
- manager.openJob(jobTask, e -> {});
|
|
|
+ manager.openJob(jobTask, clusterState, e -> {});
|
|
|
Exception[] holder = new Exception[1];
|
|
|
manager.processData(jobTask, analysisRegistry, inputStream, xContentType, params, (dataCounts1, e) -> holder[0] = e);
|
|
|
assertNotNull(holder[0]);
|
|
@@ -314,7 +327,7 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
|
|
|
JobTask jobTask = mock(JobTask.class);
|
|
|
when(jobTask.getJobId()).thenReturn("foo");
|
|
|
- manager.openJob(jobTask, e -> {});
|
|
|
+ manager.openJob(jobTask, clusterState, e -> {});
|
|
|
manager.processData(jobTask, analysisRegistry, createInputStream(""), randomFrom(XContentType.values()),
|
|
|
mock(DataLoadParams.class), (dataCounts1, e) -> {});
|
|
|
|
|
@@ -342,7 +355,7 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
|
|
|
JobTask jobTask = mock(JobTask.class);
|
|
|
when(jobTask.getJobId()).thenReturn("foo");
|
|
|
- manager.openJob(jobTask, e -> {});
|
|
|
+ manager.openJob(jobTask, clusterState, e -> {});
|
|
|
manager.processData(jobTask, analysisRegistry, createInputStream(""), randomFrom(XContentType.values()),
|
|
|
mock(DataLoadParams.class), (dataCounts1, e) -> {});
|
|
|
|
|
@@ -390,7 +403,7 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
|
|
|
JobTask jobTask = mock(JobTask.class);
|
|
|
when(jobTask.getJobId()).thenReturn("foo");
|
|
|
- manager.openJob(jobTask, e -> {});
|
|
|
+ manager.openJob(jobTask, clusterState, e -> {});
|
|
|
manager.processData(jobTask, analysisRegistry, createInputStream(""), randomFrom(XContentType.values()),
|
|
|
mock(DataLoadParams.class), (dataCounts1, e) -> {});
|
|
|
|
|
@@ -419,7 +432,7 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
InputStream inputStream = createInputStream("");
|
|
|
JobTask jobTask = mock(JobTask.class);
|
|
|
when(jobTask.getJobId()).thenReturn("foo");
|
|
|
- manager.openJob(jobTask, e -> {});
|
|
|
+ manager.openJob(jobTask, clusterState, e -> {});
|
|
|
manager.processData(jobTask, analysisRegistry, inputStream, xContentType, params, (dataCounts1, e) -> {});
|
|
|
verify(communicator).writeToJob(same(inputStream), same(analysisRegistry), same(xContentType), same(params), any());
|
|
|
}
|
|
@@ -431,7 +444,7 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
JobTask jobTask = mock(JobTask.class);
|
|
|
when(jobTask.getJobId()).thenReturn("foo");
|
|
|
InputStream inputStream = createInputStream("");
|
|
|
- manager.openJob(jobTask, e -> {});
|
|
|
+ manager.openJob(jobTask, clusterState, e -> {});
|
|
|
manager.processData(jobTask, analysisRegistry, inputStream, randomFrom(XContentType.values()),
|
|
|
mock(DataLoadParams.class), (dataCounts1, e) -> {});
|
|
|
|
|
@@ -471,7 +484,7 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
// create a jobtask
|
|
|
JobTask jobTask = mock(JobTask.class);
|
|
|
when(jobTask.getJobId()).thenReturn("foo");
|
|
|
- manager.openJob(jobTask, e -> {});
|
|
|
+ manager.openJob(jobTask, clusterState, e -> {});
|
|
|
manager.processData(jobTask, analysisRegistry, createInputStream(""), randomFrom(XContentType.values()), mock(DataLoadParams.class),
|
|
|
(dataCounts1, e) -> {
|
|
|
});
|
|
@@ -511,7 +524,7 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
when(jobTask.getJobId()).thenReturn("foo");
|
|
|
assertFalse(manager.jobHasActiveAutodetectProcess(jobTask));
|
|
|
|
|
|
- manager.openJob(jobTask, e -> {});
|
|
|
+ manager.openJob(jobTask, clusterState, e -> {});
|
|
|
manager.processData(jobTask, analysisRegistry, createInputStream(""), randomFrom(XContentType.values()),
|
|
|
mock(DataLoadParams.class), (dataCounts1, e) -> {});
|
|
|
|
|
@@ -529,7 +542,7 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
when(jobTask.getJobId()).thenReturn("foo");
|
|
|
assertFalse(manager.jobHasActiveAutodetectProcess(jobTask));
|
|
|
|
|
|
- manager.openJob(jobTask, e -> {});
|
|
|
+ manager.openJob(jobTask, clusterState, e -> {});
|
|
|
manager.processData(jobTask, analysisRegistry, createInputStream(""), randomFrom(XContentType.values()),
|
|
|
mock(DataLoadParams.class), (dataCounts1, e) -> {});
|
|
|
|
|
@@ -563,7 +576,7 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
|
|
|
JobTask jobTask = mock(JobTask.class);
|
|
|
when(jobTask.getJobId()).thenReturn("foo");
|
|
|
- manager.openJob(jobTask, e -> {});
|
|
|
+ manager.openJob(jobTask, clusterState, e -> {});
|
|
|
InputStream inputStream = createInputStream("");
|
|
|
DataCounts[] dataCounts = new DataCounts[1];
|
|
|
manager.processData(jobTask, analysisRegistry, inputStream,
|
|
@@ -728,7 +741,7 @@ public class AutodetectProcessManagerTests extends ESTestCase {
|
|
|
AutodetectProcessManager manager = createManager(communicator);
|
|
|
JobTask jobTask = mock(JobTask.class);
|
|
|
when(jobTask.getJobId()).thenReturn(jobId);
|
|
|
- manager.openJob(jobTask, e -> {});
|
|
|
+ manager.openJob(jobTask, clusterState, e -> {});
|
|
|
manager.processData(jobTask, analysisRegistry, createInputStream(""), randomFrom(XContentType.values()),
|
|
|
mock(DataLoadParams.class), (dataCounts, e) -> {});
|
|
|
return manager;
|