You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@slider.apache.org by bi...@apache.org on 2016/06/15 15:10:02 UTC
[2/2] incubator-slider git commit: SLIDER-1141 add status for unique
components
SLIDER-1141 add status for unique components
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/454f2cf2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/454f2cf2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/454f2cf2
Branch: refs/heads/develop
Commit: 454f2cf2e391bc261f7905181a310994976973cf
Parents: 24a5062
Author: Billie Rinaldi <bi...@gmail.com>
Authored: Wed Jun 15 07:18:42 2016 -0700
Committer: Billie Rinaldi <bi...@gmail.com>
Committed: Wed Jun 15 08:08:37 2016 -0700
----------------------------------------------------------------------
.../java/org/apache/slider/api/RoleKeys.java | 5 ++++
.../slider/server/appmaster/state/AppState.java | 14 ++++++++--
.../appstate/TestMockAppStateUniqueNames.groovy | 29 ++++++++++++++++++++
3 files changed, 45 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/454f2cf2/slider-core/src/main/java/org/apache/slider/api/RoleKeys.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/api/RoleKeys.java b/slider-core/src/main/java/org/apache/slider/api/RoleKeys.java
index 647ac23..812a6b3 100644
--- a/slider-core/src/main/java/org/apache/slider/api/RoleKeys.java
+++ b/slider-core/src/main/java/org/apache/slider/api/RoleKeys.java
@@ -30,6 +30,11 @@ public interface RoleKeys {
String ROLE_NAME = "role.name";
/**
+ * The group of a role: {@value}
+ */
+ String ROLE_GROUP = "role.group";
+
+ /**
* Status report: number actually granted : {@value}
*/
String ROLE_ACTUAL_INSTANCES = "role.actual.instances";
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/454f2cf2/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
index b4465a8..3213d93 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
@@ -42,7 +42,6 @@ import org.apache.slider.api.ClusterDescriptionOperations;
import org.apache.slider.api.ClusterNode;
import org.apache.slider.api.InternalKeys;
import org.apache.slider.api.ResourceKeys;
-import org.apache.slider.api.RoleKeys;
import org.apache.slider.api.StatusKeys;
import org.apache.slider.api.types.ApplicationLivenessInformation;
import org.apache.slider.api.types.ComponentInformation;
@@ -1346,7 +1345,7 @@ public class AppState {
* These are returned as integers, but there is special handling of the
* string {@link ResourceKeys#YARN_RESOURCE_MAX}, which triggers
* the return of the maximum value.
- * @param name component to get from
+ * @param group component to get from
* @param option option name
* @param defVal default value
* @param maxVal value to return if the max val is requested
@@ -1800,11 +1799,20 @@ public class AppState {
for (RoleStatus role : getRoleStatusMap().values()) {
String rolename = role.getName();
+ if (hasUniqueNames(instanceDefinition.getResourceOperations(),
+ role.getGroup())) {
+ cd.setRoleOpt(rolename, COMPONENT_PRIORITY, role.getPriority());
+ cd.setRoleOpt(rolename, ROLE_GROUP, role.getGroup());
+ MapOperations groupOptions = instanceDefinition.getResourceOperations()
+ .getComponent(role.getGroup());
+ SliderUtils.mergeMapsIgnoreDuplicateKeys(cd.getRole(rolename),
+ groupOptions.options);
+ }
List<String> instances = instanceMap.get(rolename);
int nodeCount = instances != null ? instances.size(): 0;
cd.setRoleOpt(rolename, COMPONENT_INSTANCES,
role.getDesired());
- cd.setRoleOpt(rolename, RoleKeys.ROLE_ACTUAL_INSTANCES, nodeCount);
+ cd.setRoleOpt(rolename, ROLE_ACTUAL_INSTANCES, nodeCount);
cd.setRoleOpt(rolename, ROLE_REQUESTED_INSTANCES, role.getRequested());
cd.setRoleOpt(rolename, ROLE_RELEASING_INSTANCES, role.getReleasing());
cd.setRoleOpt(rolename, ROLE_FAILED_INSTANCES, role.getFailed());
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/454f2cf2/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateUniqueNames.groovy
----------------------------------------------------------------------
diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateUniqueNames.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateUniqueNames.groovy
index d3ba798..84d6bc7 100644
--- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateUniqueNames.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateUniqueNames.groovy
@@ -22,6 +22,7 @@ import groovy.transform.CompileStatic
import groovy.util.logging.Slf4j
import org.apache.hadoop.fs.Path
import org.apache.slider.api.ResourceKeys
+import org.apache.slider.api.RoleKeys
import org.apache.slider.core.conf.AggregateConf
import org.apache.slider.core.conf.ConfTreeOperations
import org.apache.slider.core.exceptions.BadConfigException
@@ -86,6 +87,25 @@ class TestMockAppStateUniqueNames extends BaseMockAppStateTest
return new ConfTreeOperations(resources)
}
+ private static void checkRole(MockAppState appState,
+ String roleName,
+ String roleGroup,
+ Map<String, String> expectedOpts) {
+
+ for (String key : expectedOpts.keySet()) {
+ if (ResourceKeys.COMPONENT_PRIORITY.equals(key) ||
+ ResourceKeys.COMPONENT_INSTANCES.equals(key)) {
+ continue
+ }
+ assert expectedOpts.get(key).equals(appState.getClusterStatus()
+ .getMandatoryRoleOpt(roleName, key))
+ }
+ assert 1 == appState.getClusterStatus().getMandatoryRoleOptInt(
+ roleName, ResourceKeys.COMPONENT_INSTANCES)
+ assert roleGroup.equals(appState.getClusterStatus().getMandatoryRoleOpt(
+ roleName, RoleKeys.ROLE_GROUP))
+ }
+
@Test
public void testDynamicFlexAddRole() throws Throwable {
def cd = init()
@@ -113,6 +133,10 @@ class TestMockAppStateUniqueNames extends BaseMockAppStateTest
assert 2 == appState.lookupRoleStatus("group11").resourceRequirements.virtualCores
assert 4 == appState.lookupRoleStatus("group21").resourceRequirements.virtualCores
assert 4 == appState.lookupRoleStatus("group22").resourceRequirements.virtualCores
+
+ appState.refreshClusterStatus()
+ checkRole(appState, "group21", "group2", opts)
+ checkRole(appState, "group22", "group2", opts)
}
@Test
@@ -167,6 +191,11 @@ class TestMockAppStateUniqueNames extends BaseMockAppStateTest
assert 8 == appState.lookupRoleStatus("group11").resourceRequirements.virtualCores
assert 8 == appState.lookupRoleStatus("group12").resourceRequirements.virtualCores
assert 8 == appState.lookupRoleStatus("group13").resourceRequirements.virtualCores
+
+ appState.refreshClusterStatus()
+ checkRole(appState, "group11", "group1", opts)
+ checkRole(appState, "group12", "group1", opts)
+ checkRole(appState, "group13", "group1", opts)
}
}