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)