Details
-
Sub-task
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
3.0.0-alpha1
-
None
-
Reviewed
Description
Currently the allowed value range for Maintenance Min Replication dfs.namenode.maintenance.replication.min is 0 to dfs.namenode.replication.min (default=1). Users wanting not to affect the performance of the cluster would wish to have the Maintenance Min Replication number greater than 1, say 2. In the current design, it is possible to have this Maintenance Min Replication configuration, but only after changing the NameNode level Block Min Replication to 2, and which could slowdown the overall latency for client writes.
Technically speaking we should be allowing Maintenance Min Replication to be in range 0 to dfs.replication.max.
- There is always config value of 0 for users not wanting any availability/performance during maintenance.
- And, performance centric workloads can still get maintenance done without major disruptions by having a bigger Maintenance Min Replication. Setting the upper limit as dfs.replication.max could be an overkill as it could trigger re-replication which Maintenance State is trying to avoid. So, we could allow the dfs.namenode.maintenance.replication.min in the range 0 to dfs.replication
if (minMaintenanceR < 0) { throw new IOException("Unexpected configuration parameters: " + DFSConfigKeys.DFS_NAMENODE_MAINTENANCE_REPLICATION_MIN_KEY + " = " + minMaintenanceR + " < 0"); } if (minMaintenanceR > minR) { throw new IOException("Unexpected configuration parameters: " + DFSConfigKeys.DFS_NAMENODE_MAINTENANCE_REPLICATION_MIN_KEY + " = " + minMaintenanceR + " > " + DFSConfigKeys.DFS_NAMENODE_REPLICATION_MIN_KEY + " = " + minR);