|
@@ -22,13 +22,15 @@ import org.elasticsearch.persistent.AllocatedPersistentTask;
|
|
|
import org.elasticsearch.tasks.TaskId;
|
|
|
import org.elasticsearch.threadpool.ThreadPool;
|
|
|
import org.elasticsearch.xpack.core.ClientHelper;
|
|
|
+import org.elasticsearch.xpack.core.common.notifications.Auditor;
|
|
|
import org.elasticsearch.xpack.core.dataframe.DataFrameField;
|
|
|
import org.elasticsearch.xpack.core.dataframe.DataFrameMessages;
|
|
|
+import org.elasticsearch.xpack.core.dataframe.notifications.DataFrameAuditMessage;
|
|
|
+import org.elasticsearch.xpack.core.dataframe.transforms.DataFrameTransform;
|
|
|
import org.elasticsearch.xpack.core.dataframe.action.StartDataFrameTransformTaskAction;
|
|
|
import org.elasticsearch.xpack.core.dataframe.action.StartDataFrameTransformTaskAction.Response;
|
|
|
import org.elasticsearch.xpack.core.dataframe.action.StopDataFrameTransformAction;
|
|
|
import org.elasticsearch.xpack.core.dataframe.transforms.DataFrameIndexerTransformStats;
|
|
|
-import org.elasticsearch.xpack.core.dataframe.transforms.DataFrameTransform;
|
|
|
import org.elasticsearch.xpack.core.dataframe.transforms.DataFrameTransformConfig;
|
|
|
import org.elasticsearch.xpack.core.dataframe.transforms.DataFrameTransformState;
|
|
|
import org.elasticsearch.xpack.core.indexing.IndexerState;
|
|
@@ -52,6 +54,7 @@ public class DataFrameTransformTask extends AllocatedPersistentTask implements S
|
|
|
private final SchedulerEngine schedulerEngine;
|
|
|
private final ThreadPool threadPool;
|
|
|
private final DataFrameIndexer indexer;
|
|
|
+ private final Auditor<DataFrameAuditMessage> auditor;
|
|
|
|
|
|
// the generation of this data frame, for v1 there will be only
|
|
|
// 0: data frame not created or still indexing
|
|
@@ -59,13 +62,15 @@ public class DataFrameTransformTask extends AllocatedPersistentTask implements S
|
|
|
private final AtomicReference<Long> generation;
|
|
|
|
|
|
public DataFrameTransformTask(long id, String type, String action, TaskId parentTask, DataFrameTransform transform,
|
|
|
- DataFrameTransformState state, Client client, DataFrameTransformsConfigManager transformsConfigManager,
|
|
|
- DataFrameTransformsCheckpointService transformsCheckpointService, SchedulerEngine schedulerEngine, ThreadPool threadPool,
|
|
|
- Map<String, String> headers) {
|
|
|
+ DataFrameTransformState state, Client client, DataFrameTransformsConfigManager transformsConfigManager,
|
|
|
+ DataFrameTransformsCheckpointService transformsCheckpointService,
|
|
|
+ SchedulerEngine schedulerEngine, Auditor<DataFrameAuditMessage> auditor,
|
|
|
+ ThreadPool threadPool, Map<String, String> headers) {
|
|
|
super(id, type, action, DataFrameField.PERSISTENT_TASK_DESCRIPTION_PREFIX + transform.getId(), parentTask, headers);
|
|
|
this.transform = transform;
|
|
|
this.schedulerEngine = schedulerEngine;
|
|
|
this.threadPool = threadPool;
|
|
|
+ this.auditor = auditor;
|
|
|
IndexerState initialState = IndexerState.STOPPED;
|
|
|
long initialGeneration = 0;
|
|
|
Map<String, Object> initialPosition = null;
|
|
@@ -87,7 +92,7 @@ public class DataFrameTransformTask extends AllocatedPersistentTask implements S
|
|
|
}
|
|
|
|
|
|
this.indexer = new ClientDataFrameIndexer(transform.getId(), transformsConfigManager, transformsCheckpointService,
|
|
|
- new AtomicReference<>(initialState), initialPosition, client);
|
|
|
+ new AtomicReference<>(initialState), initialPosition, client, auditor);
|
|
|
this.generation = new AtomicReference<Long>(initialGeneration);
|
|
|
}
|
|
|
|
|
@@ -142,6 +147,7 @@ public class DataFrameTransformTask extends AllocatedPersistentTask implements S
|
|
|
updatePersistentTaskState(state,
|
|
|
ActionListener.wrap(
|
|
|
(task) -> {
|
|
|
+ auditor.info(transform.getId(), "Updated state to [" + state.getIndexerState() + "]");
|
|
|
logger.debug("Successfully updated state for data frame transform [" + transform.getId() + "] to ["
|
|
|
+ state.getIndexerState() + "][" + state.getPosition() + "]");
|
|
|
listener.onResponse(new StartDataFrameTransformTaskAction.Response(true));
|
|
@@ -169,6 +175,7 @@ public class DataFrameTransformTask extends AllocatedPersistentTask implements S
|
|
|
// overwrite some docs and eventually checkpoint.
|
|
|
DataFrameTransformState state = new DataFrameTransformState(IndexerState.STOPPED, indexer.getPosition(), generation.get());
|
|
|
updatePersistentTaskState(state, ActionListener.wrap((task) -> {
|
|
|
+ auditor.info(transform.getId(), "Updated state to [" + state.getIndexerState() + "]");
|
|
|
logger.debug("Successfully updated state for data frame transform [{}] to [{}]", transform.getId(),
|
|
|
state.getIndexerState());
|
|
|
listener.onResponse(new StopDataFrameTransformAction.Response(true));
|
|
@@ -231,18 +238,21 @@ public class DataFrameTransformTask extends AllocatedPersistentTask implements S
|
|
|
private final DataFrameTransformsConfigManager transformsConfigManager;
|
|
|
private final DataFrameTransformsCheckpointService transformsCheckpointService;
|
|
|
private final String transformId;
|
|
|
+ private final Auditor<DataFrameAuditMessage> auditor;
|
|
|
private Map<String, String> fieldMappings = null;
|
|
|
|
|
|
private DataFrameTransformConfig transformConfig = null;
|
|
|
|
|
|
public ClientDataFrameIndexer(String transformId, DataFrameTransformsConfigManager transformsConfigManager,
|
|
|
- DataFrameTransformsCheckpointService transformsCheckpointService, AtomicReference<IndexerState> initialState,
|
|
|
- Map<String, Object> initialPosition, Client client) {
|
|
|
+ DataFrameTransformsCheckpointService transformsCheckpointService,
|
|
|
+ AtomicReference<IndexerState> initialState, Map<String, Object> initialPosition, Client client,
|
|
|
+ Auditor<DataFrameAuditMessage> auditor) {
|
|
|
super(threadPool.executor(ThreadPool.Names.GENERIC), initialState, initialPosition);
|
|
|
this.transformId = transformId;
|
|
|
this.transformsConfigManager = transformsConfigManager;
|
|
|
this.transformsCheckpointService = transformsCheckpointService;
|
|
|
this.client = client;
|
|
|
+ this.auditor = auditor;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -282,6 +292,7 @@ public class DataFrameTransformTask extends AllocatedPersistentTask implements S
|
|
|
|
|
|
// todo: set job into failed state
|
|
|
if (transformConfig.isValid() == false) {
|
|
|
+ auditor.error(transformId, "Cannot execute data frame transform as configuration is invalid");
|
|
|
throw new RuntimeException(
|
|
|
DataFrameMessages.getMessage(DataFrameMessages.DATA_FRAME_TRANSFORM_CONFIGURATION_INVALID, transformId));
|
|
|
}
|
|
@@ -346,16 +357,19 @@ public class DataFrameTransformTask extends AllocatedPersistentTask implements S
|
|
|
|
|
|
@Override
|
|
|
protected void onFailure(Exception exc) {
|
|
|
+ auditor.error(transform.getId(), "Data frame transform failed with an exception: " + exc.getMessage());
|
|
|
logger.warn("Data frame transform [" + transform.getId() + "] failed with an exception: ", exc);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
protected void onFinish() {
|
|
|
+ auditor.info(transform.getId(), "Finished indexing for data frame transform");
|
|
|
logger.info("Finished indexing for data frame transform [" + transform.getId() + "]");
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
protected void onAbort() {
|
|
|
+ auditor.info(transform.getId(), "Received abort request, stopping indexer");
|
|
|
logger.info("Data frame transform [" + transform.getId() + "] received abort request, stopping indexer");
|
|
|
shutdown();
|
|
|
}
|