You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@brooklyn.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2017/12/03 13:28:00 UTC
[jira] [Commented] (BROOKLYN-567) StackOverflowError rebinding to
DynamicCluster (memberSpec after many added/deleted members)
[ https://issues.apache.org/jira/browse/BROOKLYN-567?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16275932#comment-16275932 ]
ASF GitHub Bot commented on BROOKLYN-567:
-----------------------------------------
GitHub user bostko opened a pull request:
https://github.com/apache/brooklyn-server/pull/907
BROOKLYN-567 Prevent mutating EntitySpecSupplier's flag field
I believe this fixes the issue.
Glad to do a little Sunday hiking in Apache Brooklyn.
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/bostko/brooklyn-server fix/brooklyn-567
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/brooklyn-server/pull/907.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #907
----
commit 7a9992bb6214aafffb6e281dbe09fb03dc6b4022
Author: Valentin Aitken <va...@nalisbg.com>
Date: 2017-12-03T13:24:15Z
BROOKLYN-567 Prevent mutating EntitySpecSupplier's flag field
----
> StackOverflowError rebinding to DynamicCluster (memberSpec after many added/deleted members)
> --------------------------------------------------------------------------------------------
>
> Key: BROOKLYN-567
> URL: https://issues.apache.org/jira/browse/BROOKLYN-567
> Project: Brooklyn
> Issue Type: Bug
> Reporter: Aled Sage
>
> In Brooklyn 1.0.0-SNAPSHOT, I had a {{DynamicCluster}} with many members (e.g. 1000). When rebinding to my persisted state, it failed with a {{StackOverflowError}}. You can reproduce the same thing if you resize the cluster from 1 to 0 and back again 1000 times.
> You can reproduce this with a simple unit test:
> {noformat}
> @Test
> public void testMemberSpecDsl() throws Exception {
> Entity app = createAndStartApplication(
> "location:",
> " localhost:",
> " " + SshMachineLocation.SSH_TOOL_CLASS.getName() + ": " + RecordingSshTool.class.getName(),
> "services:",
> "- type: " + DynamicCluster.class.getName(),
> " brooklyn.flags:",
> " initialSize: 0",
> " memberSpec:",
> " $brooklyn:entitySpec:",
> " type: "+VanillaSoftwareProcess.class.getName(),
> " name: mymember",
> " id: mymemberid",
> " brooklyn.config:",
> " launch.command: true",
> " checkRunning.command: true"
> );
> DynamicCluster cluster = (DynamicCluster) Iterables.find(app.getChildren(), Predicates.instanceOf(DynamicCluster.class));
> System.out.println("clusterId="+cluster.getId());
>
> for (int i = 0; i < 1000; i++) {
> cluster.resize(1);
> cluster.resize(0);
> }
>
> rebind();
> }
> {noformat}
> The error is like that below (a similar error can also happen when trying to persist the memento):
> {noformat}
> org.apache.brooklyn.util.exceptions.PropagatedRuntimeException: Failure rebinding: Problem loading mementos (deserialization): StackOverflowError
> at org.apache.brooklyn.util.exceptions.Exceptions.create(Exceptions.java:474)
> at org.apache.brooklyn.core.mgmt.rebind.RebindExceptionHandlerImpl.onDoneImpl(RebindExceptionHandlerImpl.java:504)
> at org.apache.brooklyn.core.mgmt.rebind.RebindExceptionHandlerImpl.onFailed(RebindExceptionHandlerImpl.java:428)
> at org.apache.brooklyn.core.mgmt.rebind.RebindIteration.run(RebindIteration.java:296)
> at org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl.rebindImpl(RebindManagerImpl.java:547)
> at org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl.lambda$rebind$0(RebindManagerImpl.java:503)
> at org.apache.brooklyn.util.core.task.BasicExecutionContext$1.call(BasicExecutionContext.java:143)
> at org.apache.brooklyn.util.core.task.BasicExecutionContext$1.call(BasicExecutionContext.java:141)
> at org.apache.brooklyn.util.core.task.BasicExecutionContext.runInSameThread(BasicExecutionContext.java:227)
> at org.apache.brooklyn.util.core.task.BasicExecutionContext.get(BasicExecutionContext.java:141)
> at org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl.rebind(RebindManagerImpl.java:502)
> at org.apache.brooklyn.core.mgmt.rebind.RebindTestUtils.rebindAll(RebindTestUtils.java:407)
> at org.apache.brooklyn.core.mgmt.rebind.RebindTestUtils.rebind(RebindTestUtils.java:323)
> at org.apache.brooklyn.core.mgmt.rebind.RebindTestFixture.rebind(RebindTestFixture.java:258)
> at org.apache.brooklyn.camp.brooklyn.AbstractYamlRebindTest.rebind(AbstractYamlRebindTest.java:102)
> at org.apache.brooklyn.core.mgmt.rebind.RebindTestFixture.rebind(RebindTestFixture.java:239)
> at org.apache.brooklyn.camp.brooklyn.ConfigParametersYamlTest.testMemberSpecDsl(ConfigParametersYamlTest.java:152)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:498)
> at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:104)
> at org.testng.internal.Invoker.invokeMethod(Invoker.java:645)
> at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:851)
> at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1177)
> at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
> at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
> at org.testng.TestRunner.privateRun(TestRunner.java:756)
> at org.testng.TestRunner.run(TestRunner.java:610)
> at org.testng.SuiteRunner.runTest(SuiteRunner.java:387)
> at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:382)
> at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
> at org.testng.SuiteRunner.run(SuiteRunner.java:289)
> at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
> at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
> at org.testng.TestNG.runSuitesSequentially(TestNG.java:1293)
> at org.testng.TestNG.runSuitesLocally(TestNG.java:1218)
> at org.testng.TestNG.runSuites(TestNG.java:1133)
> at org.testng.TestNG.run(TestNG.java:1104)
> at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
> at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
> at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
> Caused by: org.apache.brooklyn.util.exceptions.CompoundRuntimeException: Problem loading mementos (deserialization)
> at org.apache.brooklyn.core.mgmt.persist.BrooklynMementoPersisterToObjectStore.visitMemento(BrooklynMementoPersisterToObjectStore.java:575)
> at org.apache.brooklyn.core.mgmt.persist.BrooklynMementoPersisterToObjectStore.loadMemento(BrooklynMementoPersisterToObjectStore.java:501)
> at org.apache.brooklyn.core.mgmt.rebind.RebindIteration.instantiateMementos(RebindIteration.java:464)
> at org.apache.brooklyn.core.mgmt.rebind.RebindIteration.doRun(RebindIteration.java:257)
> at org.apache.brooklyn.core.mgmt.rebind.InitialFullRebindIteration.doRun(InitialFullRebindIteration.java:69)
> at org.apache.brooklyn.core.mgmt.rebind.RebindIteration.run(RebindIteration.java:284)
> ... 38 more
> Caused by: java.util.concurrent.ExecutionException: java.lang.StackOverflowError
> at java.util.concurrent.FutureTask.report(FutureTask.java:122)
> at java.util.concurrent.FutureTask.get(FutureTask.java:192)
> at org.apache.brooklyn.core.mgmt.persist.BrooklynMementoPersisterToObjectStore.visitMemento(BrooklynMementoPersisterToObjectStore.java:561)
> ... 43 more
> Caused by: java.lang.StackOverflowError
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.OuterClassMapper.realMember(OuterClassMapper.java:44)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.AnnotationMapper.realMember(AnnotationMapper.java:119)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at org.apache.brooklyn.util.core.xstream.CompilerIndependentOuterClassFieldMapper.realMember(CompilerIndependentOuterClassFieldMapper.java:79)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.mapper.MapperWrapper.realMember(MapperWrapper.java:38)
> at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:285)
> at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:263)
> at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
> at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
> at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
> at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:480)
> at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:412)
> at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:263)
> at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
> at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
> at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
> at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:480)
> at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:412)
> at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:263)
> at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
> at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
> at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
> at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:480)
> at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:412)
> at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:263)
> at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
> at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
> at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
> at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:480)
> at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:412)
> at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:263)
> at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
> at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
> at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
> at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:480)
> at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:412)
> at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:263)
> at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
> <repeated many times>
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)