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

Alex Rudyy updated QPID-8236:
-----------------------------
    Description: 
The BDB HA Virtual Host Node group name, address or node name can be changed 
using management interfaces, for example REST API. However, the change of this 
attributes is not reflected in the underlying BDB JE infrastructure. In fact, 
the change of group name, address or node name is unsupported by BDB JE. The 
only way any of them can be changed is by resettingĀ  the group information 
using BDB JE utility {{DbResetRepGroup}} which resets the group to a single 
node. 

The Qpid Broker should not allow to change group name, address or node name  
attributes in BDB HA Virtual Host node via management API.

If group is changed, on next broker restart the impacted {{VHN}} fails to start 
with the following error logged into broker logs:
{noformat}
ERROR [qtp699327636-161] (o.a.q.s.m.p.f.ExceptionHandlingFilter) - Unexpected 
exception in servlet '/api/latest/virtualhostnode/node1':
java.lang.RuntimeException: Unexpected exception on environment creation
        at 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade.createEnvironmentInSeparateThread(ReplicatedEnvironmentFacade.java:1578)
        at 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade.createEnvironment(ReplicatedEnvironmentFacade.java:1526)
        at 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade.<init>(ReplicatedEnvironmentFacade.java:288)
        at 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacadeFactory.createEnvironmentFacade(ReplicatedEnvironmentFacadeFactory.java:130)
        at 
org.apache.qpid.server.store.berkeleydb.BDBConfigurationStore.init(BDBConfigurationStore.java:120)
        at 
org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNodeImpl.activate(BDBHAVirtualHostNodeImpl.java:338)
        at 
org.apache.qpid.server.virtualhostnode.AbstractVirtualHostNode.doActivate(AbstractVirtualHostNode.java:169)
        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.apache.qpid.server.model.AbstractConfiguredObject.attainState(AbstractConfiguredObject.java:1526)
        at 
org.apache.qpid.server.model.AbstractConfiguredObject.attainState(AbstractConfiguredObject.java:1505)
        at 
org.apache.qpid.server.model.AbstractConfiguredObject.attainStateIfOpenedOrReopenFailed(AbstractConfiguredObject.java:1489)
        at 
org.apache.qpid.server.model.AbstractConfiguredObject.access$1700(AbstractConfiguredObject.java:97)
        at 
org.apache.qpid.server.model.AbstractConfiguredObject$15.execute(AbstractConfiguredObject.java:1716)
        at 
org.apache.qpid.server.model.AbstractConfiguredObject$15.execute(AbstractConfiguredObject.java:1678)
        at 
org.apache.qpid.server.model.AbstractConfiguredObject$2.execute(AbstractConfiguredObject.java:639)
        at 
org.apache.qpid.server.model.AbstractConfiguredObject$2.execute(AbstractConfiguredObject.java:632)
        at 
org.apache.qpid.server.configuration.updater.TaskExecutorImpl$TaskLoggingWrapper.execute(TaskExecutorImpl.java:248)
        at 
org.apache.qpid.server.configuration.updater.TaskExecutorImpl$CallableWrapper$1.run(TaskExecutorImpl.java:320)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:360)
        at 
org.apache.qpid.server.configuration.updater.TaskExecutorImpl$CallableWrapper.call(TaskExecutorImpl.java:313)
        at 
com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:111)
        at 
com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:58)
        at 
com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:75)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at 
org.apache.qpid.server.bytebuffer.QpidByteBufferFactory.lambda$null$0(QpidByteBufferFactory.java:464)
        at java.lang.Thread.run(Thread.java:748)
Caused by: com.sleepycat.je.EnvironmentFailureException: (JE 7.4.5) The 
argument: ha2 does not match the expected group name: ha UNEXPECTED_STATE: 
Unexpected internal state, may have side effects.
        at 
com.sleepycat.je.EnvironmentFailureException.unexpectedState(EnvironmentFailureException.java:428)
        at com.sleepycat.je.rep.impl.RepGroupDB.fetchGroup(RepGroupDB.java:369)
        at com.sleepycat.je.rep.impl.RepGroupDB.getGroup(RepGroupDB.java:228)
        at com.sleepycat.je.rep.impl.RepGroupDB.getGroup(RepGroupDB.java:261)
        at 
