This is an automated email from the ASF dual-hosted git repository.
gaoyunhaii pushed a commit to branch release-1.17
in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/release-1.17 by this push:
new 729043df687 [FLINK-31708][API/Type Serialization System] Make
DataInputView#read(byte[], int, int) return 0 if len is 0.
729043df687 is described below
commit 729043df687a96711d3591fcdf5e8e712cd21b87
Author: 沈嘉琦 <[email protected]>
AuthorDate: Mon Apr 3 19:43:14 2023 +0800
[FLINK-31708][API/Type Serialization System] Make
DataInputView#read(byte[], int, int) return 0 if len is 0.
This closes #22335.
---
.../org/apache/flink/core/memory/DataInputDeserializer.java | 2 +-
.../main/java/org/apache/flink/core/memory/DataInputView.java | 7 ++++++-
flink-core/src/main/java/org/apache/flink/types/Record.java | 2 +-
.../apache/flink/core/memory/DataInputDeserializerTest.java | 10 ++++++++++
4 files changed, 18 insertions(+), 3 deletions(-)
diff --git
a/flink-core/src/main/java/org/apache/flink/core/memory/DataInputDeserializer.java
b/flink-core/src/main/java/org/apache/flink/core/memory/DataInputDeserializer.java
index 9ece9f00135..051bad2650e 100644
---
a/flink-core/src/main/java/org/apache/flink/core/memory/DataInputDeserializer.java
+++
b/flink-core/src/main/java/org/apache/flink/core/memory/DataInputDeserializer.java
@@ -378,7 +378,7 @@ public class DataInputDeserializer implements
DataInputView, java.io.Serializabl
}
if (this.position >= this.end) {
- return -1;
+ return len == 0 ? 0 : -1;
} else {
int toRead = Math.min(this.end - this.position, len);
System.arraycopy(this.buffer, this.position, b, off, toRead);
diff --git
a/flink-core/src/main/java/org/apache/flink/core/memory/DataInputView.java
b/flink-core/src/main/java/org/apache/flink/core/memory/DataInputView.java
index 43f34f5383f..58d5c634aed 100644
--- a/flink-core/src/main/java/org/apache/flink/core/memory/DataInputView.java
+++ b/flink-core/src/main/java/org/apache/flink/core/memory/DataInputView.java
@@ -44,7 +44,12 @@ public interface DataInputView extends DataInput {
/**
* Reads up to {@code len} bytes of memory and stores it into {@code b}
starting at offset
- * {@code off}. It returns the number of read bytes or -1 if there is no
more data left.
+ * {@code off}.
+ *
+ * <p>If <code>len</code> is zero, then no bytes are read and
<code>0</code> is returned;
+ * otherwise, there is an attempt to read at least one byte. If there is
no more data left, the
+ * value <code>-1</code> is returned; otherwise, at least one byte is read
and stored into
+ * <code>b</code>.
*
* @param b byte array to store the data to
* @param off offset into byte array
diff --git a/flink-core/src/main/java/org/apache/flink/types/Record.java
b/flink-core/src/main/java/org/apache/flink/types/Record.java
index 59e1568fc8f..a7b6f989b7d 100644
--- a/flink-core/src/main/java/org/apache/flink/types/Record.java
+++ b/flink-core/src/main/java/org/apache/flink/types/Record.java
@@ -1584,7 +1584,7 @@ public final class Record implements Value,
CopyableValue<Record> {
}
if (this.position >= this.end) {
- return -1;
+ return len == 0 ? 0 : -1;
} else {
int toRead = Math.min(this.end - this.position, len);
System.arraycopy(this.memory, this.position, b, off, toRead);
diff --git
a/flink-core/src/test/java/org/apache/flink/core/memory/DataInputDeserializerTest.java
b/flink-core/src/test/java/org/apache/flink/core/memory/DataInputDeserializerTest.java
index d8ebd5968cb..e8707f1eb70 100644
---
a/flink-core/src/test/java/org/apache/flink/core/memory/DataInputDeserializerTest.java
+++
b/flink-core/src/test/java/org/apache/flink/core/memory/DataInputDeserializerTest.java
@@ -54,4 +54,14 @@ public class DataInputDeserializerTest {
}
Assert.assertEquals(0, dis.available());
}
+
+ @Test
+ public void testReadWithLenZero() throws IOException {
+ byte[] bytes = new byte[0];
+ DataInputDeserializer dis = new DataInputDeserializer(bytes, 0,
bytes.length);
+ Assert.assertEquals(0, dis.available());
+
+ byte[] bytesForRead = new byte[0];
+ Assert.assertEquals(0, dis.read(bytesForRead, 0, 0)); // do not throw
when read with len 0
+ }
}