* [ML] Adds jobType to Job

This change adds `jobType` field to teh `Job` class so that when the job is written to the index a `job_type` field is written int he document. This will help separate this type of job from other new job types in the future so migrating the index to allow those new type of jobs will be easer

relates elastic/x-pack-elasticsearch#798

* Addresses review comments

Original commit: elastic/x-pack-elasticsearch@d9fd11edb3
This commit is contained in:
Colin Goodheart-Smithe 2017-04-05 11:12:26 +01:00 committed by GitHub
parent 2b5c0faebd
commit 00a5759d54
1 changed files with 25 additions and 2 deletions

View File

@ -43,10 +43,13 @@ public class Job extends AbstractDiffable<Job> implements Writeable, ToXContent
public static final String TYPE = "job"; public static final String TYPE = "job";
public static final String ANOMALY_DETECTOR_JOB_TYPE = "anomaly_detector";
/* /*
* Field names used in serialization * Field names used in serialization
*/ */
public static final ParseField ID = new ParseField("job_id"); public static final ParseField ID = new ParseField("job_id");
public static final ParseField JOB_TYPE = new ParseField("job_type");
public static final ParseField ANALYSIS_CONFIG = new ParseField("analysis_config"); public static final ParseField ANALYSIS_CONFIG = new ParseField("analysis_config");
public static final ParseField ANALYSIS_LIMITS = new ParseField("analysis_limits"); public static final ParseField ANALYSIS_LIMITS = new ParseField("analysis_limits");
public static final ParseField CREATE_TIME = new ParseField("create_time"); public static final ParseField CREATE_TIME = new ParseField("create_time");
@ -76,6 +79,7 @@ public class Job extends AbstractDiffable<Job> implements Writeable, ToXContent
static { static {
PARSER.declareString(Builder::setId, ID); PARSER.declareString(Builder::setId, ID);
PARSER.declareString(Builder::setJobType, JOB_TYPE);
PARSER.declareStringOrNull(Builder::setDescription, DESCRIPTION); PARSER.declareStringOrNull(Builder::setDescription, DESCRIPTION);
PARSER.declareField(Builder::setCreateTime, p -> { PARSER.declareField(Builder::setCreateTime, p -> {
if (p.currentToken() == Token.VALUE_NUMBER) { if (p.currentToken() == Token.VALUE_NUMBER) {
@ -119,6 +123,7 @@ public class Job extends AbstractDiffable<Job> implements Writeable, ToXContent
} }
private final String jobId; private final String jobId;
private final String jobType;
private final String description; private final String description;
// TODO: Use java.time for the Dates here: x-pack-elasticsearch#829 // TODO: Use java.time for the Dates here: x-pack-elasticsearch#829
private final Date createTime; private final Date createTime;
@ -137,13 +142,15 @@ public class Job extends AbstractDiffable<Job> implements Writeable, ToXContent
private final String resultsIndexName; private final String resultsIndexName;
private final boolean deleted; private final boolean deleted;
private Job(String jobId, String description, Date createTime, Date finishedTime, Date lastDataTime, private Job(String jobId, String jobType, String description, Date createTime,
Date finishedTime, Date lastDataTime,
AnalysisConfig analysisConfig, AnalysisLimits analysisLimits, DataDescription dataDescription, AnalysisConfig analysisConfig, AnalysisLimits analysisLimits, DataDescription dataDescription,
ModelPlotConfig modelPlotConfig, Long renormalizationWindowDays, TimeValue backgroundPersistInterval, ModelPlotConfig modelPlotConfig, Long renormalizationWindowDays, TimeValue backgroundPersistInterval,
Long modelSnapshotRetentionDays, Long resultsRetentionDays, Map<String, Object> customSettings, Long modelSnapshotRetentionDays, Long resultsRetentionDays, Map<String, Object> customSettings,
String modelSnapshotId, String resultsIndexName, boolean deleted) { String modelSnapshotId, String resultsIndexName, boolean deleted) {
this.jobId = jobId; this.jobId = jobId;
this.jobType = jobType;
this.description = description; this.description = description;
this.createTime = createTime; this.createTime = createTime;
this.finishedTime = finishedTime; this.finishedTime = finishedTime;
@ -164,6 +171,7 @@ public class Job extends AbstractDiffable<Job> implements Writeable, ToXContent
public Job(StreamInput in) throws IOException { public Job(StreamInput in) throws IOException {
jobId = in.readString(); jobId = in.readString();
jobType = in.readString();
description = in.readOptionalString(); description = in.readOptionalString();
createTime = new Date(in.readVLong()); createTime = new Date(in.readVLong());
finishedTime = in.readBoolean() ? new Date(in.readVLong()) : null; finishedTime = in.readBoolean() ? new Date(in.readVLong()) : null;
@ -191,6 +199,10 @@ public class Job extends AbstractDiffable<Job> implements Writeable, ToXContent
return jobId; return jobId;
} }
String getJobType() {
return jobType;
}
/** /**
* The name of the index storing the job's results and state. * The name of the index storing the job's results and state.
* This defaults to {@link #getId()} if a specific index name is not set. * This defaults to {@link #getId()} if a specific index name is not set.
@ -359,6 +371,7 @@ public class Job extends AbstractDiffable<Job> implements Writeable, ToXContent
@Override @Override
public void writeTo(StreamOutput out) throws IOException { public void writeTo(StreamOutput out) throws IOException {
out.writeString(jobId); out.writeString(jobId);
out.writeString(jobType);
out.writeOptionalString(description); out.writeOptionalString(description);
out.writeVLong(createTime.getTime()); out.writeVLong(createTime.getTime());
if (finishedTime != null) { if (finishedTime != null) {
@ -399,6 +412,7 @@ public class Job extends AbstractDiffable<Job> implements Writeable, ToXContent
final String humanReadableSuffix = "_string"; final String humanReadableSuffix = "_string";
builder.field(ID.getPreferredName(), jobId); builder.field(ID.getPreferredName(), jobId);
builder.field(JOB_TYPE.getPreferredName(), jobType);
if (description != null) { if (description != null) {
builder.field(DESCRIPTION.getPreferredName(), description); builder.field(DESCRIPTION.getPreferredName(), description);
} }
@ -497,6 +511,7 @@ public class Job extends AbstractDiffable<Job> implements Writeable, ToXContent
public static class Builder implements Writeable, ToXContent { public static class Builder implements Writeable, ToXContent {
private String id; private String id;
private String jobType = ANOMALY_DETECTOR_JOB_TYPE;
private String description; private String description;
private AnalysisConfig analysisConfig; private AnalysisConfig analysisConfig;
private AnalysisLimits analysisLimits; private AnalysisLimits analysisLimits;
@ -543,6 +558,7 @@ public class Job extends AbstractDiffable<Job> implements Writeable, ToXContent
public Builder(StreamInput in) throws IOException { public Builder(StreamInput in) throws IOException {
id = in.readOptionalString(); id = in.readOptionalString();
jobType = in.readString();
description = in.readOptionalString(); description = in.readOptionalString();
createTime = in.readBoolean() ? new Date(in.readVLong()) : null; createTime = in.readBoolean() ? new Date(in.readVLong()) : null;
finishedTime = in.readBoolean() ? new Date(in.readVLong()) : null; finishedTime = in.readBoolean() ? new Date(in.readVLong()) : null;
@ -570,6 +586,10 @@ public class Job extends AbstractDiffable<Job> implements Writeable, ToXContent
return id; return id;
} }
private void setJobType(String jobType) {
this.jobType = jobType;
}
public Date getCreateTime() { public Date getCreateTime() {
return createTime; return createTime;
} }
@ -670,6 +690,7 @@ public class Job extends AbstractDiffable<Job> implements Writeable, ToXContent
@Override @Override
public void writeTo(StreamOutput out) throws IOException { public void writeTo(StreamOutput out) throws IOException {
out.writeOptionalString(id); out.writeOptionalString(id);
out.writeString(jobType);
out.writeOptionalString(description); out.writeOptionalString(description);
if (createTime != null) { if (createTime != null) {
out.writeBoolean(true); out.writeBoolean(true);
@ -709,6 +730,7 @@ public class Job extends AbstractDiffable<Job> implements Writeable, ToXContent
if (id != null) { if (id != null) {
builder.field(ID.getPreferredName(), id); builder.field(ID.getPreferredName(), id);
} }
builder.field(JOB_TYPE.getPreferredName(), jobType);
if (description != null) { if (description != null) {
builder.field(DESCRIPTION.getPreferredName(), description); builder.field(DESCRIPTION.getPreferredName(), description);
} }
@ -841,7 +863,8 @@ public class Job extends AbstractDiffable<Job> implements Writeable, ToXContent
} }
return new Job( return new Job(
id, description, createTime, finishedTime, lastDataTime, analysisConfig, analysisLimits, id, jobType, description, createTime, finishedTime, lastDataTime,
analysisConfig, analysisLimits,
dataDescription, modelPlotConfig, renormalizationWindowDays, backgroundPersistInterval, dataDescription, modelPlotConfig, renormalizationWindowDays, backgroundPersistInterval,
modelSnapshotRetentionDays, resultsRetentionDays, customSettings, modelSnapshotId, modelSnapshotRetentionDays, resultsRetentionDays, customSettings, modelSnapshotId,
resultsIndexName, deleted); resultsIndexName, deleted);