Skip to content

HDDS-16721. StreamBlockInputStream.read() returns a negative value for bytes 0x80 to 0xFF - #11411

Merged
chungen0126 merged 1 commit into
apache:masterfrom
peterxcli:HDDS-16721
Oct 5, 2026
Merged

chungen0126 merged 1 commit into
apache:masterfrom
peterxcli:HDDS-16721

Conversation

@peterxcli

@peterxcli peterxcli commented Oct 5, 2026 •

Copy link
Copy Markdown
Member

What changes were proposed in this pull request?

StreamBlockInputStream.read() returns the byte it reads as sign-extended. A byte of 0x80 or more comes back as a negative number, and the byte 0xFF comes back as -1, which callers take as the end of the stream. InputStream.read() must return 0 to 255, or -1 at the end of the stream.

With this change, read() returns Byte.toUnsignedInt(...) of the byte, as ExtendedInputStream.read() already does.

@Override
public synchronized int read() throws IOException {
byte[] buf = new byte[1];
if (read(buf, 0, 1) == EOF) {
return EOF;
}
return Byte.toUnsignedInt(buf[0]);
}

What is the link to the Apache JIRA

https://issues.apache.org/jira/browse/HDDS-16721

How was this patch tested?

New unit test TestStreamBlockInputStream#testReadReturnsUnsignedByte: it reads a block holding the bytes 0x80 and 0xFF one byte at a time, and checks that it gets 128, then 255, then the end of the stream. Without the fix, it fails with expected: <128> but was: <-128>.

…r bytes 0x80 to 0xFF

StreamBlockInputStream.read() returned the byte it read sign-extended, so a
byte of 0x80 or more came back negative, and 0xFF came back as -1, which
callers take as the end of the stream. It now returns 0 to 255, as
InputStream requires and as ExtendedInputStream.read() already does.
Copilot AI balanced review requested due to automatic review settings October 5, 2026 16:06

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@chungen0126 chungen0126 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1 LGTM

@chungen0126
chungen0126 merged commit 7ed017d into apache:master Oct 5, 2026
60 of 62 checks passed
@chungen0126

Copy link
Copy Markdown
Contributor

Merged. Thanks @peterxcli for working on this.

@peterxcli
peterxcli deleted the HDDS-16721 branch October 5, 2026 23:58
errose28 added a commit that referenced this pull request Oct 6, 2026
* master: (64 commits)
  HDDS-16716. Add description for ozone.scm.ec.pipeline.per.volume.factor (#11415)
  HDDS-16008. PutBlocks from Flushes also go without Raft (#11356)
  HDDS-16666. Flush SCM transaction in memory during apply transaction (#11409)
  HDDS-15749. Run specific JUnit tests if possible (#10671)
  HDDS-16362. GetObjectAttributes ObjectParts should return Part entries for FSO buckets (#11242).
  HDDS-16643. Remove CleanupTableInfo mechanism (#11365)
  HDDS-16721. StreamBlockInputStream.read() returns a negative value for bytes 0x80 to 0xFF (#11411)
  HDDS-16241. gRPC deadline kills long-lived block streams after 30 seconds and the client never recovers (#11080)
  HDDS-15991. Speed up deleted table scans in quota repair (#11386)
  HDDS-16674. Bump awssdk to 2.55.6 (#11407)
  HDDS-16673. Avoid redundant ListBuckets RPCs when S3 bucket listing reaches the end (#11397)
  HDDS-16708. Let dependabot ignore iceberg minor version upgrades (#11398)
  HDDS-16713. Bump develocity-maven-extension to 2.6.0 (#11405)
  HDDS-16300. Allow OM to dynamically reconfigure its SCM node list without a restart (#11218)
  HDDS-15089. Support S3 per request read consistency (#11252)
  HDDS-16704. ReadBlock fails with IllegalStateException when a response is shorter than responseDataSize (#11402)
  HDDS-16631. Fix chooseRandom for rack names with common prefixes (#11401)
  HDDS-16654. Replace usage of deprecated finalize() in OM (#11376)
  HDDS-16658. Reuse source key details when opening input stream in S3 CopyObject (#11396)
  HDDS-16711. Bump moment to 2.31.0 (#11373)
  ...

Conflicts:
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/HealthyReadOnlyNodeHandler.java
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeStateManager.java
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/SCMNodeManager.java
hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestSCMStateMachine.java
hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestDeadNodeHandler.java
hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestNodeStateManager.java
hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/rpc/TestRpcClient.java
hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java
hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/ha/TestHadoopRpcOMFollowerReadFailoverProxyProvider.java
hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneShellHA.java
hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerStateMachine.java
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/upgrade/OMCancelPrepareResponse.java
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/upgrade/OMCompleteFinalizeUpgradeResponse.java
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/upgrade/OMPrepareResponse.java
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerStateMachine.java
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants