[ 
https://issues.apache.org/jira/browse/BROOKLYN-567?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Aled Sage resolved BROOKLYN-567.
--------------------------------
       Resolution: Fixed
    Fix Version/s: 1.0.0

> 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
>             Fix For: 1.0.0
>
>
> 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)

Reply via email to