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

Lisheng Sun commented on HADOOP-16112:
--------------------------------------

[~jzhuge] [~hexiaoqiao] , Thanks for your comments.

My users hit this issue more once.If  the unexpected trash location generated, 
lead to exist directory is deleted. In fact, this situation don't add timestamp 
to mkdir. This result should be not expected.

If there is a issue, I will fix unit test in which race condition reproduce and 
add a patch.  Please correct me if I am wrong.Thanks.

 

 

> Delete the baseTrashPath's subDir leads to don't modify baseTrashPath
> ---------------------------------------------------------------------
>
>                 Key: HADOOP-16112
>                 URL: https://issues.apache.org/jira/browse/HADOOP-16112
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: common
>    Affects Versions: 3.2.0
>            Reporter: Lisheng Sun
>            Priority: Major
>         Attachments: HADOOP-16112.001.patch, HADOOP-16112.002.patch
>
>
> There is race condition in TrashPolicyDefault#moveToTrash
> try {
>  if (!fs.mkdirs(baseTrashPath, PERMISSION))
> { // create current LOG.warn("Can't create(mkdir) trash directory: " + 
> baseTrashPath); return false; }
> } catch (FileAlreadyExistsException e) {
>  // find the path which is not a directory, and modify baseTrashPath
>  // & trashPath, then mkdirs
>  Path existsFilePath = baseTrashPath;
>  while (!fs.exists(existsFilePath))
> { existsFilePath = existsFilePath.getParent(); }
> {color:#ff0000}// case{color}
> {color:#ff0000}  other thread deletes existsFilePath here ,the results 
> doesn't  meet expectation{color}
> {color:#ff0000} for example{color}
> {color:#ff0000}   there is 
> /user/u_sunlisheng/.Trash/Current/user/u_sunlisheng/b{color}
> {color:#ff0000}   when delete /user/u_sunlisheng/b/a. if existsFilePath is 
> deleted, the result is 
> /user/u_sunlisheng/.Trash/Current/user/u_sunlisheng+timstamp/b/a{color}
> {color:#ff0000}  so  when existsFilePath is deleted, don't modify 
> baseTrashPath.    {color}
> baseTrashPath = new Path(baseTrashPath.toString().replace(
>  existsFilePath.toString(), existsFilePath.toString() + Time.now())
>  );
> trashPath = new Path(baseTrashPath, trashPath.getName());
>  // retry, ignore current failure
>  --i;
>  continue;
>  } catch (IOException e)
> { LOG.warn("Can't create trash directory: " + baseTrashPath, e); cause = e; 
> break; }



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