Skip to content

Commit 845924f

Browse files
committed
Lower minimum model memory limit value from 1MB to 1kB.
1 parent 43c154b commit 845924f

File tree

8 files changed

+21
-28
lines changed

8 files changed

+21
-28
lines changed

client/rest-high-level/src/test/java/org/elasticsearch/client/MachineLearningIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1951,10 +1951,10 @@ public void testEstimateMemoryUsage() throws IOException {
19511951
.build());
19521952

19531953
// We are pretty liberal here as this test does not aim at verifying concrete numbers but rather end-to-end user workflow.
1954-
ByteSizeValue lowerBound = new ByteSizeValue(1, ByteSizeUnit.MB);
1954+
ByteSizeValue lowerBound = new ByteSizeValue(1, ByteSizeUnit.KB);
19551955
ByteSizeValue upperBound = new ByteSizeValue(1, ByteSizeUnit.GB);
19561956

1957-
// Data Frame has 10 rows, expect that the returned estimates fall within (1MB, 1GB) range.
1957+
// Data Frame has 10 rows, expect that the returned estimates fall within (1kB, 1GB) range.
19581958
EstimateMemoryUsageResponse response1 =
19591959
execute(
19601960
estimateMemoryUsageRequest, machineLearningClient::estimateMemoryUsage, machineLearningClient::estimateMemoryUsageAsync);

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/action/EstimateMemoryUsageAction.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import java.util.Objects;
2222

2323
import static org.elasticsearch.common.xcontent.ConstructingObjectParser.optionalConstructorArg;
24-
import static org.elasticsearch.xpack.core.ml.dataframe.DataFrameAnalyticsConfig.MIN_MODEL_MEMORY_LIMIT;
2524

