On 2 July 2015 at 21:50, Rob Godfrey <[email protected]> wrote:
> On 2 July 2015 at 21:29, Helen Kwong <[email protected]> wrote: > > Hi Rob, > > > > Thanks for looking into this. Is there any time estimate on when the fix > > will be available? We're trying to see if we should put together some > > workaround in how we create the consumers to avoid the issue. > > > > We should have a fix available soon - we'll probably make a patch file > available for 0.32... the fix for trunk will be a bit different. > There is a patch attached to JIRA QPID-6619 (QPID-6619_0.32.patch) that will apply to the 0.32 branch that will resolve the race. After you have run a command like: cd 0.32/qpid/java ; patch -p0 < ~/Downloads/QPID-6619_0.32.patch; mvn package -DskipTests there will be a new distributable at the following location. broker/target/qpid-broker-0.32-bin.tar.gz The tests will pass with the exception of the SSL tests. The self signed cert expired used by the tests on the branch, a few months ago, causing this. The defect is also resolved on trunk. Any feedback appreciated. svn location: https://svn.apache.org/repos/asf/qpid/branches/0.32/ build instructions: https://cwiki.apache.org/confluence/display/qpid/Qpid+Java+Build+How+To patch: https://issues.apache.org/jira/secure/attachment/12744711/QPID-6619_0.32.patch > > Also, is there any way for the metadata of durable queues created by a > 0.16 > > broker to be used by a 0.32 broker? We're also thinking if there is a way > > to do this, then when we upgrade our broker this bug won't be an issue. > > Though from a quick test I did it seems the new broker would not use the > > old broker's queue metadata automatically, even if they use the same work > > directory. > > > > It may be possible to extract the config from your old broker so that > it can be used by 0.32 - I'll need to look into how things worked in > 0.16 and the steps needed to get that all the way to 0.32. > > Hope this helps, > > Rob > > > Thanks, > > Helen > > > > On Tue, Jun 30, 2015 at 4:08 PM, Rob Godfrey <[email protected]> > > wrote: > > > >> Hi Helen, > >> > >> yes - they both look like aspects of the same race condition whereby > >> AMQP operations are seeing queue objects before they have been > >> completely initialised (in particular before the onOpen() method of > >> the queue has completed). > >> > >> I'm about to go to sleep here, and am in meetings most of tmr, so I > >> may not get a chance to dig deeper until later this week - however > >> we'll look to provide some sort of patch to fix this ASAP though. > >> > >> Apologies, > >> Rob > >> > >> On 1 July 2015 at 00:33, Helen Kwong <[email protected]> wrote: > >> > Hi Qpid experts, > >> > > >> > I am testing using Java broker 0.32 with client 0.16, and have run > into > >> > NPEs when I create consumers to queues in an initialization step to > force > >> > the queues to be created. I'm not able to reproduce this reliably, and > >> it's > >> > possible that this is triggered by some race condition, since we can > have > >> > multiple threads trying to register consumers to these new queues at > the > >> > same time. Any idea what is causing this? (We used to use the 0.16 > broker > >> > with the same initialization and didn't run into this.) > >> > > >> > Stacktrace I've seen: > >> > > >> > qpidbrkr`20150630085024.987`Exception processing command > >> > java.lang.NullPointerException > >> > at > >> > > >> > org.apache.qpid.server.queue.AbstractQueue.addConsumer(AbstractQueue.java:802) > >> > at > >> > > >> > org.apache.qpid.server.queue.AbstractQueue.addConsumer(AbstractQueue.java:100) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerSessionDelegate.messageSubscribe(ServerSessionDelegate.java:327) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerSessionDelegate.messageSubscribe(ServerSessionDelegate.java:82) > >> > at > >> > > >> > org.apache.qpid.transport.MessageSubscribe.dispatch(MessageSubscribe.java:110) > >> > at > >> > > >> > org.apache.qpid.transport.SessionDelegate.command(SessionDelegate.java:55) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerSessionDelegate.command(ServerSessionDelegate.java:99) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerSessionDelegate.command(ServerSessionDelegate.java:82) > >> > at org.apache.qpid.transport.Method.delegate(Method.java:159) > >> > at > org.apache.qpid.transport.Session.received(Session.java:596) > >> > at > >> > org.apache.qpid.transport.Connection.dispatch(Connection.java:452) > >> > at > >> > > >> > org.apache.qpid.transport.ConnectionDelegate.handle(ConnectionDelegate.java:64) > >> > at > >> > > >> > org.apache.qpid.transport.ConnectionDelegate.handle(ConnectionDelegate.java:40) > >> > at > >> > > >> > org.apache.qpid.transport.MethodDelegate.messageSubscribe(MethodDelegate.java:131) > >> > at > >> > > >> > org.apache.qpid.transport.MessageSubscribe.dispatch(MessageSubscribe.java:110) > >> > at > >> > > >> > org.apache.qpid.transport.ConnectionDelegate.command(ConnectionDelegate.java:54) > >> > at > >> > > >> > org.apache.qpid.transport.ConnectionDelegate.command(ConnectionDelegate.java:40) > >> > at org.apache.qpid.transport.Method.delegate(Method.java:159) > >> > at > >> > org.apache.qpid.transport.Connection.received(Connection.java:405) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerConnection.access$001(ServerConnection.java:64) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerConnection$1.run(ServerConnection.java:316) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerConnection$1.run(ServerConnection.java:312) > >> > at java.security.AccessController.doPrivileged(Native Method) > >> > at javax.security.auth.Subject.doAs(Subject.java:356) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerConnection.received(ServerConnection.java:311) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerConnection.received(ServerConnection.java:64) > >> > at > >> > org.apache.qpid.transport.network.Assembler.emit(Assembler.java:97) > >> > at > >> > > org.apache.qpid.transport.network.Assembler.assemble(Assembler.java:198) > >> > at > >> > org.apache.qpid.transport.network.Assembler.frame(Assembler.java:131) > >> > at > >> org.apache.qpid.transport.network.Frame.delegate(Frame.java:128) > >> > at > >> > > org.apache.qpid.transport.network.Assembler.received(Assembler.java:102) > >> > at > >> > > org.apache.qpid.transport.network.Assembler.received(Assembler.java:44) > >> > at > >> > > >> > org.apache.qpid.transport.network.InputHandler.next(InputHandler.java:199) > >> > at > >> > > >> > org.apache.qpid.transport.network.InputHandler.received(InputHandler.java:114) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ProtocolEngine_0_10.received(ProtocolEngine_0_10.java:179) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ProtocolEngine_0_10.received(ProtocolEngine_0_10.java:43) > >> > at > >> > > >> > org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:153) > >> > at > >> > > >> > org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:51) > >> > at > >> > > org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:161) > >> > at java.lang.Thread.run(Thread.java:745) > >> > > >> > > >> > Another that I've seen that seems related: > >> > > >> > qpidbrkr`20150630085024.954`Exception processing command > >> > java.lang.NullPointerException > >> > at > >> > > >> > org.apache.qpid.server.queue.AbstractQueue.getAvailableAttributes(AbstractQueue.java:635) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerSessionDelegate.queueQuery(ServerSessionDelegate.java:1533) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerSessionDelegate.queueQuery(ServerSessionDelegate.java:82) > >> > at > >> org.apache.qpid.transport.QueueQuery.dispatch(QueueQuery.java:87) > >> > at > >> > > >> > org.apache.qpid.transport.SessionDelegate.command(SessionDelegate.java:55) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerSessionDelegate.command(ServerSessionDelegate.java:99) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerSessionDelegate.command(ServerSessionDelegate.java:82) > >> > at org.apache.qpid.transport.Method.delegate(Method.java:159) > >> > at > org.apache.qpid.transport.Session.received(Session.java:596) > >> > at > >> > org.apache.qpid.transport.Connection.dispatch(Connection.java:452) > >> > at > >> > > >> > org.apache.qpid.transport.ConnectionDelegate.handle(ConnectionDelegate.java:64) > >> > at > >> > > >> > org.apache.qpid.transport.ConnectionDelegate.handle(ConnectionDelegate.java:40) > >> > at > >> > > >> > org.apache.qpid.transport.MethodDelegate.queueQuery(MethodDelegate.java:215) > >> > at > >> org.apache.qpid.transport.QueueQuery.dispatch(QueueQuery.java:87) > >> > at > >> > > >> > org.apache.qpid.transport.ConnectionDelegate.command(ConnectionDelegate.java:54) > >> > at > >> > > >> > org.apache.qpid.transport.ConnectionDelegate.command(ConnectionDelegate.java:40) > >> > at org.apache.qpid.transport.Method.delegate(Method.java:159) > >> > at > >> > org.apache.qpid.transport.Connection.received(Connection.java:405) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerConnection.access$001(ServerConnection.java:64) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerConnection$1.run(ServerConnection.java:316) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerConnection$1.run(ServerConnection.java:312) > >> > at java.security.AccessController.doPrivileged(Native Method) > >> > at javax.security.auth.Subject.doAs(Subject.java:356) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerConnection.received(ServerConnection.java:311) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ServerConnection.received(ServerConnection.java:64) > >> > at > >> > org.apache.qpid.transport.network.Assembler.emit(Assembler.java:97) > >> > at > >> > > org.apache.qpid.transport.network.Assembler.assemble(Assembler.java:198) > >> > at > >> > org.apache.qpid.transport.network.Assembler.frame(Assembler.java:131) > >> > at > >> org.apache.qpid.transport.network.Frame.delegate(Frame.java:128) > >> > at > >> > > org.apache.qpid.transport.network.Assembler.received(Assembler.java:102) > >> > at > >> > > org.apache.qpid.transport.network.Assembler.received(Assembler.java:44) > >> > at > >> > > >> > org.apache.qpid.transport.network.InputHandler.next(InputHandler.java:199) > >> > at > >> > > >> > org.apache.qpid.transport.network.InputHandler.received(InputHandler.java:114) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ProtocolEngine_0_10.received(ProtocolEngine_0_10.java:179) > >> > at > >> > > >> > org.apache.qpid.server.protocol.v0_10.ProtocolEngine_0_10.received(ProtocolEngine_0_10.java:43) > >> > at > >> > > >> > org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:153) > >> > at > >> > > >> > org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:51) > >> > at > >> > > org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:161) > >> > at java.lang.Thread.run(Thread.java:745) > >> > > >> > > >> > Thanks! > >> > > >> > Helen > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: [email protected] > >> For additional commands, e-mail: [email protected] > >> > >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > >
