You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-issues@hadoop.apache.org by "Suresh Srinivas (JIRA)" <ji...@apache.org> on 2014/04/10 01:04:18 UTC
[jira] [Commented] (HDFS-6223) Using the command setrep to set the
replication factor more than the number of datanodes with the -w parameter,
the command gets in a infinite loop.
[ https://issues.apache.org/jira/browse/HDFS-6223?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13964779#comment-13964779 ]
Suresh Srinivas commented on HDFS-6223:
---------------------------------------
[~jwang302], it is not infinite loop as much as setrep command never completes. This is the expected behavior with -w. I do not see any issue here. What is the point in adding timeout, instead one need not pass -w, right?
> Using the command setrep to set the replication factor more than the number of datanodes with the -w parameter, the command gets in a infinite loop.
> ----------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: HDFS-6223
> URL: https://issues.apache.org/jira/browse/HDFS-6223
> Project: Hadoop HDFS
> Issue Type: Improvement
> Components: hdfs-client
> Affects Versions: 2.1.1-beta, 2.2.0, 2.3.0
> Reporter: Jinghui Wang
> Assignee: Jinghui Wang
>
> Using the command setrep to set the replication factor more than the number of datanodes with the -w parameter gets in a infinite loop. When the -w parameter is there, the command gets in the following code to wait for the replication factor to be met before exiting. But if the number of datanodes is less than the desired replication factor, the exiting condition is never met.
> A proposed fix is to add a timeout parameter, so the command will wait for a certain amount of time or number of tries before exiting.
> for(boolean done = false; !done; ) {
> BlockLocation[] locations = fs.getFileBlockLocations(status, 0, len);
> int i = 0;
> for(; i < locations.length &&
> locations[i].getHosts().length == rep; i++)
> if (!printWarning && locations[i].getHosts().length > rep) {
> System.out.println("\nWARNING: the waiting time may be long for "
> + "DECREASING the number of replication.");
> printWarning = true;
> }
> done = i == locations.length;
> if (!done) {
> System.out.print(".");
> System.out.flush();
> try {Thread.sleep(10000);} catch (InterruptedException e) {}
> }
> }
--
This message was sent by Atlassian JIRA
(v6.2#6252)