2625
public class EstimateMemoryUsageAction extends ActionType<EstimateMemoryUsageAction.Response> {
2726

@@ -61,9 +60,8 @@ public static class Response extends ActionResponse implements ToXContentObject
6160
private final ByteSizeValue expectedMemoryWithDisk;
6261

6362
public Response(@Nullable ByteSizeValue expectedMemoryWithoutDisk, @Nullable ByteSizeValue expectedMemoryWithDisk) {
64-
this.expectedMemoryWithoutDisk =
65-
expectedMemoryWithoutDisk != null ? max(expectedMemoryWithoutDisk, MIN_MODEL_MEMORY_LIMIT) : null;
66-
this.expectedMemoryWithDisk = expectedMemoryWithDisk != null ? max(expectedMemoryWithDisk, MIN_MODEL_MEMORY_LIMIT) : null;
63+
this.expectedMemoryWithoutDisk = expectedMemoryWithoutDisk;
64+
this.expectedMemoryWithDisk = expectedMemoryWithDisk;
6765
}
6866

6967
public Response(StreamInput in) throws IOException {
@@ -117,9 +115,5 @@ public boolean equals(Object other) {
117115
public int hashCode() {
118116
return Objects.hash(expectedMemoryWithoutDisk, expectedMemoryWithDisk);
119117
}
120-
121-
private static <T extends Comparable<T>> T max(T value1, T value2) {
122-
return value1.compareTo(value2) >= 0 ? value1 : value2;
123-
}
124118
}
125119
}

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/dataframe/DataFrameAnalyticsConfig.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public class DataFrameAnalyticsConfig implements ToXContentObject, Writeable {
4040
public static final String TYPE = "data_frame_analytics_config";
4141

4242
public static final ByteSizeValue DEFAULT_MODEL_MEMORY_LIMIT = new ByteSizeValue(1, ByteSizeUnit.GB);
43-
public static final ByteSizeValue MIN_MODEL_MEMORY_LIMIT = new ByteSizeValue(1, ByteSizeUnit.MB);
43+
public static final ByteSizeValue MIN_MODEL_MEMORY_LIMIT = new ByteSizeValue(1, ByteSizeUnit.KB);
4444
/**
4545
* This includes the overhead of thread stacks and data structures that the program might use that
4646
* are not instrumented. But it does NOT include the memory used by loading the executable code.
@@ -442,7 +442,8 @@ private void applyMaxModelMemoryLimit() {
442442
if (modelMemoryLimit.compareTo(MIN_MODEL_MEMORY_LIMIT) < 0) {
443443
// Explicit setting lower than minimum is an error
444444
throw ExceptionsHelper.badRequestException(
445-
Messages.getMessage(Messages.JOB_CONFIG_MODEL_MEMORY_LIMIT_TOO_LOW, modelMemoryLimit));
445+
Messages.getMessage(
446+
Messages.JOB_CONFIG_MODEL_MEMORY_LIMIT_TOO_LOW, modelMemoryLimit, MIN_MODEL_MEMORY_LIMIT.getStringRep()));
446447
}
447448
if (maxModelMemoryIsSet && modelMemoryLimit.compareTo(maxModelMemoryLimit) > 0) {
448449
// Explicit setting higher than limit is an error

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/job/config/AnalysisLimits.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public AnalysisLimits(Long categorizationExamplesLimit) {
9090

9191
public AnalysisLimits(Long modelMemoryLimit, Long categorizationExamplesLimit) {
9292
if (modelMemoryLimit != null && modelMemoryLimit < 1) {
93-
String msg = Messages.getMessage(Messages.JOB_CONFIG_MODEL_MEMORY_LIMIT_TOO_LOW, modelMemoryLimit);
93+
String msg = Messages.getMessage(Messages.JOB_CONFIG_MODEL_MEMORY_LIMIT_TOO_LOW, modelMemoryLimit, "1 MiB");
9494
throw ExceptionsHelper.badRequestException(msg);
9595
}
9696
if (categorizationExamplesLimit != null && categorizationExamplesLimit < 0) {

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/job/messages/Messages.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public final class Messages {
143143
"Invalid detector rule: scope field ''{0}'' is invalid; select from {1}";
144144
public static final String JOB_CONFIG_FIELDNAME_INCOMPATIBLE_FUNCTION = "field_name cannot be used with function ''{0}''";
145145
public static final String JOB_CONFIG_FIELD_VALUE_TOO_LOW = "{0} cannot be less than {1,number}. Value = {2,number}";
146-
public static final String JOB_CONFIG_MODEL_MEMORY_LIMIT_TOO_LOW = "model_memory_limit must be at least 1 MiB. Value = {0}";
146+
public static final String JOB_CONFIG_MODEL_MEMORY_LIMIT_TOO_LOW = "model_memory_limit must be at least {1}. Value = {0}";
147147
public static final String JOB_CONFIG_MODEL_MEMORY_LIMIT_GREATER_THAN_MAX =
148148
"model_memory_limit [{0}] must be less than the value of the " +
149149
MachineLearningField.MAX_MODEL_MEMORY_LIMIT.getKey() +

x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/ml/action/EstimateMemoryUsageActionResponseTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ public void testConstructor_NullValues() {
4242

4343
public void testConstructor_SmallValues() {
4444
Response response = new Response(new ByteSizeValue(120, ByteSizeUnit.KB), new ByteSizeValue(30, ByteSizeUnit.KB));
45-
assertThat(response.getExpectedMemoryWithoutDisk(), equalTo(new ByteSizeValue(1, ByteSizeUnit.MB)));
46-
assertThat(response.getExpectedMemoryWithDisk(), equalTo(new ByteSizeValue(1, ByteSizeUnit.MB)));
45+
assertThat(response.getExpectedMemoryWithoutDisk(), equalTo(new ByteSizeValue(120, ByteSizeUnit.KB)));
46+
assertThat(response.getExpectedMemoryWithDisk(), equalTo(new ByteSizeValue(30, ByteSizeUnit.KB)));
4747
}
4848

4949
public void testConstructor() {

x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/ml/dataframe/DataFrameAnalyticsConfigTests.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -232,18 +232,16 @@ public void testInvalidModelMemoryLimits() {
232232
DataFrameAnalyticsConfig.Builder builder = new DataFrameAnalyticsConfig.Builder();
233233

234234
// All these are different ways of specifying a limit that is lower than the minimum
235-
assertTooSmall(expectThrows(ElasticsearchStatusException.class,
236-
() -> builder.setModelMemoryLimit(new ByteSizeValue(1048575, ByteSizeUnit.BYTES)).build()));
237-
assertTooSmall(expectThrows(ElasticsearchStatusException.class,
238-
() -> builder.setModelMemoryLimit(new ByteSizeValue(0, ByteSizeUnit.BYTES)).build()));
239235
assertTooSmall(expectThrows(ElasticsearchStatusException.class,
240236
() -> builder.setModelMemoryLimit(new ByteSizeValue(-1, ByteSizeUnit.BYTES)).build()));
241237
assertTooSmall(expectThrows(ElasticsearchStatusException.class,
242-
() -> builder.setModelMemoryLimit(new ByteSizeValue(1023, ByteSizeUnit.KB)).build()));
238+
() -> builder.setModelMemoryLimit(new ByteSizeValue(0, ByteSizeUnit.BYTES)).build()));
243239
assertTooSmall(expectThrows(ElasticsearchStatusException.class,
244240
() -> builder.setModelMemoryLimit(new ByteSizeValue(0, ByteSizeUnit.KB)).build()));
245241
assertTooSmall(expectThrows(ElasticsearchStatusException.class,
246242
() -> builder.setModelMemoryLimit(new ByteSizeValue(0, ByteSizeUnit.MB)).build()));
243+
assertTooSmall(expectThrows(ElasticsearchStatusException.class,
244+
() -> builder.setModelMemoryLimit(new ByteSizeValue(1023, ByteSizeUnit.BYTES)).build()));
247245
}
248246

249247
public void testNoMemoryCapping() {
@@ -342,6 +340,6 @@ public void testPreventVersionInjection() throws IOException {
342340
}
343341

344342
private static void assertTooSmall(ElasticsearchStatusException e) {
345-
assertThat(e.getMessage(), startsWith("model_memory_limit must be at least 1 MiB."));
343+
assertThat(e.getMessage(), startsWith("model_memory_limit must be at least 1kb."));
346344
}
347345
}

x-pack/plugin/src/test/resources/rest-api-spec/test/ml/data_frame_analytics_memory_usage_estimation.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ setup:
5050
body:
5151
source: { index: "index-source" }
5252
analysis: { outlier_detection: {} }
53-
- match: { expected_memory_without_disk: "1mb" }
54-
- match: { expected_memory_with_disk: "1mb" }
53+
- match: { expected_memory_without_disk: "3kb" }
54+
- match: { expected_memory_with_disk: "3kb" }
5555

5656
- do:
5757
index:
@@ -65,8 +65,8 @@ setup:
6565
body:
6666
source: { index: "index-source" }
6767
analysis: { outlier_detection: {} }
68-
- match: { expected_memory_without_disk: "1mb" }
69-
- match: { expected_memory_with_disk: "1mb" }
68+
- match: { expected_memory_without_disk: "4kb" }
69+
- match: { expected_memory_with_disk: "4kb" }
7070

7171
- do:
7272
index:
@@ -80,5 +80,5 @@ setup:
8080
body:
8181
source: { index: "index-source" }
8282
analysis: { outlier_detection: {} }
83-
- match: { expected_memory_without_disk: "1mb" }
84-
- match: { expected_memory_with_disk: "1mb" }
83+
- match: { expected_memory_without_disk: "6kb" }
84+
- match: { expected_memory_with_disk: "5kb" }

0 commit comments

Comments
 (0)