YARN-9593. Support Comma in the value of Scheduler Configuration Mutation API.
This commit is contained in:
parent
d608e94f92
commit
b5df1da3a1
@ -79,6 +79,7 @@ public class SchedConfCLI extends Configured implements Tool {
|
|||||||
private static final String GET_SCHEDULER_CONF = "getConf";
|
private static final String GET_SCHEDULER_CONF = "getConf";
|
||||||
private static final String FORMAT_CONF = "formatConfig";
|
private static final String FORMAT_CONF = "formatConfig";
|
||||||
private static final String HELP_CMD = "help";
|
private static final String HELP_CMD = "help";
|
||||||
|
private static final String SPLIT_BY_SLASH_COMMA = "(?<!\\\\)\\,";
|
||||||
|
|
||||||
private static final String CONF_ERR_MSG = "Specify configuration key " +
|
private static final String CONF_ERR_MSG = "Specify configuration key " +
|
||||||
"value as confKey=confVal.";
|
"value as confKey=confVal.";
|
||||||
@ -410,7 +411,8 @@ void globalUpdates(String args, SchedConfUpdateInfo updateInfo) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
HashMap<String, String> globalUpdates = new HashMap<>();
|
HashMap<String, String> globalUpdates = new HashMap<>();
|
||||||
for (String globalUpdate : args.split(",")) {
|
for (String globalUpdate : args.split(SPLIT_BY_SLASH_COMMA)) {
|
||||||
|
globalUpdate = globalUpdate.replace("\\", "");
|
||||||
putKeyValuePair(globalUpdates, globalUpdate);
|
putKeyValuePair(globalUpdates, globalUpdate);
|
||||||
}
|
}
|
||||||
updateInfo.setGlobalParams(globalUpdates);
|
updateInfo.setGlobalParams(globalUpdates);
|
||||||
@ -421,8 +423,9 @@ private QueueConfigInfo getQueueConfigInfo(String arg) {
|
|||||||
String queuePath = args[0];
|
String queuePath = args[0];
|
||||||
Map<String, String> queueConfigs = new HashMap<>();
|
Map<String, String> queueConfigs = new HashMap<>();
|
||||||
if (args.length > 1) {
|
if (args.length > 1) {
|
||||||
String[] queueArgs = args[1].split(",");
|
String[] queueArgs = args[1].split(SPLIT_BY_SLASH_COMMA);
|
||||||
for (int i = 0; i < queueArgs.length; ++i) {
|
for (int i = 0; i < queueArgs.length; ++i) {
|
||||||
|
queueArgs[i] = queueArgs[i].replace("\\", "");
|
||||||
putKeyValuePair(queueConfigs, queueArgs[i]);
|
putKeyValuePair(queueConfigs, queueArgs[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -461,13 +464,22 @@ private void printUsage() {
|
|||||||
+ "Example (adding queues): yarn schedulerconf -add "
|
+ "Example (adding queues): yarn schedulerconf -add "
|
||||||
+ "\"root.a.a1:capacity=100,maximum-capacity=100;root.a.a2:capacity=0,"
|
+ "\"root.a.a1:capacity=100,maximum-capacity=100;root.a.a2:capacity=0,"
|
||||||
+ "maximum-capacity=0\"\n"
|
+ "maximum-capacity=0\"\n"
|
||||||
|
+ "Example (adding queues with comma in value): yarn schedulerconf "
|
||||||
|
+ "-add \"root.default:acl_administer_queue=user1\\,user2 group1\\,"
|
||||||
|
+ "group2,maximum-capacity=100;root.a.a2:capacity=0\"\n"
|
||||||
+ "Example (removing queues): yarn schedulerconf -remove \"root.a.a1;"
|
+ "Example (removing queues): yarn schedulerconf -remove \"root.a.a1;"
|
||||||
+ "root.a.a2\"\n"
|
+ "root.a.a2\"\n"
|
||||||
+ "Example (updating queues): yarn schedulerconf -update \"root.a.a1"
|
+ "Example (updating queues): yarn schedulerconf -update \"root.a.a1"
|
||||||
+ ":capacity=25,maximum-capacity=25;root.a.a2:capacity=75,"
|
+ ":capacity=25,maximum-capacity=25;root.a.a2:capacity=75,"
|
||||||
+ "maximum-capacity=75\"\n"
|
+ "maximum-capacity=75\"\n"
|
||||||
|
+ "Example (updating queues with comma in value): yarn schedulerconf "
|
||||||
|
+ "-update \"root.default:acl_administer_queue=user1\\,user2 group1\\,"
|
||||||
|
+ "group2,maximum-capacity=25;root.a.a2:capacity=75\"\n"
|
||||||
+ "Example (global scheduler update): yarn schedulerconf "
|
+ "Example (global scheduler update): yarn schedulerconf "
|
||||||
+ "-global yarn.scheduler.capacity.maximum-applications=10000\n"
|
+ "-global yarn.scheduler.capacity.maximum-applications=10000\n"
|
||||||
|
+ "Example (global scheduler update with comma in value): yarn "
|
||||||
|
+ "schedulerconf "
|
||||||
|
+ "-global \"acl_administer_queue=user1\\,user2 group1\\,group2\"\n"
|
||||||
+ "Example (format scheduler configuration): yarn schedulerconf "
|
+ "Example (format scheduler configuration): yarn schedulerconf "
|
||||||
+ "-format\n"
|
+ "-format\n"
|
||||||
+ "Example (get scheduler configuration): yarn schedulerconf "
|
+ "Example (get scheduler configuration): yarn schedulerconf "
|
||||||
|
@ -315,6 +315,19 @@ public void testAddQueues() {
|
|||||||
assertEquals("cVal1", cParams.get("c1"));
|
assertEquals("cVal1", cParams.get("c1"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(timeout = 10000)
|
||||||
|
public void testAddQueuesWithCommaInValue() {
|
||||||
|
SchedConfUpdateInfo schedUpdateInfo = new SchedConfUpdateInfo();
|
||||||
|
cli.addQueues("root.a:a1=a1Val1\\,a1Val2 a1Val3,a2=a2Val1\\,a2Val2",
|
||||||
|
schedUpdateInfo);
|
||||||
|
QueueConfigInfo addInfo = schedUpdateInfo.getAddQueueInfo().get(0);
|
||||||
|
assertEquals("root.a", addInfo.getQueue());
|
||||||
|
Map<String, String> params = addInfo.getParams();
|
||||||
|
assertEquals(2, params.size());
|
||||||
|
assertEquals("a1Val1,a1Val2 a1Val3", params.get("a1"));
|
||||||
|
assertEquals("a2Val1,a2Val2", params.get("a2"));
|
||||||
|
}
|
||||||
|
|
||||||
@Test(timeout = 10000)
|
@Test(timeout = 10000)
|
||||||
public void testRemoveQueues() {
|
public void testRemoveQueues() {
|
||||||
SchedConfUpdateInfo schedUpdateInfo = new SchedConfUpdateInfo();
|
SchedConfUpdateInfo schedUpdateInfo = new SchedConfUpdateInfo();
|
||||||
@ -353,6 +366,19 @@ public void testUpdateQueues() {
|
|||||||
assertEquals("cVal1", cParams.get("c1"));
|
assertEquals("cVal1", cParams.get("c1"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(timeout = 10000)
|
||||||
|
public void testUpdateQueuesWithCommaInValue() {
|
||||||
|
SchedConfUpdateInfo schedUpdateInfo = new SchedConfUpdateInfo();
|
||||||
|
cli.updateQueues("root.a:a1=a1Val1\\,a1Val2 a1Val3,a2=a2Val1\\,a2Val2",
|
||||||
|
schedUpdateInfo);
|
||||||
|
QueueConfigInfo updateInfo = schedUpdateInfo.getUpdateQueueInfo().get(0);
|
||||||
|
assertEquals("root.a", updateInfo.getQueue());
|
||||||
|
Map<String, String> params = updateInfo.getParams();
|
||||||
|
assertEquals(2, params.size());
|
||||||
|
assertEquals("a1Val1,a1Val2 a1Val3", params.get("a1"));
|
||||||
|
assertEquals("a2Val1,a2Val2", params.get("a2"));
|
||||||
|
}
|
||||||
|
|
||||||
@Test(timeout = 10000)
|
@Test(timeout = 10000)
|
||||||
public void testGlobalUpdate() {
|
public void testGlobalUpdate() {
|
||||||
SchedConfUpdateInfo schedUpdateInfo = new SchedConfUpdateInfo();
|
SchedConfUpdateInfo schedUpdateInfo = new SchedConfUpdateInfo();
|
||||||
@ -363,4 +389,17 @@ public void testGlobalUpdate() {
|
|||||||
assertEquals("schedVal1", globalInfo.get("schedKey1"));
|
assertEquals("schedVal1", globalInfo.get("schedKey1"));
|
||||||
assertEquals("schedVal2", globalInfo.get("schedKey2"));
|
assertEquals("schedVal2", globalInfo.get("schedKey2"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(timeout = 10000)
|
||||||
|
public void testGlobalUpdateWithCommaInValue() {
|
||||||
|
SchedConfUpdateInfo schedUpdateInfo = new SchedConfUpdateInfo();
|
||||||
|
cli.globalUpdates(
|
||||||
|
"schedKey1=schedVal1.1\\,schedVal1.2 schedVal1.3,schedKey2=schedVal2",
|
||||||
|
schedUpdateInfo);
|
||||||
|
Map<String, String> globalInfo = schedUpdateInfo.getGlobalParams();
|
||||||
|
assertEquals(2, globalInfo.size());
|
||||||
|
assertEquals("schedVal1.1,schedVal1.2 schedVal1.3",
|
||||||
|
globalInfo.get("schedKey1"));
|
||||||
|
assertEquals("schedVal2", globalInfo.get("schedKey2"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user