Skip to content

Commit 061c0ca

Browse files
authored
Reinstate BYTE_SIZE_VALUE_ALWAYS_USES_BYTES (#122964)
1 parent 4e15a4d commit 061c0ca

File tree

3 files changed

+44
-33
lines changed

3 files changed

+44
-33
lines changed

server/src/main/java/org/elasticsearch/TransportVersions.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ static TransportVersion def(int id) {
187187
public static final TransportVersion REMOVE_DESIRED_NODE_VERSION_90 = def(9_000_0_03);
188188
public static final TransportVersion ESQL_DRIVER_TASK_DESCRIPTION_90 = def(9_000_0_04);
189189
public static final TransportVersion REMOVE_ALL_APPLICABLE_SELECTOR_9_0 = def(9_000_0_05);
190+
public static final TransportVersion BYTE_SIZE_VALUE_ALWAYS_USES_BYTES_90 = def(9_000_0_06);
190191
public static final TransportVersion COHERE_BIT_EMBEDDING_TYPE_SUPPORT_ADDED = def(9_001_0_00);
191192
public static final TransportVersion REMOVE_SNAPSHOT_FAILURES = def(9_002_0_00);
192193
public static final TransportVersion TRANSPORT_STATS_HANDLING_TIME_REQUIRED = def(9_003_0_00);
@@ -201,6 +202,8 @@ static TransportVersion def(int id) {
201202
public static final TransportVersion REMOVE_REPOSITORY_CONFLICT_MESSAGE = def(9_012_0_00);
202203
public static final TransportVersion RERANKER_FAILURES_ALLOWED = def(9_013_0_00);
203204
public static final TransportVersion VOYAGE_AI_INTEGRATION_ADDED = def(9_014_0_00);
205+
public static final TransportVersion BYTE_SIZE_VALUE_ALWAYS_USES_BYTES = def(9_015_0_00);
206+
204207
/*
205208
* STOP! READ THIS FIRST! No, really,
206209
* ____ _____ ___ ____ _ ____ _____ _ ____ _____ _ _ ___ ____ _____ ___ ____ ____ _____ _

server/src/main/java/org/elasticsearch/common/unit/ByteSizeValue.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
import java.util.Locale;
2626
import java.util.Objects;
2727

28+
import static org.elasticsearch.TransportVersions.BYTE_SIZE_VALUE_ALWAYS_USES_BYTES;
2829
import static org.elasticsearch.TransportVersions.BYTE_SIZE_VALUE_ALWAYS_USES_BYTES_1;
30+
import static org.elasticsearch.TransportVersions.BYTE_SIZE_VALUE_ALWAYS_USES_BYTES_90;
2931
import static org.elasticsearch.TransportVersions.REVERT_BYTE_SIZE_VALUE_ALWAYS_USES_BYTES_1;
3032
import static org.elasticsearch.common.unit.ByteSizeUnit.BYTES;
3133
import static org.elasticsearch.common.unit.ByteSizeUnit.GB;
@@ -113,8 +115,7 @@ static ByteSizeValue newByteSizeValue(long sizeInBytes, ByteSizeUnit desiredUnit
113115
public static ByteSizeValue readFrom(StreamInput in) throws IOException {
114116
long size = in.readZLong();
115117
ByteSizeUnit unit = ByteSizeUnit.readFrom(in);
116-
TransportVersion tv = in.getTransportVersion();
117-
if (tv.onOrAfter(BYTE_SIZE_VALUE_ALWAYS_USES_BYTES_1) && tv.before(REVERT_BYTE_SIZE_VALUE_ALWAYS_USES_BYTES_1)) {
118+
if (alwaysUseBytes(in.getTransportVersion())) {
118119
return newByteSizeValue(size, unit);
119120
} else {
120121
return of(size, unit);
@@ -123,15 +124,20 @@ public static ByteSizeValue readFrom(StreamInput in) throws IOException {
123124

124125
@Override
125126
public void writeTo(StreamOutput out) throws IOException {
126-
TransportVersion tv = out.getTransportVersion();
127-
if (tv.onOrAfter(BYTE_SIZE_VALUE_ALWAYS_USES_BYTES_1) && tv.before(REVERT_BYTE_SIZE_VALUE_ALWAYS_USES_BYTES_1)) {
127+
if (alwaysUseBytes(out.getTransportVersion())) {
128128
out.writeZLong(sizeInBytes);
129129
} else {
130130
out.writeZLong(Math.divideExact(sizeInBytes, desiredUnit.toBytes(1)));
131131
}
132132
desiredUnit.writeTo(out);
133133
}
134134

135+
private static boolean alwaysUseBytes(TransportVersion tv) {
136+
return tv.onOrAfter(BYTE_SIZE_VALUE_ALWAYS_USES_BYTES)
137+
|| tv.isPatchFrom(BYTE_SIZE_VALUE_ALWAYS_USES_BYTES_90)
138+
|| tv.between(BYTE_SIZE_VALUE_ALWAYS_USES_BYTES_1, REVERT_BYTE_SIZE_VALUE_ALWAYS_USES_BYTES_1);
139+
}
140+
135141
ByteSizeValue(long sizeInBytes, ByteSizeUnit desiredUnit) {
136142
this.sizeInBytes = sizeInBytes;
137143
this.desiredUnit = desiredUnit;

server/src/test/java/org/elasticsearch/common/unit/ByteSizeValueTests.java

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
import org.elasticsearch.ElasticsearchParseException;
1313
import org.elasticsearch.TransportVersion;
14-
import org.elasticsearch.TransportVersions;
1514
import org.elasticsearch.common.io.stream.BytesStreamOutput;
1615
import org.elasticsearch.common.io.stream.Writeable.Reader;
1716
import org.elasticsearch.test.AbstractWireSerializingTestCase;
@@ -22,6 +21,10 @@
2221
import java.util.List;
2322
import java.util.function.Function;
2423

24+
import static org.elasticsearch.TransportVersions.BYTE_SIZE_VALUE_ALWAYS_USES_BYTES;
25+
import static org.elasticsearch.TransportVersions.BYTE_SIZE_VALUE_ALWAYS_USES_BYTES_90;
26+
import static org.elasticsearch.TransportVersions.INITIAL_ELASTICSEARCH_9_0;
27+
import static org.elasticsearch.TransportVersions.V_8_16_0;
2528
import static org.hamcrest.Matchers.containsString;
2629
import static org.hamcrest.Matchers.equalTo;
2730
import static org.hamcrest.Matchers.is;
@@ -520,44 +523,43 @@ protected void assertEqualInstances(ByteSizeValue expectedInstance, ByteSizeValu
520523

521524
public void testBWCTransportFormat() throws IOException {
522525
var tenMegs = ByteSizeValue.ofMb(10);
523-
try (BytesStreamOutput expected = new BytesStreamOutput(); BytesStreamOutput actual = new BytesStreamOutput()) {
524-
expected.writeZLong(10);
525-
ByteSizeUnit.MB.writeTo(expected);
526-
actual.setTransportVersion(TransportVersions.V_8_16_0);
527-
tenMegs.writeTo(actual);
528-
assertArrayEquals(
529-
"Size denominated in the desired unit for backward compatibility",
530-
expected.bytes().array(),
531-
actual.bytes().array()
532-
);
526+
for (var tv : List.of(V_8_16_0, INITIAL_ELASTICSEARCH_9_0)) {
527+
try (BytesStreamOutput expected = new BytesStreamOutput(); BytesStreamOutput actual = new BytesStreamOutput()) {
528+
expected.writeZLong(10);
529+
ByteSizeUnit.MB.writeTo(expected);
530+
actual.setTransportVersion(tv);
531+
tenMegs.writeTo(actual);
532+
assertArrayEquals(
533+
"Size denominated in the desired unit for backward compatibility",
534+
expected.bytes().array(),
535+
actual.bytes().array()
536+
);
537+
}
533538
}
534539
}
535540

536-
/**
537-
* @see TransportVersions#REVERT_BYTE_SIZE_VALUE_ALWAYS_USES_BYTES_1
538-
*/
539-
@AwaitsFix(bugUrl = "https://elasticco.atlassian.net/browse/ES-10585")
540541
public void testTwoDigitTransportRoundTrips() throws IOException {
541-
TransportVersion tv = TransportVersion.current();
542-
for (var desiredUnit : ByteSizeUnit.values()) {
543-
if (desiredUnit == ByteSizeUnit.BYTES) {
544-
continue;
545-
}
546-
checkTransportRoundTrip(ByteSizeValue.parseBytesSizeValue("23" + desiredUnit.getSuffix(), "test"), tv);
547-
for (int tenths = 1; tenths <= 9; tenths++) {
548-
checkTransportRoundTrip(ByteSizeValue.parseBytesSizeValue("23." + tenths + desiredUnit.getSuffix(), "test"), tv);
549-
for (int hundredths = 1; hundredths <= 9; hundredths++) {
550-
checkTransportRoundTrip(
551-
ByteSizeValue.parseBytesSizeValue("23." + tenths + hundredths + desiredUnit.getSuffix(), "test"),
552-
tv
553-
);
542+
for (var tv : List.of(TransportVersion.current(), BYTE_SIZE_VALUE_ALWAYS_USES_BYTES, BYTE_SIZE_VALUE_ALWAYS_USES_BYTES_90)) {
543+
for (var desiredUnit : ByteSizeUnit.values()) {
544+
if (desiredUnit == ByteSizeUnit.BYTES) {
545+
continue;
546+
}
547+
checkTransportRoundTrip(ByteSizeValue.parseBytesSizeValue("23" + desiredUnit.getSuffix(), "test"), tv);
548+
for (int tenths = 1; tenths <= 9; tenths++) {
549+
checkTransportRoundTrip(ByteSizeValue.parseBytesSizeValue("23." + tenths + desiredUnit.getSuffix(), "test"), tv);
550+
for (int hundredths = 1; hundredths <= 9; hundredths++) {
551+
checkTransportRoundTrip(
552+
ByteSizeValue.parseBytesSizeValue("23." + tenths + hundredths + desiredUnit.getSuffix(), "test"),
553+
tv
554+
);
555+
}
554556
}
555557
}
556558
}
557559
}
558560

559561
public void testIntegerTransportRoundTrips() throws IOException {
560-
for (var tv : List.of(TransportVersion.current(), TransportVersions.V_8_16_0)) {
562+
for (var tv : List.of(TransportVersion.current(), V_8_16_0)) {
561563
checkTransportRoundTrip(ByteSizeValue.ONE, tv);
562564
checkTransportRoundTrip(ByteSizeValue.ZERO, tv);
563565
checkTransportRoundTrip(ByteSizeValue.MINUS_ONE, tv);

0 commit comments

Comments
 (0)