Chung-En Lee created HDDS-17206:
-----------------------------------
Summary: Refactor GetBlock handling shared by BlockInputStream and
StreamBlockInputStream
Key: HDDS-17206
URL: https://issues.apache.org/jira/browse/HDDS-17206
Project: Apache Ozone
Issue Type: Sub-task
Reporter: Chung-En Lee
Follow-up of HDDS-15886, from the review comments on
https://github.com/apache/ozone/pull/11551.
HDDS-15886 added StreamBlockInputStream#updateBlockLength, which sends GetBlock
to get the length of an under-construction block from the datanode.
BlockInputStream already has similar GetBlock code, and the change left some
leftovers. This JIRA cleans them up:
1. Reuse the GetBlock code from BlockInputStream.
Move BlockInputStream#getBlockData and #getBlockDataUsingGRPCClient into
BlockExtendedInputStream, and use them in
StreamBlockInputStream#updateBlockLength instead of calling
ContainerProtocolCalls.getBlock directly.
-
https://github.com/apache/ozone/blob/df42f7f60a2db3c06ed85e781ffdf89e02e0ccf0/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/storage/BlockInputStream.java#L228-L235
-
https://github.com/apache/ozone/blob/df42f7f60a2db3c06ed85e781ffdf89e02e0ccf0/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/storage/BlockInputStream.java#L302-L313
The two classes use different clients (BlockInputStream: XceiverClientSpi
with short-circuit read; StreamBlockInputStream: XceiverClientGrpc) and
different retry handling (BlockInputStream#initialize: refreshBlockInfo +
shouldRetryRead; StreamBlockInputStream: handleExceptions with datanode
exclusion), so the client and retry handling need to be unified as part of this.
2. Remove the StreamBlockInputStream(BlockID, long, ...) constructor.
After HDDS-15886, BlockInputStreamFactoryImpl uses the
StreamBlockInputStream(BlockLocationInfo, ...) constructor; the old one is only
used by TestStreamBlockInputStream.
3. Remove the redundant null check in BlockInputStream#initialize.
`blockInfo != null && blockInfo.isUnderConstruction()` — blockInfo cannot be
null, since the constructor already calls blockInfo.getBlockID().
-
https://github.com/apache/ozone/blob/df42f7f60a2db3c06ed85e781ffdf89e02e0ccf0/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/storage/BlockInputStream.java#L165
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]