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

Aled Sage resolved BROOKLYN-474.
--------------------------------
       Resolution: Fixed
    Fix Version/s: 0.11.0

> Rebind failed for historic ZooKeeperEnsembleImpl$MemberTrackingPolicy (no-arg 
> constructor not accessible)
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: BROOKLYN-474
>                 URL: https://issues.apache.org/jira/browse/BROOKLYN-474
>             Project: Brooklyn
>          Issue Type: Bug
>            Reporter: Aled Sage
>             Fix For: 0.11.0
>
>
> When testing rebind with 0.11.0 RC1 against historic persisted state, we saw 
> the exception below:
> {noformat}
> Caused by: org.apache.brooklyn.util.exceptions.CompoundRuntimeException: 
> Failure rebinding; 2 errors including: problem creating POLICY lplpmv3goo of 
> type 
> org.apache.brooklyn.entity.zookeeper.ZooKeeperEnsembleImpl$MemberTrackingPolicy:
>  Cannot instantiate instance of type class 
> org.apache.brooklyn.entity.zookeeper.ZooKeeperEnsembleImpl$MemberTrackingPolicy;
>  expected constructor signature not found (args are [{id=lplpmv3goo, 
> deferConstructionChecks=true, noConstructionInit=true, 
> group=ZooKeeperEnsembleImpl{id=stkwkmp76w}, 
> uniqueTag=MemberTrackingPolicy:ZooKeeperEnsembleImpl{id=stkwkmp76w}, 
> tags=[]}])
>         at 
> org.apache.brooklyn.util.exceptions.Exceptions.create(Exceptions.java:474)[141:org.apache.brooklyn.utils-common:0.11.0.SNAPSHOT]
>         at 
> org.apache.brooklyn.core.mgmt.rebind.RebindExceptionHandlerImpl.onDoneImpl(RebindExceptionHandlerImpl.java:498)[120:org.apache.brooklyn.core:0.11.0.SNAPSHOT]
>         at 
> org.apache.brooklyn.core.mgmt.rebind.RebindExceptionHandlerImpl.onDone(RebindExceptionHandlerImpl.java:414)[120:org.apache.brooklyn.core:0.11.0.SNAPSHOT]
>         at 
> org.apache.brooklyn.core.mgmt.rebind.RebindIteration.run(RebindIteration.java:267)[120:org.apache.brooklyn.core:0.11.0.SNAPSHOT]
>         at 
> org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl.rebindImpl(RebindManagerImpl.java:560)[120:org.apache.brooklyn.core:0.11.0.SNAPSHOT]
>         at 
> org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl$3.call(RebindManagerImpl.java:510)[120:org.apache.brooklyn.core:0.11.0.SNAPSHOT]
>         at 
> org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl$3.call(RebindManagerImpl.java:508)[120:org.apache.brooklyn.core:0.11.0.SNAPSHOT]
>         at 
> org.apache.brooklyn.util.core.task.BasicExecutionManager$SubmissionCallable.call(BasicExecutionManager.java:529)[120:org.apache.brooklyn.core:0.11.0.SNAPSHOT]
>         ... 4 more
> Caused by: java.lang.IllegalStateException: problem creating POLICY 
> lplpmv3goo of type 
> org.apache.brooklyn.entity.zookeeper.ZooKeeperEnsembleImpl$MemberTrackingPolicy
>         at 
> org.apache.brooklyn.core.mgmt.rebind.RebindExceptionHandlerImpl.onCreateFailed(RebindExceptionHandlerImpl.java:265)[120:org.apache.brooklyn.core:0.11.0.SNAPSHOT]
>         at 
> org.apache.brooklyn.core.mgmt.rebind.RebindIteration.instantiateAdjuncts(RebindIteration.java:484)[120:org.apache.brooklyn.core:0.11.0.SNAPSHOT]
>         at 
> org.apache.brooklyn.core.mgmt.rebind.RebindIteration.doRun(RebindIteration.java:241)[120:org.apache.brooklyn.core:0.11.0.SNAPSHOT]
>         at 
> org.apache.brooklyn.core.mgmt.rebind.InitialFullRebindIteration.doRun(InitialFullRebindIteration.java:69)[120:org.apache.brooklyn.core:0.11.0.SNAPSHOT]
>         at 
> org.apache.brooklyn.core.mgmt.rebind.RebindIteration.run(RebindIteration.java:265)[120:org.apache.brooklyn.core:0.11.0.SNAPSHOT]
>         ... 8 more
> Caused by: java.lang.IllegalStateException: Cannot instantiate instance of 
> type class 
> org.apache.brooklyn.entity.zookeeper.ZooKeeperEnsembleImpl$MemberTrackingPolicy;
>  expected constructor signature not found (args are [{id=lplpmv3goo, 
> deferConstructionChecks=true, noConstructionInit=true, 
> group=ZooKeeperEnsembleImpl{id=stkwkmp76w}, 
> uniqueTag=MemberTrackingPolicy:ZooKeeperEnsembleImpl{id=stkwkmp76w}, 
> tags=[]}])
>         at 
> org.apache.brooklyn.core.mgmt.rebind.RebindIteration$BrooklynObjectInstantiator.invokeConstructor(RebindIteration.java:1157)[120:org.apache.brooklyn.core:0.11.0.SNAPSHOT]
>         at 
> org.apache.brooklyn.core.mgmt.rebind.RebindIteration$BrooklynObjectInstantiator.newPolicy(RebindIteration.java:1061)[120:org.apache.brooklyn.core:0.11.0.SNAPSHOT]
>         at 
> org.apache.brooklyn.core.mgmt.rebind.RebindIteration.instantiateAdjuncts(RebindIteration.java:481)[120:org.apache.brooklyn.core:0.11.0.SNAPSHOT]
>         ... 11 more
> {noformat}
> The problem is that persisted state refers to an instance of 
> {{org.apache.brooklyn.entity.zookeeper.ZooKeeperEnsembleImpl$MemberTrackingPolicy}},
>  which has since been made a private class. The no-arg constructor is 
> therefore not directly accessible, which leads us down the wrong code path.
> The generalise advice would be to ensure that the class for anything in 
> persisted state has a public no-arg constructor.
> A general fix would be to use {{getDeclaredConsturctor(new Class[0])}} (so we 
> get the private constructor), and then to call the constructor after doing 
> {{constructor.setAccessible(true)}}.
> We should also add a public no-arg constructors to 
> {{ZooKeeperEnsembleImpl$MemberTrackingPolicy}} (which only exists for 
> backwards compatibility).



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to