[ 
https://issues.apache.org/jira/browse/HADOOP-18636?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17690545#comment-17690545
 ] 

ASF GitHub Bot commented on HADOOP-18636:
-----------------------------------------

steveloughran opened a new pull request, #5412:
URL: https://github.com/apache/hadoop/pull/5412

   
   
   Even though DiskChecker.mkdirsWithExistsCheck() will create the directory 
tree, it is only called *after* the enumeration of directories with available 
space has completed.
   Directories which don't exist are reported as having 0 space, therefore the 
mkdirs code is never reached.
   Adding a simple mkdirs() -without bothering to check the outcome- ensures 
that if a dir has been deleted then it will be reconstructed if possible. If it 
can't it will still have 0 bytes of space reported and so be excluded from the 
allocation.
   
   No need to call exists() first as that is what mkdirs() does first anyway.
   
   
   ### How was this patch tested?
   
   new tests, doing the s3a and abfs runs as diligence
   
   ### For code changes:
   
   - [X] Does the title or this PR starts with the corresponding JIRA issue id 
(e.g. 'HADOOP-17799. Your PR title ...')?
   - [ ] Object storage: have the integration tests been executed and the 
endpoint declared according to the connector-specific documentation?
   - [ ] If adding new dependencies to the code, are these dependencies 
licensed in a way that is compatible for inclusion under [ASF 
2.0](http://www.apache.org/legal/resolved.html#category-a)?
   - [ ] If applicable, have you updated the `LICENSE`, `LICENSE-binary`, 
`NOTICE-binary` files?
   
   




> LocalDirAllocator cannot recover from directory tree deletion during the life 
> of a filesystem client
> ----------------------------------------------------------------------------------------------------
>
>                 Key: HADOOP-18636
>                 URL: https://issues.apache.org/jira/browse/HADOOP-18636
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: fs, fs/azure, fs/s3
>    Affects Versions: 3.3.4
>            Reporter: Steve Loughran
>            Assignee: Steve Loughran
>            Priority: Minor
>
> The  s3a and abfs clients use LocalDirAllocator for allocating files in local 
> (temporary) storage for buffering blocks to write, and, for the s3a staging 
> committer, files being staged. 
> When initialized (or when the configuration key value is updated) 
> LocalDirAllocator enumerates all directories in the list and calls 
> {{mkdirs()}} to create them.
> when you ask actually for a file, it will look for the parent dir, but it 
> calls {{mkdir()}}, rather than {{mkdirs()}}
> This means it will recreate a missing parent file but cannot recover from a 
> missing grandparent. If during the life of an application the temp directory 
> is cleaned up, it can result in the failure of the application.
> Fix add an "s" to the right place in the production code, plus a new test.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-issues-h...@hadoop.apache.org

Reply via email to