[
https://issues.apache.org/jira/browse/HDFS-3876?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13447830#comment-13447830
]
Todd Lipcon commented on HDFS-3876:
-----------------------------------
- When you clobber the trash interval in the configuration, you sohuld do it on
a copy, rather than modifying the config that the user passed in.
{code}
+ // If we can not determine that trash is enabled server side then
+ // bail rather than potentially deleting a file when trash is enabled.
+ System.err.println("Failed to determine server trash configuration: "
+ + e.getMessage());
+ return false;
{code}
This doesn't seem to be what happens. See the TODO in {{Delete.java}}:
{code}
// TODO: if the user wants the trash to be used but there is any
// problem (ie. creating the trash dir, moving the item to be deleted,
// etc), then the path will just be deleted because moveToTrash returns
// false and it falls thru to fs.delete. this doesn't seem right
{code}
if you actually want it to bail, it should probably throw an exception -- or
return false but remove this comment, and separately address the TODO mentioned
above.
----
{code}
+ Configuration clientConf = new Configuration(serverConf);
+ if (clientTrash) {
+ clientConf.setLong(FS_TRASH_INTERVAL_KEY, 200);
+ }
{code}
Since you instantiate the client conf from {{serverConf}}, won't you end up
with client trash enabled even if {{clientTrash}} is false?
> NN should not RPC to self to find trash defaults (causes deadlock)
> ------------------------------------------------------------------
>
> Key: HDFS-3876
> URL: https://issues.apache.org/jira/browse/HDFS-3876
> Project: Hadoop HDFS
> Issue Type: Bug
> Components: name-node
> Affects Versions: 2.2.0-alpha
> Reporter: Todd Lipcon
> Assignee: Eli Collins
> Priority: Blocker
> Attachments: hdfs-3876.txt, hdfs-3876.txt, hdfs-3876.txt
>
>
> When transitioning a SBN to active, I ran into the following situation:
> - the TrashPolicy first gets loaded by an IPC Server Handler thread. The
> {{initialize}} function then tries to make an RPC to the same node to find
> out the defaults.
> - This is happening inside the NN write lock (since it's part of the active
> initialization). Hence, all of the other handler threads are already blocked
> waiting to get the NN lock.
> - Since no handler threads are free, the RPC blocks forever and the NN never
> enters active state.
> We need to have a general policy that the NN should never make RPCs to itself
> for any reason, due to potential for deadlocks like this.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira