[
https://issues.apache.org/jira/browse/HDDS-16844?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Chu Cheng Li updated HDDS-16844:
--------------------------------
Fix Version/s: 2.3.0
Resolution: Done
Status: Resolved (was: Patch Available)
> Remove duplicate overwrite checks in ChunkUtils
> -----------------------------------------------
>
> Key: HDDS-16844
> URL: https://issues.apache.org/jira/browse/HDDS-16844
> Project: Apache Ozone
> Issue Type: Improvement
> Reporter: Chu Cheng Li
> Assignee: Chu Cheng Li
> Priority: Minor
> Labels: pull-request-available
> Fix For: 2.3.0
>
>
> *Background*
> HDDS-16327 added {{validateChunkForOverwrite(long fileLen, ChunkInfo)}} and
> {{isOverWriteRequested(long fileLen, ChunkInfo)}} to {{{}ChunkUtils{}}}. The
> caller gives the file length, so the method does not read it again.
> *Problem*
> The old {{File}} overloads of these two methods are still in
> {{{}ChunkUtils{}}}. Their bodies are copies of the {{long}} versions. Both
> copies have the same "Duplicate write chunk request" warning and the same
> TODO. Only {{FilePerChunkStrategy}} calls the {{File}} version. No code
> outside {{ChunkUtils}} calls {{{}isOverWriteRequested{}}}.
> *Changes*
> * Keep only {{{}validateChunkForOverwrite(long fileLen, ChunkInfo){}}}. Put
> the check {{info.getOffset() < fileLen}} directly in this method.
> * Remove the two {{isOverWriteRequested}} overloads.
> * {{FilePerChunkStrategy.writeChunk}} calls
> {{{}validateChunkForOverwrite(chunkFile.length(), info){}}}.
> {{File.length()}} returns 0 when the file does not exist. Thus, the
> {{exists()}} check in the old {{File}} version has no effect when the offset
> is 0 or more. {{File.length()}} also returns 0 on an I/O error, and the old
> code had the same behavior. The change removes one file system call for each
> chunk write in the FilePerChunk layout.
> One edge case changes. For a negative offset on a chunk file that does not
> exist, the result is now true. Before, it was false. The offset is a
> {{uint64}} in the protocol, and {{FilePerBlockStrategy}} already gives true
> in this case.
> *Tests*
> {{TestChunkUtils.validateChunkForOverwrite}} tests only the {{long}} version.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]