From 569957e7470fd11ae656574e258664ac9fc387d8 Mon Sep 17 00:00:00 2001 From: Jason Tedor Date: Sat, 21 Mar 2020 19:39:15 -0400 Subject: [PATCH 1/3] Remove support for fractional byte size values These have been deprecated since Elasticsearch 6.2.0. This commit finishes them off by removing support for parsing them. --- .../migration/migrate_8_0/settings.asciidoc | 7 +++++++ .../elasticsearch/common/unit/ByteSizeValue.java | 14 +------------- .../common/unit/ByteSizeValueTests.java | 10 ++++++---- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/docs/reference/migration/migrate_8_0/settings.asciidoc b/docs/reference/migration/migrate_8_0/settings.asciidoc index 82ef5b8190adf..4fbb744fae2fb 100644 --- a/docs/reference/migration/migrate_8_0/settings.asciidoc +++ b/docs/reference/migration/migrate_8_0/settings.asciidoc @@ -37,3 +37,10 @@ processors. As this leads to more context switches and more threads but without an increase in the number of physical CPUs on which to schedule these additional threads, the `node.processors` setting is now bounded by the number of available processors. + +[float] +==== Fractional byte size values are no longer supported + +Using fractional byte size values such as `23.5pb` have been deprecated since +Elasticsearch 6.2.0. As of Elasticsearch 8.0.0, fractional byte size values are +now rejected. diff --git a/server/src/main/java/org/elasticsearch/common/unit/ByteSizeValue.java b/server/src/main/java/org/elasticsearch/common/unit/ByteSizeValue.java index 0b32091fb4fa1..b69e2fc828bf1 100644 --- a/server/src/main/java/org/elasticsearch/common/unit/ByteSizeValue.java +++ b/server/src/main/java/org/elasticsearch/common/unit/ByteSizeValue.java @@ -19,13 +19,11 @@ package org.elasticsearch.common.unit; -import org.apache.logging.log4j.LogManager; import org.elasticsearch.ElasticsearchParseException; import org.elasticsearch.common.Strings; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; -import org.elasticsearch.common.logging.DeprecationLogger; import org.elasticsearch.common.xcontent.ToXContentFragment; import org.elasticsearch.common.xcontent.XContentBuilder; @@ -35,8 +33,6 @@ public class ByteSizeValue implements Writeable, Comparable, ToXContentFragment { - private static final DeprecationLogger deprecationLogger = new DeprecationLogger(LogManager.getLogger(ByteSizeValue.class)); - public static final ByteSizeValue ZERO = new ByteSizeValue(0, ByteSizeUnit.BYTES); private final long size; @@ -225,15 +221,7 @@ private static ByteSizeValue parse(final String initialInput, final String norma try { return new ByteSizeValue(Long.parseLong(s), unit); } catch (final NumberFormatException e) { - try { - final double doubleValue = Double.parseDouble(s); - deprecationLogger.deprecated( - "Fractional bytes values are deprecated. Use non-fractional bytes values instead: [{}] found for setting [{}]", - initialInput, settingName); - return new ByteSizeValue((long) (doubleValue * unit.toBytes(1))); - } catch (final NumberFormatException ignored) { - throw new ElasticsearchParseException("failed to parse [{}]", e, initialInput); - } + throw new ElasticsearchParseException("failed to parse [{}]", e, initialInput); } } catch (IllegalArgumentException e) { throw new ElasticsearchParseException("failed to parse setting [{}] with value [{}] as a size in bytes", e, settingName, diff --git a/server/src/test/java/org/elasticsearch/common/unit/ByteSizeValueTests.java b/server/src/test/java/org/elasticsearch/common/unit/ByteSizeValueTests.java index feaa7c4a0ae58..2fe4d76934320 100644 --- a/server/src/test/java/org/elasticsearch/common/unit/ByteSizeValueTests.java +++ b/server/src/test/java/org/elasticsearch/common/unit/ByteSizeValueTests.java @@ -28,6 +28,7 @@ import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; public class ByteSizeValueTests extends AbstractWireSerializingTestCase { @@ -300,10 +301,11 @@ public void testParseInvalidNumber() throws IOException { public void testParseFractionalNumber() throws IOException { ByteSizeUnit unit = randomValueOtherThan(ByteSizeUnit.BYTES, () -> randomFrom(ByteSizeUnit.values())); String fractionalValue = "23.5" + unit.getSuffix(); - ByteSizeValue instance = ByteSizeValue.parseBytesSizeValue(fractionalValue, "test"); - assertEquals(fractionalValue, instance.toString()); - assertWarnings("Fractional bytes values are deprecated. Use non-fractional bytes values instead: [" + fractionalValue - + "] found for setting [test]"); + final ElasticsearchParseException e = + expectThrows(ElasticsearchParseException.class, () -> ByteSizeValue.parseBytesSizeValue(fractionalValue, "test")); + assertThat(e.getMessage(), equalTo("failed to parse [" + fractionalValue + "]")); + assertThat(e.getCause(), instanceOf(NumberFormatException.class)); + assertThat(e.getCause().getMessage(), equalTo("For input string: \"23.5\"")); } public void testGetBytesAsInt() { From 7ca602289f5b475cf2a1f4f4e5333eb9e5733627 Mon Sep 17 00:00:00 2001 From: Jason Tedor Date: Sat, 21 Mar 2020 21:48:14 -0400 Subject: [PATCH 2/3] Fix tests --- .../ingest/common/BytesProcessorTests.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/BytesProcessorTests.java b/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/BytesProcessorTests.java index 2520f3e5ad17f..3294f79c20509 100644 --- a/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/BytesProcessorTests.java +++ b/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/BytesProcessorTests.java @@ -20,6 +20,7 @@ package org.elasticsearch.ingest.common; import org.elasticsearch.ElasticsearchException; +import org.elasticsearch.ElasticsearchParseException; import org.elasticsearch.common.unit.ByteSizeUnit; import org.elasticsearch.common.unit.ByteSizeValue; import org.elasticsearch.ingest.IngestDocument; @@ -28,6 +29,7 @@ import org.hamcrest.CoreMatchers; import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.instanceOf; public class BytesProcessorTests extends AbstractStringProcessorTestCase { @@ -90,9 +92,10 @@ public void testFractional() throws Exception { IngestDocument ingestDocument = RandomDocumentPicks.randomIngestDocument(random()); String fieldName = RandomDocumentPicks.addRandomField(random(), ingestDocument, "1.1kb"); Processor processor = newProcessor(fieldName, randomBoolean(), fieldName); - processor.execute(ingestDocument); - assertThat(ingestDocument.getFieldValue(fieldName, expectedResultType()), equalTo(1126L)); - assertWarnings("Fractional bytes values are deprecated. Use non-fractional bytes values instead: [1.1kb] found for setting " + - "[Ingest Field]"); + final ElasticsearchParseException e = expectThrows(ElasticsearchParseException.class, () -> processor.execute(ingestDocument)); + assertThat(e.getMessage(), equalTo("failed to parse [1.1kb]")); + assertThat(e.getCause(), instanceOf(NumberFormatException.class)); + assertThat(e.getCause().getMessage(), equalTo("For input string: \"1.1\"")); } + } From 579d78bc61ae3d26d93fdb29ca83cfbd8b4584d9 Mon Sep 17 00:00:00 2001 From: Jason Tedor Date: Sun, 22 Mar 2020 08:16:23 -0400 Subject: [PATCH 3/3] Fix tests --- .../main/java/org/elasticsearch/common/settings/Setting.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/org/elasticsearch/common/settings/Setting.java b/server/src/main/java/org/elasticsearch/common/settings/Setting.java index 0680dd7c2ccfd..260aaabdc2804 100644 --- a/server/src/main/java/org/elasticsearch/common/settings/Setting.java +++ b/server/src/main/java/org/elasticsearch/common/settings/Setting.java @@ -1299,7 +1299,7 @@ static boolean parseBoolean(String b, String key, boolean isFiltered) { } public static Setting byteSizeSetting(String key, ByteSizeValue value, Property... properties) { - return byteSizeSetting(key, (s) -> value.toString(), properties); + return byteSizeSetting(key, (s) -> value.getStringRep(), properties); } public static Setting byteSizeSetting(String key, Setting fallbackSetting,