Skip to content

Commit

Permalink
Leniently parse ml persistent task parameters (#33950)
Browse files Browse the repository at this point in the history
  • Loading branch information
davidkyle committed Sep 25, 2018
1 parent 79e716b commit df7041b
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ public static class JobParams implements XPackPlugin.XPackPersistentTaskParams {
public static final ParseField IGNORE_DOWNTIME = new ParseField("ignore_downtime");

public static final ParseField TIMEOUT = new ParseField("timeout");
public static ObjectParser<JobParams, Void> PARSER = new ObjectParser<>(TASK_NAME, JobParams::new);
public static ObjectParser<JobParams, Void> PARSER = new ObjectParser<>(TASK_NAME, true, JobParams::new);

static {
PARSER.declareString(JobParams::setJobId, Job.ID);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ public boolean equals(Object obj) {

public static class DatafeedParams implements XPackPlugin.XPackPersistentTaskParams {

public static ObjectParser<DatafeedParams, Void> PARSER = new ObjectParser<>(TASK_NAME, DatafeedParams::new);
public static ObjectParser<DatafeedParams, Void> PARSER = new ObjectParser<>(TASK_NAME, true, DatafeedParams::new);

static {
PARSER.declareString((params, datafeedId) -> params.datafeedId = datafeedId, DatafeedConfig.ID);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/

package org.elasticsearch.xpack.core.ml.action;

import org.elasticsearch.common.io.stream.Writeable;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.test.AbstractSerializingTestCase;

import java.io.IOException;

public class DatafeedParamsTests extends AbstractSerializingTestCase<StartDatafeedAction.DatafeedParams> {
@Override
protected StartDatafeedAction.DatafeedParams doParseInstance(XContentParser parser) throws IOException {
return StartDatafeedAction.DatafeedParams.parseRequest(null, parser);
}

public static StartDatafeedAction.DatafeedParams createDatafeedParams() {
StartDatafeedAction.DatafeedParams params =
new StartDatafeedAction.DatafeedParams(randomAlphaOfLength(10), randomNonNegativeLong());
if (randomBoolean()) {
params.setEndTime(randomNonNegativeLong());
}
if (randomBoolean()) {
params.setTimeout(TimeValue.timeValueMillis(randomNonNegativeLong()));
}
return params;
}

@Override
protected StartDatafeedAction.DatafeedParams createTestInstance() {
return createDatafeedParams();
}

@Override
protected Writeable.Reader<StartDatafeedAction.DatafeedParams> instanceReader() {
return StartDatafeedAction.DatafeedParams::new;
}

@Override
protected boolean supportsUnknownFields() {
return true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/

package org.elasticsearch.xpack.core.ml.action;

import org.elasticsearch.common.io.stream.Writeable;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.test.AbstractSerializingTestCase;

import java.io.IOException;

public class JobParamsTests extends AbstractSerializingTestCase<OpenJobAction.JobParams> {

@Override
protected OpenJobAction.JobParams doParseInstance(XContentParser parser) throws IOException {
return OpenJobAction.JobParams.parseRequest(null, parser);
}

public static OpenJobAction.JobParams createJobParams() {
OpenJobAction.JobParams params = new OpenJobAction.JobParams(randomAlphaOfLengthBetween(1, 20));
if (randomBoolean()) {
params.setTimeout(TimeValue.timeValueMillis(randomNonNegativeLong()));
}
return params;
}

@Override
protected OpenJobAction.JobParams createTestInstance() {
return createJobParams();
}

@Override
protected Writeable.Reader<OpenJobAction.JobParams> instanceReader() {
return OpenJobAction.JobParams::new;
}

@Override
protected boolean supportsUnknownFields() {
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
*/
package org.elasticsearch.xpack.core.ml.action;

import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.test.AbstractStreamableXContentTestCase;
import org.elasticsearch.xpack.core.ml.action.OpenJobAction.Request;
Expand All @@ -14,11 +13,7 @@ public class OpenJobActionRequestTests extends AbstractStreamableXContentTestCas

@Override
protected Request createTestInstance() {
OpenJobAction.JobParams params = new OpenJobAction.JobParams(randomAlphaOfLengthBetween(1, 20));
if (randomBoolean()) {
params.setTimeout(TimeValue.timeValueMillis(randomNonNegativeLong()));
}
return new Request(params);
return new Request(JobParamsTests.createJobParams());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,8 @@
package org.elasticsearch.xpack.core.ml.action;

import org.elasticsearch.ElasticsearchParseException;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.test.AbstractStreamableXContentTestCase;
import org.elasticsearch.xpack.core.ml.action.StartDatafeedAction.DatafeedParams;
import org.elasticsearch.xpack.core.ml.action.StartDatafeedAction.Request;

import static org.hamcrest.Matchers.equalTo;
Expand All @@ -18,14 +16,7 @@ public class StartDatafeedActionRequestTests extends AbstractStreamableXContentT

@Override
protected Request createTestInstance() {
DatafeedParams params = new DatafeedParams(randomAlphaOfLength(10), randomNonNegativeLong());
if (randomBoolean()) {
params.setEndTime(randomNonNegativeLong());
}
if (randomBoolean()) {
params.setTimeout(TimeValue.timeValueMillis(randomNonNegativeLong()));
}
return new Request(params);
return new Request(DatafeedParamsTests.createDatafeedParams());
}

@Override
Expand Down

0 comments on commit df7041b

Please sign in to comment.