com.sleepycat.je.rep.impl.node.RepNode.refreshCachedGroup(RepNode.java:928)
        at com.sleepycat.je.rep.impl.node.RepNode.findMaster(RepNode.java:1272)
        at com.sleepycat.je.rep.impl.node.RepNode.startup(RepNode.java:897)
        at com.sleepycat.je.rep.impl.node.RepNode.joinGroup(RepNode.java:2157)
        at com.sleepycat.je.rep.impl.RepImpl.joinGroup(RepImpl.java:610)
        at 
com.sleepycat.je.rep.ReplicatedEnvironment.joinGroup(ReplicatedEnvironment.java:560)
        at 
com.sleepycat.je.rep.ReplicatedEnvironment.<init>(ReplicatedEnvironment.java:621)
        at 
com.sleepycat.je.rep.ReplicatedEnvironment.<init>(ReplicatedEnvironment.java:466)
        at 
com.sleepycat.je.rep.ReplicatedEnvironment.<init>(ReplicatedEnvironment.java:540)
        at 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade.createEnvironment(ReplicatedEnvironmentFacade.java:1594)
        at 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade.access$1700(ReplicatedEnvironmentFacade.java:87)
        at 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade$14.call(ReplicatedEnvironmentFacade.java:1542)
        at 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade$14.call(ReplicatedEnvironmentFacade.java:1538)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        ... 1 common frames omitted

{noformat}

  was:
The group name of BDB HA Virtual Host Node can be changed using management 
interfaces, for example REST API. However, the change of group name is not 
reflected in the underlying BDB JE infrastructure. In fact, the change of group 
name is unsupported by BDB JE. The only way the group can be changed is by 
resettingĀ  the group information using BDB JE utility {{DbResetRepGroup}} which 
resets the group to a single node. 

The Qpid Broker should not allow to change group name attribute in BDB HA 
Virtual Host node via management API.

If group is changed, on next broker restart the impacted {{VHN}} fails to start 
with the following error logged into broker logs:
{noformat}
ERROR [qtp699327636-161] (o.a.q.s.m.p.f.ExceptionHandlingFilter) - Unexpected 
exception in servlet '/api/latest/virtualhostnode/node1':
java.lang.RuntimeException: Unexpected exception on environment creation
        at 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade.createEnvironmentInSeparateThread(ReplicatedEnvironmentFacade.java:1578)
        at 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade.createEnvironment(ReplicatedEnvironmentFacade.java:1526)
        at 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade.<init>(ReplicatedEnvironmentFacade.java:288)
        at 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacadeFactory.createEnvironmentFacade(ReplicatedEnvironmentFacadeFactory.java:130)
        at 
org.apache.qpid.server.store.berkeleydb.BDBConfigurationStore.init(BDBConfigurationStore.java:120)
        at 
org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNodeImpl.activate(BDBHAVirtualHostNodeImpl.java:338)
        at 
org.apache.qpid.server.virtualhostnode.AbstractVirtualHostNode.doActivate(AbstractVirtualHostNode.java:169)
        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.apache.qpid.server.model.AbstractConfiguredObject.attainState(AbstractConfiguredObject.java:1526)
        at 
org.apache.qpid.server.model.AbstractConfiguredObject.attainState(AbstractConfiguredObject.java:1505)
        at 
org.apache.qpid.server.model.AbstractConfiguredObject.attainStateIfOpenedOrReopenFailed(AbstractConfiguredObject.java:1489)
        at 
org.apache.qpid.server.model.AbstractConfiguredObject.access$1700(AbstractConfiguredObject.java:97)
        at 
org.apache.qpid.server.model.AbstractConfiguredObject$15.execute(AbstractConfiguredObject.java:1716)
        at 
org.apache.qpid.server.model.AbstractConfiguredObject$15.execute(AbstractConfiguredObject.java:1678)
        at 
org.apache.qpid.server.model.AbstractConfiguredObject$2.execute(AbstractConfiguredObject.java:639)
        at 
org.apache.qpid.server.model.AbstractConfiguredObject$2.execute(AbstractConfiguredObject.java:632)
        at 
org.apache.qpid.server.configuration.updater.TaskExecutorImpl$TaskLoggingWrapper.execute(TaskExecutorImpl.java:248)
        at 
org.apache.qpid.server.configuration.updater.TaskExecutorImpl$CallableWrapper$1.run(TaskExecutorImpl.java:320)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:360)
        at 
org.apache.qpid.server.configuration.updater.TaskExecutorImpl$CallableWrapper.call(TaskExecutorImpl.java:313)
        at 
com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:111)
        at 
com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:58)
        at 
