SLIDER-587: consequences of change: fix now broken test; improve other tests
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/b072b9fd Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/b072b9fd Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/b072b9fd Branch: refs/heads/feature/SLIDER-531-registry-enhancements Commit: b072b9fd6bfc41d29b0d26d3f75ba8dae549b8af Parents: d03b678 Author: Steve Loughran <[email protected]> Authored: Sat Nov 1 13:11:13 2014 +0000 Committer: Steve Loughran <[email protected]> Committed: Sat Nov 1 13:11:13 2014 +0000 ---------------------------------------------------------------------- .../server/appmaster/state/RoleHistory.java | 5 ++- .../TestMockAppStateDynamicHistory.groovy | 23 +++++++++++++ .../TestMockAppStateFlexDynamicRoles.groovy | 35 ++++++++++++-------- .../model/mock/BaseMockAppStateTest.groovy | 7 +++- .../appmaster/model/mock/MockContainer.groovy | 7 +++- .../model/mock/MockProviderService.groovy | 6 ++-- .../appmaster/model/mock/MockRoleHistory.groovy | 35 ++++++++++++++++++++ 7 files changed, 99 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/b072b9fd/slider-core/src/main/java/org/apache/slider/server/appmaster/state/RoleHistory.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/RoleHistory.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/RoleHistory.java index f1c0af5..8de4b92 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/RoleHistory.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/RoleHistory.java @@ -131,7 +131,7 @@ public class RoleHistory { * @throws ArrayIndexOutOfBoundsException * @throws BadConfigException */ - private void checkProviderRole(Map<Integer, RoleStatus> roleStats, + protected void checkProviderRole(Map<Integer, RoleStatus> roleStats, ProviderRole providerRole) throws BadConfigException { int index = providerRole.id; @@ -154,6 +154,8 @@ public class RoleHistory { */ public void addNewProviderRole(ProviderRole providerRole) throws BadConfigException { + log.debug("Validating/adding new provider role to role history: {} ", + providerRole); Map<Integer, RoleStatus> roleStats = new HashMap<Integer, RoleStatus>(); for (ProviderRole role : providerRoles) { @@ -161,6 +163,7 @@ public class RoleHistory { } checkProviderRole(roleStats, providerRole); + log.debug("Check successful; adding role"); this.providerRoles.add(providerRole); } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/b072b9fd/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateDynamicHistory.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateDynamicHistory.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateDynamicHistory.groovy index 7d41012..e06c2cb 100644 --- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateDynamicHistory.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateDynamicHistory.groovy @@ -24,9 +24,11 @@ import org.apache.hadoop.conf.Configuration import org.apache.hadoop.yarn.api.records.ContainerId import org.apache.slider.api.ResourceKeys import org.apache.slider.core.conf.ConfTreeOperations +import org.apache.slider.core.exceptions.BadConfigException import org.apache.slider.providers.ProviderRole import org.apache.slider.server.appmaster.model.mock.BaseMockAppStateTest import org.apache.slider.server.appmaster.model.mock.MockAppState +import org.apache.slider.server.appmaster.model.mock.MockRoleHistory import org.apache.slider.server.appmaster.model.mock.MockRoles import org.apache.slider.server.appmaster.model.mock.MockYarnEngine import org.apache.slider.server.appmaster.operations.ContainerRequestOperation @@ -208,4 +210,25 @@ class TestMockAppStateDynamicHistory extends BaseMockAppStateTest def request1 = action1.request assert request1.nodes } + + @Test(expected = BadConfigException.class) + public void testRoleHistoryRoleAdditions() throws Throwable { + MockRoleHistory roleHistory = new MockRoleHistory([]) + roleHistory.addNewProviderRole(new ProviderRole("one", 1)) + roleHistory.addNewProviderRole(new ProviderRole("two", 1)) + roleHistory.dump() + fail("should have raised an exception") + } + + + @Test(expected = BadConfigException.class) + public void testRoleHistoryRoleStartupConflict() throws Throwable { + MockRoleHistory roleHistory = new MockRoleHistory([ + new ProviderRole("one", 1), new ProviderRole("two", 1) + ]) + roleHistory.dump() + fail("should have raised an exception") + } + + } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/b072b9fd/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateFlexDynamicRoles.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateFlexDynamicRoles.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateFlexDynamicRoles.groovy index 8308a13..53299dd 100644 --- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateFlexDynamicRoles.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateFlexDynamicRoles.groovy @@ -27,10 +27,8 @@ import org.apache.slider.core.conf.ConfTreeOperations import org.apache.slider.core.exceptions.BadConfigException import org.apache.slider.server.appmaster.model.mock.BaseMockAppStateTest import org.apache.slider.server.appmaster.model.mock.MockAppState -import org.apache.slider.server.appmaster.model.mock.MockRecordFactory import org.apache.slider.server.appmaster.model.mock.MockRoles import org.apache.slider.server.appmaster.model.mock.MockYarnEngine -import org.apache.slider.server.appmaster.state.AppState import org.apache.slider.server.appmaster.state.SimpleReleaseSelector import org.apache.slider.server.avro.RoleHistoryWriter import org.junit.Test @@ -71,7 +69,7 @@ class TestMockAppStateFlexDynamicRoles extends BaseMockAppStateTest (ResourceKeys.COMPONENT_PRIORITY): "6", ] - instance.resourceOperations.components["dynamic"] = opts + instance.resourceOperations.components["dynamic-6"] = opts appState.buildInstance(instance, @@ -98,7 +96,7 @@ class TestMockAppStateFlexDynamicRoles extends BaseMockAppStateTest (ResourceKeys.COMPONENT_PRIORITY): "7", ] - cd.components["role4"] = opts + cd.components["dynamicAdd7"] = opts appState.updateResourceDefinitions(cd.confTree); createAndStartNodes(); dumpClusterDescription("updated CD", appState.getClusterStatus()) @@ -119,12 +117,17 @@ class TestMockAppStateFlexDynamicRoles extends BaseMockAppStateTest (ResourceKeys.COMPONENT_PRIORITY): "6", ] - cd.components["role4"] = opts + cd.components["conflictingPriority"] = opts try { appState.updateResourceDefinitions(cd.confTree); - dumpClusterDescription("updated CD", appState.getClusterStatus()) - fail("Expected an exception") + + def status = appState.getClusterStatus() + dumpClusterDescription("updated CD", status) + fail("Expected an exception, got $status") } catch (BadConfigException expected) { + log.info("Expected: {}", expected) + log.debug("Expected: {}", expected, expected) + // expected } } @@ -149,24 +152,24 @@ class TestMockAppStateFlexDynamicRoles extends BaseMockAppStateTest RoleHistoryWriter historyWriter = new RoleHistoryWriter(); def opts = [ (ResourceKeys.COMPONENT_INSTANCES): "1", - (ResourceKeys.COMPONENT_PRIORITY): "7", + (ResourceKeys.COMPONENT_PRIORITY): "9", ] - cd.components["role4"] = opts + cd.components["HistorySaveFlexLoad"] = opts appState.updateResourceDefinitions(cd.confTree); createAndStartNodes(); historyWriter.read(fs, history, appState.roleHistory) } @Test - public void testHistoryFlexSaveLoad() throws Throwable { + public void testHistoryFlexSaveResetLoad() throws Throwable { def cd = init() def opts = [ (ResourceKeys.COMPONENT_INSTANCES): "1", - (ResourceKeys.COMPONENT_PRIORITY): "7", + (ResourceKeys.COMPONENT_PRIORITY): "10", ] - cd.components["role4"] = opts + cd.components["HistoryFlexSaveLoad"] = opts appState.updateResourceDefinitions(cd.confTree); createAndStartNodes(); RoleHistoryWriter historyWriter = new RoleHistoryWriter(); @@ -185,7 +188,13 @@ class TestMockAppStateFlexDynamicRoles extends BaseMockAppStateTest fs, historyPath2, null, null, new SimpleReleaseSelector()) - historyWriter.read(fs, history, appState.roleHistory) + // on this read there won't be the right number of roles + try { + historyWriter.read(fs, history, appState.roleHistory) + fail("expected an exception") + } catch (IOException e) { + assert e.toString().contains("Number of roles") + } } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/b072b9fd/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/BaseMockAppStateTest.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/BaseMockAppStateTest.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/BaseMockAppStateTest.groovy index c48d7fa..50d7e06 100644 --- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/BaseMockAppStateTest.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/BaseMockAppStateTest.groovy @@ -33,7 +33,12 @@ import org.apache.slider.common.tools.SliderUtils import org.apache.slider.core.conf.AggregateConf import org.apache.slider.core.main.LauncherExitCodes import org.apache.slider.server.appmaster.operations.AbstractRMOperation -import org.apache.slider.server.appmaster.state.* +import org.apache.slider.server.appmaster.state.AppState +import org.apache.slider.server.appmaster.state.ContainerAssignment +import org.apache.slider.server.appmaster.state.NodeInstance +import org.apache.slider.server.appmaster.state.RoleInstance +import org.apache.slider.server.appmaster.state.RoleStatus +import org.apache.slider.server.appmaster.state.SimpleReleaseSelector import org.apache.slider.test.SliderTestBase import org.junit.Before http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/b072b9fd/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockContainer.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockContainer.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockContainer.groovy index 3eba7c4..9f5d939 100644 --- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockContainer.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockContainer.groovy @@ -18,7 +18,12 @@ package org.apache.slider.server.appmaster.model.mock -import org.apache.hadoop.yarn.api.records.* +import org.apache.hadoop.yarn.api.records.Container +import org.apache.hadoop.yarn.api.records.ContainerId +import org.apache.hadoop.yarn.api.records.NodeId +import org.apache.hadoop.yarn.api.records.Priority +import org.apache.hadoop.yarn.api.records.Resource +import org.apache.hadoop.yarn.api.records.Token class MockContainer extends Container { http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/b072b9fd/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockProviderService.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockProviderService.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockProviderService.groovy index fc23d54..7efcd96 100644 --- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockProviderService.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockProviderService.groovy @@ -20,13 +20,14 @@ package org.apache.slider.server.appmaster.model.mock import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.Path +import org.apache.hadoop.registry.client.types.ServiceRecord import org.apache.hadoop.service.LifecycleEvent +import org.apache.hadoop.service.Service.STATE import org.apache.hadoop.service.ServiceStateChangeListener import org.apache.hadoop.yarn.api.records.Container import org.apache.hadoop.yarn.api.records.ContainerId import org.apache.hadoop.yarn.api.records.Priority import org.apache.hadoop.yarn.client.api.AMRMClient -import org.apache.hadoop.registry.client.types.ServiceRecord import org.apache.slider.api.ClusterDescription import org.apache.slider.common.tools.SliderFileSystem import org.apache.slider.core.conf.AggregateConf @@ -34,6 +35,7 @@ import org.apache.slider.core.conf.MapOperations import org.apache.slider.core.exceptions.BadCommandArgumentsException import org.apache.slider.core.exceptions.SliderException import org.apache.slider.core.launch.ContainerLauncher +import org.apache.slider.providers.ProviderCompleted import org.apache.slider.providers.ProviderRole import org.apache.slider.providers.ProviderService import org.apache.slider.server.appmaster.actions.QueueAccess @@ -46,8 +48,6 @@ import org.apache.slider.server.appmaster.web.rest.agent.HeartBeatResponse import org.apache.slider.server.appmaster.web.rest.agent.Register import org.apache.slider.server.appmaster.web.rest.agent.RegistrationResponse import org.apache.slider.server.appmaster.web.rest.agent.RegistrationStatus -import org.apache.slider.providers.ProviderCompleted -import org.apache.hadoop.service.Service.STATE import org.apache.slider.server.services.yarnregistry.YarnRegistryViewForProviders class MockProviderService implements ProviderService { http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/b072b9fd/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockRoleHistory.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockRoleHistory.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockRoleHistory.groovy new file mode 100644 index 0000000..c521697 --- /dev/null +++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockRoleHistory.groovy @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.slider.server.appmaster.model.mock + +import org.apache.slider.core.exceptions.BadConfigException +import org.apache.slider.providers.ProviderRole +import org.apache.slider.server.appmaster.state.RoleHistory + +/** + * subclass to enable access to some of the protected methods + */ +class MockRoleHistory extends RoleHistory { + + MockRoleHistory(List<ProviderRole> providerRoles) throws BadConfigException { + super(providerRoles) + } + + +}
