HDFS-8716. Introduce a new config specifically for safe mode block count. Contributed by Chang Li.
(cherry picked from commit 4d13335fc9
)
This commit is contained in:
parent
eb9e06f8e3
commit
d003797098
|
@ -557,6 +557,9 @@ Release 2.8.0 - UNRELEASED
|
|||
|
||||
HDFS-8860. Remove unused Replica copyOnWrite code (Lei (Eddy) Xu via Colin P. McCabe)
|
||||
|
||||
HDFS-8716. Introduce a new config specifically for safe mode block count
|
||||
(Chang Li via kihwal)
|
||||
|
||||
OPTIMIZATIONS
|
||||
|
||||
HDFS-8026. Trace FSOutputSummer#writeChecksumChunks rather than
|
||||
|
|
|
@ -166,6 +166,8 @@ public class DFSConfigKeys extends CommonConfigurationKeys {
|
|||
public static final int DFS_NAMENODE_REPLICATION_INTERVAL_DEFAULT = 3;
|
||||
public static final String DFS_NAMENODE_REPLICATION_MIN_KEY = "dfs.namenode.replication.min";
|
||||
public static final int DFS_NAMENODE_REPLICATION_MIN_DEFAULT = 1;
|
||||
public static final String DFS_NAMENODE_SAFEMODE_REPLICATION_MIN_KEY =
|
||||
"dfs.namenode.safemode.replication.min";
|
||||
public static final String DFS_NAMENODE_REPLICATION_PENDING_TIMEOUT_SEC_KEY = "dfs.namenode.replication.pending.timeout-sec";
|
||||
public static final int DFS_NAMENODE_REPLICATION_PENDING_TIMEOUT_SEC_DEFAULT = -1;
|
||||
public static final String DFS_NAMENODE_REPLICATION_MAX_STREAMS_KEY = "dfs.namenode.replication.max-streams";
|
||||
|
|
|
@ -64,8 +64,6 @@ import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_INODE_ATTRIBUTES
|
|||
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_MAX_OBJECTS_DEFAULT;
|
||||
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_MAX_OBJECTS_KEY;
|
||||
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_NAME_DIR_KEY;
|
||||
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_REPLICATION_MIN_DEFAULT;
|
||||
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_REPLICATION_MIN_KEY;
|
||||
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_REPL_QUEUE_THRESHOLD_PCT_KEY;
|
||||
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_RESOURCE_CHECK_INTERVAL_DEFAULT;
|
||||
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_RESOURCE_CHECK_INTERVAL_KEY;
|
||||
|
@ -4146,9 +4144,17 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
|
|||
DFS_NAMENODE_SAFEMODE_MIN_DATANODES_KEY,
|
||||
DFS_NAMENODE_SAFEMODE_MIN_DATANODES_DEFAULT);
|
||||
this.extension = conf.getInt(DFS_NAMENODE_SAFEMODE_EXTENSION_KEY, 0);
|
||||
this.safeReplication = conf.getInt(DFS_NAMENODE_REPLICATION_MIN_KEY,
|
||||
DFS_NAMENODE_REPLICATION_MIN_DEFAULT);
|
||||
|
||||
int minReplication =
|
||||
conf.getInt(DFSConfigKeys.DFS_NAMENODE_REPLICATION_MIN_KEY,
|
||||
DFSConfigKeys.DFS_NAMENODE_REPLICATION_MIN_DEFAULT);
|
||||
// DFS_NAMENODE_SAFEMODE_REPLICATION_MIN_KEY is an expert level setting,
|
||||
// setting this lower than the min replication is not recommended
|
||||
// and/or dangerous for production setups.
|
||||
// When it's unset, safeReplication will use dfs.namenode.replication.min
|
||||
this.safeReplication =
|
||||
conf.getInt(DFSConfigKeys.DFS_NAMENODE_SAFEMODE_REPLICATION_MIN_KEY,
|
||||
minReplication);
|
||||
|
||||
LOG.info(DFS_NAMENODE_SAFEMODE_THRESHOLD_PCT_KEY + " = " + threshold);
|
||||
LOG.info(DFS_NAMENODE_SAFEMODE_MIN_DATANODES_KEY + " = " + datanodeThreshold);
|
||||
LOG.info(DFS_NAMENODE_SAFEMODE_EXTENSION_KEY + " = " + extension);
|
||||
|
|
|
@ -469,6 +469,18 @@
|
|||
</description>
|
||||
</property>
|
||||
|
||||
<property>
|
||||
<name>dfs.namenode.safemode.replication.min</name>
|
||||
<value></value>
|
||||
<description>
|
||||
a separate minimum replication factor for calculating safe block count.
|
||||
This is an expert level setting.
|
||||
Setting this lower than the dfs.namenode.replication.min
|
||||
is not recommend and/or dangerous for production setups.
|
||||
When it's not set it takes value from dfs.namenode.replication.min
|
||||
</description>
|
||||
</property>
|
||||
|
||||
<property>
|
||||
<name>dfs.blocksize</name>
|
||||
<value>134217728</value>
|
||||
|
|
|
@ -29,11 +29,13 @@ import java.util.Collection;
|
|||
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.fs.FileUtil;
|
||||
import org.apache.hadoop.hdfs.DFSConfigKeys;
|
||||
import org.apache.hadoop.hdfs.DFSTestUtil;
|
||||
import org.apache.hadoop.hdfs.HdfsConfiguration;
|
||||
import org.apache.hadoop.hdfs.MiniDFSCluster;
|
||||
import org.apache.hadoop.hdfs.server.blockmanagement.BlockManager;
|
||||
import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.NamenodeRole;
|
||||
import org.apache.hadoop.hdfs.server.namenode.FSNamesystem.SafeModeInfo;
|
||||
import org.apache.hadoop.hdfs.server.namenode.ha.HAContext;
|
||||
import org.apache.hadoop.hdfs.server.namenode.ha.HAState;
|
||||
import org.apache.hadoop.hdfs.server.namenode.snapshot.Snapshot;
|
||||
|
@ -264,4 +266,16 @@ public class TestFSNamesystem {
|
|||
Assert.assertEquals("Expected number of blocked thread not found",
|
||||
threadCount, rwLock.getQueueLength());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSafemodeReplicationConf() throws IOException {
|
||||
Configuration conf = new Configuration();
|
||||
FSImage fsImage = Mockito.mock(FSImage.class);
|
||||
FSEditLog fsEditLog = Mockito.mock(FSEditLog.class);
|
||||
Mockito.when(fsImage.getEditLog()).thenReturn(fsEditLog);
|
||||
conf.setInt(DFSConfigKeys.DFS_NAMENODE_REPLICATION_MIN_KEY, 2);
|
||||
FSNamesystem fsn = new FSNamesystem(conf, fsImage);
|
||||
SafeModeInfo safemodeInfo = fsn.getSafeModeInfoForTests();
|
||||
assertTrue(safemodeInfo.toString().contains("Minimal replication = 2"));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue