[ 
https://issues.apache.org/jira/browse/GOBBLIN-2082?focusedWorklogId=922670&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-922670
 ]

ASF GitHub Bot logged work on GOBBLIN-2082:
-------------------------------------------

                Author: ASF GitHub Bot
            Created on: 07/Jun/24 21:28
            Start Date: 07/Jun/24 21:28
    Worklog Time Spent: 10m 
      Work Description: Will-Lo opened a new pull request, #3966:
URL: https://github.com/apache/gobblin/pull/3966

   Dear Gobblin maintainers,
   
   Please accept this PR. I understand that it will not be reviewed until I 
have checked off all the steps below!
   
   
   ### JIRA
   - [ ] My PR addresses the following [Gobblin 
JIRA](https://issues.apache.org/jira/browse/GOBBLIN/) issues and references 
them in the PR title. For example, "[GOBBLIN-XXX] My Gobblin PR"
       - https://issues.apache.org/jira/browse/GOBBLIN-2071
   
   
   ### Description
   - [ ] Here are some details about my PR, including screenshots (if 
applicable):
   Manifest distcp often creates large file directory structures when copying 
files from one location to another. There is a risk when concurrently 
publishing files from a directory structure where the folders may not exist 
before renaming files, described by the javadoc:
   ```
   * Renames a src {@link Path} on fs {@link FileSystem} to a dst {@link Path}. 
If fs is a {@link LocalFileSystem} and
   * src is a directory then {@link File#renameTo} is called directly to avoid 
a directory rename race condition where
   * {@link org.apache.hadoop.fs.RawLocalFileSystem#rename} copies the 
conflicting src directory into dst resulting in
   * an extra nested level, such as /root/a/b/c/e/e where e is repeated. 
   ```
   Given that on HDFS it does not use a RawLocalFileSystem in many 
implementations, we want to pre-create the folders copied sequentially to 
safely create the folders before publishing the files.
   
   This PR changes `SetPermissionCommitStep` to 
`CreateAndSetDirectoryPermissionCommitStep` which also creates folders BEFORE 
the commit is completed, instead of after.
   
   ### Tests
   - [x] My PR adds the following unit tests __OR__ does not need testing for 
this extremely good reason:
   unit tests
   
   ### Commits
   - [ ] My commits all reference JIRA issues in their subject lines, and I 
have squashed multiple commits if they address the same issue. In addition, my 
commits follow the guidelines from "[How to write a good git commit 
message](http://chris.beams.io/posts/git-commit/)":
       1. Subject is separated from body by a blank line
       2. Subject is limited to 50 characters
       3. Subject does not end with a period
       4. Subject uses the imperative mood ("add", not "adding")
       5. Body wraps at 72 characters
       6. Body explains "what" and "why", not "how"
   
   




Issue Time Tracking
-------------------

            Worklog Id:     (was: 922670)
    Remaining Estimate: 0h
            Time Spent: 10m

> Manifest distcp creates extra folders when publishing files
> -----------------------------------------------------------
>
>                 Key: GOBBLIN-2082
>                 URL: https://issues.apache.org/jira/browse/GOBBLIN-2082
>             Project: Apache Gobblin
>          Issue Type: Bug
>          Components: gobblin-core
>            Reporter: William Lo
>            Assignee: Abhishek Tiwari
>            Priority: Major
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> Manifest distcp often creates large file directory structures when copying 
> files from one location to another. There is a risk when concurrently 
> publishing files from a directory structure where the folders may not exist 
> before renaming files, described by the javadoc:
> {code:java}
> * Renames a src {@link Path} on fs {@link FileSystem} to a dst {@link Path}. 
> If fs is a {@link LocalFileSystem} and
> * src is a directory then {@link File#renameTo} is called directly to avoid a 
> directory rename race condition where
> * {@link org.apache.hadoop.fs.RawLocalFileSystem#rename} copies the 
> conflicting src directory into dst resulting in
> * an extra nested level, such as /root/a/b/c/e/e where e is repeated. {code}
> Given that on HDFS it does not use a RawLocalFileSystem in many 
> implementations, we want to pre-create the folders copied sequentially to 
> safely create the folders before publishing the files.



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

Reply via email to