[
https://issues.apache.org/jira/browse/QPID-7548?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15754221#comment-15754221
]
Lorenz Quack commented on QPID-7548:
------------------------------------
* {{BrokerStoreUpgraderAndRecovererTest#testEndToEndUpgradeFromModelVersion1}}
- I'm not sure I like this test. We will have to adapt it on every model
change. And how did/would we create the latest configuration? If we generate it
by running the upgrader then the only thing the test is testing is that the
upgraders output is stable but not that it is doing the right thing.
* The logic of {{BrokerStoreUpgraderAndRecovererTest#equals}} seems to be
wrong. First of all it only tests id, name, and type, second and more
importantly it returns true if any _one_ record in expected matches _any_
record in actual instead of when _all_ records in expected match _exactly one_
record in actual. Would it not be better to implement
{{ConfiguredObjectRecord#equals}} and the compare the lists directly?
* ... I did not review the test code further until point 1 is resolved.
Regarding the uncommitted patch
* In general I'm in favour of a patch like this. Makes the upgrade code much
less error prone. Case in point: It seems we have another chaining problem
lurking in the 6.0 to 6.1 upgrader for truststores that that do _not_ contain
{{in-/excludedVirtualHostMessageSources}}.
* It should be pointed out that there is a change in how the upgrade process
works: previous to this patch we would upgrade each record from source version
to target version independently. after this patch we upgrade all records a
version at a time. I find the later approach more natural but it is a change I
wanted to point out.
* I am wondering whether it would be worth having an
{{AbstractContainerStoreUpgraderAndRecoverer}} that would encapsulate the
{{StoreUpgraderPhase}} upgraders and the {{register()}} function. The register
could/should validate some properties of the registered upgraders like do they
not override each other, does every upgrader with a given sourceVersion (except
for 0.0) have a upgrader with a matching targetVersion, are sourceVersion and
targetVersion distinct, is targetVersion > SourceVersion, ...
> [Java Broker] Upgrade of configuration from model version 3 fails
> -----------------------------------------------------------------
>
> Key: QPID-7548
> URL: https://issues.apache.org/jira/browse/QPID-7548
> Project: Qpid
> Issue Type: Bug
> Components: Java Broker
> Affects Versions: qpid-java-6.1
> Reporter: Alex Rudyy
> Assignee: Lorenz Quack
> Fix For: qpid-java-6.1.1
>
> Attachments:
> 0001-QPID-7548-Java-Broker-Fix-upgrade-from-model-version.patch,
> 0002-QPID-7548-Remove-responsibility-to-call-next-upgrade.patch
>
>
> Broker fails to upgrade configuration v3 as it cannot delete RMI and JMX
> ports. The following exception is reported on startup
> {noformat}
> 12:08:29.756 [main] INFO o.a.q.s.store.GenericStoreUpgrader - Broker store
> has model version 3.0. Number of record(s) 31
> 12:08:29.821 [main] ERROR org.apache.qpid.server.Broker - Exception during
> startup
> java.lang.IllegalArgumentException: Cannot convert '[RMI]' into a
> java.util.Set<org.apache.qpid.server.model.Protocol> for attribute protocols
> (No enum constant org.apache.qpid.se
> ver.model.Protocol.RMI)
> at
> org.apache.qpid.server.model.ConfiguredAutomatedAttribute.convert(ConfiguredAutomatedAttribute.java:252)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.port.PortFactory.getProtocolType(PortFactory.java:69)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.port.PortFactory.getPortFactory(PortFactory.java:142)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.port.PortFactory.recover(PortFactory.java:127)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.ConfiguredObjectFactoryImpl.recover(ConfiguredObjectFactoryImpl.java:104)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.store.GenericRecoverer.resolveObjects(GenericRecoverer.java:183)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.store.GenericRecoverer.performRecover(GenericRecoverer.java:91)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.store.GenericRecoverer.access$000(GenericRecoverer.java:41)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.store.GenericRecoverer$1.execute(GenericRecoverer.java:59)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.store.GenericRecoverer$1.execute(GenericRecoverer.java:55)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.configuration.updater.TaskExecutorImpl$TaskLoggingWrapper.execute(TaskExecutorImpl.java:240)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.configuration.updater.TaskExecutorImpl.submitWrappedTask(TaskExecutorImpl.java:157)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.configuration.updater.TaskExecutorImpl.run(TaskExecutorImpl.java:182)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.store.GenericRecoverer.recover(GenericRecoverer.java:54)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.store.BrokerStoreUpgraderAndRecoverer.upgradeAndRecover(BrokerStoreUpgraderAndRecoverer.java:919)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.store.BrokerStoreUpgraderAndRecoverer.upgradeAndRecover(BrokerStoreUpgraderAndRecoverer.java:48)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.AbstractSystemConfig.initateStoreAndRecovery(AbstractSystemConfig.java:304)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.AbstractSystemConfig.activate(AbstractSystemConfig.java:233)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> ~[na:1.8.0_74]
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> ~[na:1.8.0_74]
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> ~[na:1.8.0_74]
> at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_74]
> at
> org.apache.qpid.server.model.AbstractConfiguredObject.attainState(AbstractConfiguredObject.java:1482)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.AbstractConfiguredObject.attainState(AbstractConfiguredObject.java:1461)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.AbstractConfiguredObject$8.onSuccess(AbstractConfiguredObject.java:1035)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.AbstractConfiguredObject$8.onSuccess(AbstractConfiguredObject.java:1029)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.AbstractConfiguredObject$22$1.run(AbstractConfiguredObject.java:2609)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.AbstractConfiguredObject$22$1.run(AbstractConfiguredObject.java:2605)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at java.security.AccessController.doPrivileged(Native Method)
> ~[na:1.8.0_74]
> at javax.security.auth.Subject.doAs(Subject.java:360) ~[na:1.8.0_74]
> at
> org.apache.qpid.server.model.AbstractConfiguredObject$22.onSuccess(AbstractConfiguredObject.java:2604)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)
> ~[guava-18.0.jar:na]
> at
> org.apache.qpid.server.configuration.updater.TaskExecutorImpl$ImmediateIfSameThreadExecutor.execute(TaskExecutorImpl.java:392)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.configuration.updater.TaskExecutorImpl.execute(TaskExecutorImpl.java:175)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)
> ~[guava-18.0.jar:na]
> at
> com.google.common.util.concurrent.ExecutionList.add(ExecutionList.java:101)
> ~[guava-18.0.jar:na]
> at
> com.google.common.util.concurrent.AbstractFuture.addListener(AbstractFuture.java:170)
> ~[guava-18.0.jar:na]
> at
> com.google.common.util.concurrent.Futures.addCallback(Futures.java:1322)
> ~[guava-18.0.jar:na]
> at
> org.apache.qpid.server.model.AbstractConfiguredObject.addFutureCallback(AbstractConfiguredObject.java:2599)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.AbstractConfiguredObject.doAttainState(AbstractConfiguredObject.java:1028)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.AbstractConfiguredObject.access$300(AbstractConfiguredObject.java:91)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.AbstractConfiguredObject$1.execute(AbstractConfiguredObject.java:584)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.AbstractConfiguredObject$1.execute(AbstractConfiguredObject.java:571)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.AbstractConfiguredObject$2.execute(AbstractConfiguredObject.java:632)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.AbstractConfiguredObject$2.execute(AbstractConfiguredObject.java:625)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.configuration.updater.TaskExecutorImpl$TaskLoggingWrapper.execute(TaskExecutorImpl.java:240)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.configuration.updater.TaskExecutorImpl$CallableWrapper$1.run(TaskExecutorImpl.java:312)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at java.security.AccessController.doPrivileged(Native Method)
> ~[na:1.8.0_74]
> at javax.security.auth.Subject.doAs(Subject.java:360) ~[na:1.8.0_74]
> at
> org.apache.qpid.server.configuration.updater.TaskExecutorImpl$CallableWrapper.call(TaskExecutorImpl.java:305)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> ~[na:1.8.0_74]
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> ~[na:1.8.0_74]
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> ~[na:1.8.0_74]
> at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_74]
> Caused by: java.lang.IllegalArgumentException: No enum constant
> org.apache.qpid.server.model.Protocol.RMI
> at java.lang.Enum.valueOf(Enum.java:238) ~[na:1.8.0_74]
> at
> org.apache.qpid.server.model.AttributeValueConverter$EnumConverter.convert(AttributeValueConverter.java:1038)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.AttributeValueConverter$EnumConverter.convert(AttributeValueConverter.java:1016)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.AttributeValueConverter$GenericSetConverter.convert(AttributeValueConverter.java:876)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.AttributeValueConverter$GenericSetConverter.convert(AttributeValueConverter.java:857)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> at
> org.apache.qpid.server.model.ConfiguredAutomatedAttribute.convert(ConfiguredAutomatedAttribute.java:245)
> ~[qpid-broker-core-6.1.0.jar:6.1.0]
> ... 53 common frames omitted
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]