Map<String, String> params = new HashMap<String, String>() {{
put("test", "test");
}};
RequestResourceFilter resourceFilter = new RequestResourceFilter("HDFS", null, null);
ExecuteActionRequest actionRequest = new ExecuteActionRequest("c1", "NON_EXISTENT_CHECK", params);
actionRequest.getResourceFilters().add(resourceFilter);
Map<String, String> requestProperties = new HashMap<String, String>();
requestProperties.put(REQUEST_CONTEXT_PROPERTY, "Called from a test");
expectActionCreationErrorWithMessage(actionRequest, requestProperties, "Unsupported action");
//actionRequest = new ExecuteActionRequest("c1", "NON_EXISTENT_SERVICE_CHECK", "HDFS", params);
//expectActionCreationErrorWithMessage(actionRequest, requestProperties, "Unsupported action");
actionRequest = new ExecuteActionRequest("c1", "DECOMMISSION_DATANODE", params);
actionRequest.getResourceFilters().add(resourceFilter);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Unsupported action DECOMMISSION_DATANODE for Service: HDFS and Component: null");
//actionRequest = new ExecuteActionRequest("c1", "DECOMMISSION", "HDFS", params);
//expectActionCreationErrorWithMessage(actionRequest, requestProperties, "Unsupported action DECOMMISSION for Service: HDFS and Component: null");
resourceFilter = new RequestResourceFilter("HDFS", "HDFS_CLIENT", null);
List<RequestResourceFilter> resourceFilters = new ArrayList<RequestResourceFilter>();
resourceFilters.add(resourceFilter);
actionRequest = new ExecuteActionRequest("c1", "DECOMMISSION", null, resourceFilters, params);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Unsupported action DECOMMISSION for Service: HDFS and Component: HDFS_CLIENT");
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("HDFS", null, null);
resourceFilters.add(resourceFilter);
actionRequest = new ExecuteActionRequest("c1", null, "DECOMMISSION_DATANODE", resourceFilters, params);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Action DECOMMISSION_DATANODE does not exist");
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("YARN", "RESOURCEMANAGER", null);
resourceFilters.add(resourceFilter);
actionRequest = new ExecuteActionRequest("c1", "DECOMMISSION", null, resourceFilters, params);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Service not found, clusterName=c1, serviceName=YARN");
Map<String, String> params2 = new HashMap<String, String>() {{
put("included_hosts", "h1,h2");
put("excluded_hosts", "h1,h3");
}};
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("HDFS", "NAMENODE", null);
resourceFilters.add(resourceFilter);
actionRequest = new ExecuteActionRequest("c1", "DECOMMISSION", null, resourceFilters, params2);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Same host cannot be specified for inclusion as well as exclusion. Hosts: [h1]");
params2 = new HashMap<String, String>() {{
put("included_hosts", " h1,h2");
put("excluded_hosts", "h4, h3");
put("slave_type", "HDFS_CLIENT");
}};
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("HDFS", "NAMENODE", null);
resourceFilters.add(resourceFilter);
actionRequest = new ExecuteActionRequest("c1", "DECOMMISSION", null, resourceFilters, params2);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Component HDFS_CLIENT is not supported for decommissioning.");
List<String> hosts = new ArrayList<String>();
hosts.add("h6");
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("HDFS", "NAMENODE", hosts);
resourceFilters.add(resourceFilter);
actionRequest = new ExecuteActionRequest("c1", "DECOMMISSION", null, resourceFilters, params2);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Decommission command cannot be issued with target host(s) specified.");
hdfs.getServiceComponent(Role.DATANODE.name()).getServiceComponentHost("h1").setState(State.INSTALLED);
params2 = new HashMap<String, String>() {{
put("excluded_hosts", "h1 ");
}};
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("HDFS", "NAMENODE", null);
resourceFilters.add(resourceFilter);
actionRequest = new ExecuteActionRequest("c1", "DECOMMISSION", null, resourceFilters, params2);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Component DATANODE on host h1 cannot be decommissioned as its not in STARTED state");
params2 = new HashMap<String, String>() {{
put("excluded_hosts", "h1 ");
put("mark_draining_only", "true");
}};
actionRequest = new ExecuteActionRequest("c1", "DECOMMISSION", null, resourceFilters, params2);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"mark_draining_only is not a valid parameter for NAMENODE");
controller.getAmbariMetaInfo().addActionDefinition(new ActionDefinition(
"a1", ActionType.SYSTEM, "test,dirName", "", "", "Does file exist",
TargetHostType.SPECIFIC, Short.valueOf("100")));
controller.getAmbariMetaInfo().addActionDefinition(new ActionDefinition(
"a2", ActionType.SYSTEM, "", "HDFS", "DATANODE", "Does file exist",
TargetHostType.ANY, Short.valueOf("100")));
controller.getAmbariMetaInfo().addActionDefinition(new ActionDefinition(
"a3", ActionType.SYSTEM, "", "MAPREDUCE", "MAPREDUCE_CLIENT", "Does file exist",
TargetHostType.ANY, Short.valueOf("100")));
controller.getAmbariMetaInfo().addActionDefinition(new ActionDefinition(
"a4", ActionType.SYSTEM, "", "HIVE", "", "Does file exist",
TargetHostType.ANY, Short.valueOf("100")));
actionRequest = new ExecuteActionRequest("c1", null, "a1", null, null);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Action a1 requires input 'test' that is not provided");
actionRequest = new ExecuteActionRequest("c1", null, "a1", null, params);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Action a1 requires input 'dirName' that is not provided");
params.put("dirName", "dirName");
actionRequest = new ExecuteActionRequest("c1", null, "a1", null, params);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Action a1 requires explicit target host(s)");
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("HIVE", null, null);
resourceFilters.add(resourceFilter);
actionRequest = new ExecuteActionRequest("c1", null, "a2", resourceFilters, params);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Action a2 targets service HIVE that does not match with expected HDFS");
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("HDFS", "HDFS_CLIENT", null);
resourceFilters.add(resourceFilter);
actionRequest = new ExecuteActionRequest("c1", null, "a2", resourceFilters, params);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Action a2 targets component HDFS_CLIENT that does not match with expected DATANODE");
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("HDFS2", "HDFS_CLIENT", null);
resourceFilters.add(resourceFilter);
actionRequest = new ExecuteActionRequest("c1", null, "a1", resourceFilters, params);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Action a1 targets service HDFS2 that does not exist");
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("HDFS", "HDFS_CLIENT2", null);
resourceFilters.add(resourceFilter);
actionRequest = new ExecuteActionRequest("c1", null, "a1", resourceFilters, params);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Action a1 targets component HDFS_CLIENT2 that does not exist");
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("", "HDFS_CLIENT2", null);
resourceFilters.add(resourceFilter);
actionRequest = new ExecuteActionRequest("c1", null, "a1", resourceFilters, params);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Action a1 targets component HDFS_CLIENT2 without specifying the target service");
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("", "", null);
resourceFilters.add(resourceFilter);
// targets a service that is not a member of the stack (e.g. MR not in HDP-2)
actionRequest = new ExecuteActionRequest("c1", null, "a3", resourceFilters, params);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Action a3 targets service MAPREDUCE that does not exist");
hosts = new ArrayList<String>();
hosts.add("h6");
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("", "", hosts);
resourceFilters.add(resourceFilter);
actionRequest = new ExecuteActionRequest("c1", null, "a2", resourceFilters, params);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Request specifies host h6 but its not a valid host based on the target service=HDFS and component=DATANODE");
resourceFilters.clear();
resourceFilter = new RequestResourceFilter("HIVE", "", null);
resourceFilters.add(resourceFilter);
actionRequest = new ExecuteActionRequest("c1", null, "a4", resourceFilters, params);
expectActionCreationErrorWithMessage(actionRequest, requestProperties,
"Suitable hosts not found, component=, service=HIVE, cluster=c1, actionName=a4");