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

Ewan Higgs commented on HADOOP-15209:
-------------------------------------

{code:java}

+ * We do not rely on parent entries being added immediately before children,
+ * as sorting may place "/dir12" between "/dir1" and its descendants.
+ *{code}
AFAICT, SequenceFile.Sorter will put these in the correct order (for 
alphanumerics... if you have (, ), #, - etc in your filename it probably gets 
wonky). This means you can do the following:
{code:java}
boolean shouldDelete(CopyListingFileStatus status) {
  final Path path = status.getPath();
  Preconditions.checkArgument(!path.isRoot(), "Root Dir");
  final String pathStr = path.toString();
  final String pathAsDir = pathStr + Path.SEPARATOR;

  if (lastDir == null) {
    if (status.isDirectory()) {
      lastDir = pathAsDir;
    }
    return true;
  }

  if (pathStr.startsWith(lastDir)
      || pathAsDir.equals(lastDir)) {
    return false;
  } else {
    if (status.isDirectory()) {
      lastDir = pathAsDir;
    }
    return true;
  }
}{code}
This means you no longer need a cache. If you'd like I can attach a patch with 
the update that passes all the unit tests.

> DistCp to eliminate needless deletion of files under already-deleted 
> directories
> --------------------------------------------------------------------------------
>
>                 Key: HADOOP-15209
>                 URL: https://issues.apache.org/jira/browse/HADOOP-15209
>             Project: Hadoop Common
>          Issue Type: Improvement
>          Components: tools/distcp
>    Affects Versions: 2.9.0
>            Reporter: Steve Loughran
>            Assignee: Steve Loughran
>            Priority: Major
>         Attachments: HADOOP-15209-001.patch, HADOOP-15209-002.patch, 
> HADOOP-15209-003.patch, HADOOP-15209-004.patch, HADOOP-15209-005.patch, 
> HADOOP-15209-006.patch, HADOOP-15209-007.patch
>
>
> DistCP issues a delete(file) request even if is underneath an already deleted 
> directory. This generates needless load on filesystems/object stores, and, if 
> the store throttles delete, can dramatically slow down the delete operation.
> If the distcp delete operation can build a history of deleted directories, 
> then it will know when it does not need to issue those deletes.
> Care is needed here to make sure that whatever structure is created does not 
> overload the heap of the process.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
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