[
https://issues.apache.org/jira/browse/HDDS-16326?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ASF GitHub Bot updated HDDS-16326:
----------------------------------
Labels: pull-request-available (was: )
> Cache the container chunks directory instead of stat-ing it on every chunk
> operation
> ------------------------------------------------------------------------------------
>
> Key: HDDS-16326
> URL: https://issues.apache.org/jira/browse/HDDS-16326
> Project: Apache Ozone
> Issue Type: Improvement
> Reporter: Huang Kuan Hao
> Assignee: Huang Kuan Hao
> Priority: Major
> Labels: pull-request-available
>
> ContainerUtils.getChunkDir builds a new File and calls exists() on the
> container's chunks directory on every call:
> File chunksDir = new File(chunksPath);
> if (!chunksDir.exists()) {
> throw new StorageContainerException(..., UNABLE_TO_FIND_DATA_DIR);
> }
> It is reached through ContainerLayoutVersion.getChunkFile (line 115), which
> FilePerBlockStrategy calls on every WriteChunk (line 153) and every ReadChunk
> (line 240), plus the stream/finish/delete paths. So every chunk operation
> resolves and stat()s a directory that is fixed for the container's lifetime.
> On the read path the stat is pure added work: the read otherwise goes straight
> to open().
> Fix: resolve and validate the chunks directory once (e.g. cache the File on
> KeyValueContainerData when the container is opened/loaded) and reuse it on the
> data plane, instead of new File + exists() per operation.
> Note on behavior: the per-op exists() currently front-runs a missing or
> unmounted chunks dir with UNABLE_TO_FIND_DATA_DIR. After caching, a chunks dir
> that disappears mid-life is still caught by the subsequent open()/writeData,
> which triggers volume-failure handling (onFailure) - only the error code
> differs in that rare case. The container scanner (KeyValueContainerCheck) is
> unaffected: it stats getChunksPath() directly and reports MISSING_CHUNKS_DIR
> on
> its own, without going through getChunkDir.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]