com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:75)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at 
org.apache.qpid.server.bytebuffer.QpidByteBufferFactory.lambda$null$0(QpidByteBufferFactory.java:464)
        at java.lang.Thread.run(Thread.java:748)
Caused by: com.sleepycat.je.EnvironmentFailureException: (JE 7.4.5) The 
argument: ha2 does not match the expected group name: ha UNEXPECTED_STATE: 
Unexpected internal state, may have side effects.
        at 
com.sleepycat.je.EnvironmentFailureException.unexpectedState(EnvironmentFailureException.java:428)
        at com.sleepycat.je.rep.impl.RepGroupDB.fetchGroup(RepGroupDB.java:369)
        at com.sleepycat.je.rep.impl.RepGroupDB.getGroup(RepGroupDB.java:228)
        at com.sleepycat.je.rep.impl.RepGroupDB.getGroup(RepGroupDB.java:261)
        at 
com.sleepycat.je.rep.impl.node.RepNode.refreshCachedGroup(RepNode.java:928)
        at com.sleepycat.je.rep.impl.node.RepNode.findMaster(RepNode.java:1272)
        at com.sleepycat.je.rep.impl.node.RepNode.startup(RepNode.java:897)
        at com.sleepycat.je.rep.impl.node.RepNode.joinGroup(RepNode.java:2157)
        at com.sleepycat.je.rep.impl.RepImpl.joinGroup(RepImpl.java:610)
        at 
com.sleepycat.je.rep.ReplicatedEnvironment.joinGroup(ReplicatedEnvironment.java:560)
        at 
com.sleepycat.je.rep.ReplicatedEnvironment.<init>(ReplicatedEnvironment.java:621)
        at 
com.sleepycat.je.rep.ReplicatedEnvironment.<init>(ReplicatedEnvironment.java:466)
        at 
com.sleepycat.je.rep.ReplicatedEnvironment.<init>(ReplicatedEnvironment.java:540)
        at 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade.createEnvironment(ReplicatedEnvironmentFacade.java:1594)
        at 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade.access$1700(ReplicatedEnvironmentFacade.java:87)
        at 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade$14.call(ReplicatedEnvironmentFacade.java:1542)
        at 
org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade$14.call(ReplicatedEnvironmentFacade.java:1538)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        ... 1 common frames omitted

{noformat}


> [Broker-J] Changing of group name, address or node name in BDB HA virtual 
> host node should be disallowed 
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: QPID-8236
>                 URL: https://issues.apache.org/jira/browse/QPID-8236
>             Project: Qpid
>          Issue Type: Bug
>          Components: Broker-J
>    Affects Versions: qpid-java-6.1.6, 0.32, qpid-java-6.0.8, 
> qpid-java-broker-7.0.6
>            Reporter: Alex Rudyy
>            Priority: Major
>             Fix For: qpid-java-6.1.7, qpid-java-broker-7.1.0, 
> qpid-java-broker-7.0.7
>
>
> The BDB HA Virtual Host Node group name, address or node name can be changed 
> using management interfaces, for example REST API. However, the change of 
> this attributes is not reflected in the underlying BDB JE infrastructure. In 
> fact, the change of group name, address or node name is unsupported by BDB 
> JE. The only way any of them can be changed is by resettingĀ  the group 
> information using BDB JE utility {{DbResetRepGroup}} which resets the group 
> to a single node. 
> The Qpid Broker should not allow to change group name, address or node name  
> attributes in BDB HA Virtual Host node via management API.
> If group is changed, on next broker restart the impacted {{VHN}} fails to 
> start with the following error logged into broker logs:
> {noformat}
> ERROR [qtp699327636-161] (o.a.q.s.m.p.f.ExceptionHandlingFilter) - Unexpected 
> exception in servlet '/api/latest/virtualhostnode/node1':
> java.lang.RuntimeException: Unexpected exception on environment creation
>         at 
> org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade.createEnvironmentInSeparateThread(ReplicatedEnvironmentFacade.java:1578)
>         at 
> org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade.createEnvironment(ReplicatedEnvironmentFacade.java:1526)
>         at 
> org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade.<init>(ReplicatedEnvironmentFacade.java:288)
>         at 
> org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacadeFactory.createEnvironmentFacade(ReplicatedEnvironmentFacadeFactory.java:130)
>         at 
> org.apache.qpid.server.store.berkeleydb.BDBConfigurationStore.init(BDBConfigurationStore.java:120)
>         at 
> org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNodeImpl.activate(BDBHAVirtualHostNodeImpl.java:338)
>         at 
> org.apache.qpid.server.virtualhostnode.AbstractVirtualHostNode.doActivate(AbstractVirtualHostNode.java:169)
>         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.apache.qpid.server.model.AbstractConfiguredObject.attainState(AbstractConfiguredObject.java:1526)
>         at 
> org.apache.qpid.server.model.AbstractConfiguredObject.attainState(AbstractConfiguredObject.java:1505)
>         at 
> org.apache.qpid.server.model.AbstractConfiguredObject.attainStateIfOpenedOrReopenFailed(AbstractConfiguredObject.java:1489)
>         at 
> org.apache.qpid.server.model.AbstractConfiguredObject.access$1700(AbstractConfiguredObject.java:97)
>         at 
> org.apache.qpid.server.model.AbstractConfiguredObject$15.execute(AbstractConfiguredObject.java:1716)
>         at 
> org.apache.qpid.server.model.AbstractConfiguredObject$15.execute(AbstractConfiguredObject.java:1678)
>         at 
> org.apache.qpid.server.model.AbstractConfiguredObject$2.execute(AbstractConfiguredObject.java:639)
>         at 
> org.apache.qpid.server.model.AbstractConfiguredObject$2.execute(AbstractConfiguredObject.java:632)
>         at 
> org.apache.qpid.server.configuration.updater.TaskExecutorImpl$TaskLoggingWrapper.execute(TaskExecutorImpl.java:248)
>         at 
> org.apache.qpid.server.configuration.updater.TaskExecutorImpl$CallableWrapper$1.run(TaskExecutorImpl.java:320)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at javax.security.auth.Subject.doAs(Subject.java:360)
>         at 
> org.apache.qpid.server.configuration.updater.TaskExecutorImpl$CallableWrapper.call(TaskExecutorImpl.java:313)
>         at 
> com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:111)
>         at 
> com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:58)
>         at 
> com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:75)
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>         at 
> org.apache.qpid.server.bytebuffer.QpidByteBufferFactory.lambda$null$0(QpidByteBufferFactory.java:464)
>         at java.lang.Thread.run(Thread.java:748)
> Caused by: com.sleepycat.je.EnvironmentFailureException: (JE 7.4.5) The 
> argument: ha2 does not match the expected group name: ha UNEXPECTED_STATE: 
> Unexpected internal state, may have side effects.
>         at 
> com.sleepycat.je.EnvironmentFailureException.unexpectedState(EnvironmentFailureException.java:428)
>         at 
> com.sleepycat.je.rep.impl.RepGroupDB.fetchGroup(RepGroupDB.java:369)
>         at com.sleepycat.je.rep.impl.RepGroupDB.getGroup(RepGroupDB.java:228)
>         at com.sleepycat.je.rep.impl.RepGroupDB.getGroup(RepGroupDB.java:261)
>         at 
> com.sleepycat.je.rep.impl.node.RepNode.refreshCachedGroup(RepNode.java:928)
>         at 
> com.sleepycat.je.rep.impl.node.RepNode.findMaster(RepNode.java:1272)
>         at com.sleepycat.je.rep.impl.node.RepNode.startup(RepNode.java:897)
>         at com.sleepycat.je.rep.impl.node.RepNode.joinGroup(RepNode.java:2157)
>         at com.sleepycat.je.rep.impl.RepImpl.joinGroup(RepImpl.java:610)
>         at 
> com.sleepycat.je.rep.ReplicatedEnvironment.joinGroup(ReplicatedEnvironment.java:560)
>         at 
> com.sleepycat.je.rep.ReplicatedEnvironment.<init>(ReplicatedEnvironment.java:621)
>         at 
> com.sleepycat.je.rep.ReplicatedEnvironment.<init>(ReplicatedEnvironment.java:466)
>         at 
> com.sleepycat.je.rep.ReplicatedEnvironment.<init>(ReplicatedEnvironment.java:540)
>         at 
> org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade.createEnvironment(ReplicatedEnvironmentFacade.java:1594)
>         at 
> org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade.access$1700(ReplicatedEnvironmentFacade.java:87)
>         at 
> org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade$14.call(ReplicatedEnvironmentFacade.java:1542)
>         at 
> org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade$14.call(ReplicatedEnvironmentFacade.java:1538)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>         ... 1 common frames omitted
> {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to