On restart of QPID broker, fanout no longer works
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Ceilometer |
Fix Released
|
High
|
Eoghan Glynn | ||
Havana |
Fix Released
|
High
|
Eoghan Glynn | ||
Cinder |
Fix Released
|
High
|
Flavio Percoco | ||
Havana |
Fix Released
|
High
|
Flavio Percoco | ||
OpenStack Compute (nova) |
Fix Released
|
High
|
Flavio Percoco | ||
Havana |
Fix Released
|
High
|
Flavio Percoco | ||
OpenStack Heat |
Fix Released
|
High
|
Steven Dake | ||
Havana |
Fix Released
|
High
|
Flavio Percoco | ||
OpenStack Identity (keystone) |
Fix Released
|
High
|
Alan Pevec | ||
Havana |
Fix Released
|
High
|
Alan Pevec | ||
neutron |
Fix Released
|
High
|
Flavio Percoco | ||
Havana |
Fix Released
|
High
|
Flavio Percoco | ||
oslo-incubator |
Fix Released
|
High
|
Mark McLoughlin | ||
Havana |
Fix Committed
|
High
|
Flavio Percoco | ||
oslo.messaging |
Fix Released
|
High
|
Ken Giusti |
Bug Description
When the QPID broker is restarted, RPC servers attempt to re-connect. This re-connection process is not done correctly for fanout subscriptions - two subscriptions are established to the same fanout address.
This problem is compounded by the fix to bug#1178375 https:/
With this bug fix, when topology version 2 is used, the reconnect attempt uses a malformed subscriber address.
For example, I have a simple RPC server script that attempts to service "my-topic". When it initially connects to the broker using topology-version 1, these are the subscriptions that are established:
(py27)[kgiusti@t530 work (master)]$ ./my-server.py --topology=1 --auto-delete server-02
Running server, name=server-02 exchange=
Using QPID topology version 1
Enable auto-delete
Recevr openstack/my-topic ; {"node": {"x-declare": {"auto-delete": true, "durable": true}, "type": "topic"}, "create": "always", "link": {"x-declare": {"auto-delete": true, "exclusive": false, "durable": false}, "durable": true, "name": "my-topic"}}
Recevr openstack/
Recevr my-topic_fanout ; {"node": {"x-declare": {"auto-delete": true, "durable": false, "type": "fanout"}, "type": "topic"}, "create": "always", "link": {"x-declare": {"auto-delete": true, "exclusive": true, "durable": false}, "durable": true, "name": "my-topic_
When I restart the qpid broker, the server reconnects using the following subscriptions
Recevr my-topic_fanout ; {"node": {"x-declare": {"auto-delete": true, "durable": false, "type": "fanout"}, "type": "topic"}, "create": "always", "link": {"x-declare": {"auto-delete": true, "exclusive": true, "durable": false}, "durable": true, "name": "my-topic_
Recevr my-topic_fanout ; {"node": {"x-declare": {"auto-delete": true, "durable": false, "type": "fanout"}, "type": "topic"}, "create": "always", "link": {"x-declare": {"auto-delete": true, "exclusive": true, "durable": false}, "durable": true, "name": "my-topic_
^^^^--- Note: subscribing twice to the same exclusive address! (Bad!)
Recevr openstack/
Recevr openstack/my-topic ; {"node": {"x-declare": {"auto-delete": true, "durable": true}, "type": "topic"}, "create": "always", "link": {"x-declare": {"auto-delete": true, "exclusive": false, "durable": false}, "durable": true, "name": "my-topic"}}
When using topology=2, the failure case is a bit different. On reconnect, the fanout addresses are lacking proper topic names:
Recevr amq.topic/
Recevr amq.topic/fanout/ ; {"link": {"x-declare": {"auto-delete": true, "exclusive": true}}}
Recevr amq.topic/fanout/ ; {"link": {"x-declare": {"auto-delete": true, "exclusive": true}}}
Recevr amq.topic/
Note again - two subscriptions to fanout, and 'my-topic' is missing (it should be after that trailing /)
FYI - my test RPC server and client can be accessed here: https:/
Changed in oslo.messaging: | |
importance: | Undecided → High |
Changed in oslo.messaging: | |
milestone: | none → icehouse-1 |
Changed in oslo.messaging: | |
status: | Fix Committed → Fix Released |
Changed in oslo: | |
milestone: | none → icehouse-1 |
status: | Fix Committed → Fix Released |
Changed in heat: | |
milestone: | none → icehouse-2 |
importance: | Undecided → High |
status: | New → Triaged |
Changed in heat: | |
assignee: | nobody → Steven Dake (sdake) |
Changed in ceilometer: | |
assignee: | nobody → Eoghan Glynn (eglynn) |
milestone: | none → icehouse-2 |
importance: | Undecided → High |
status: | New → In Progress |
Changed in nova: | |
assignee: | nobody → Flavio Percoco (flaper87) |
Changed in nova: | |
status: | New → In Progress |
importance: | Undecided → High |
milestone: | none → icehouse-2 |
Changed in cinder: | |
importance: | Undecided → High |
Changed in cinder: | |
milestone: | none → icehouse-2 |
Changed in neutron: | |
importance: | Undecided → High |
Changed in keystone: | |
assignee: | nobody → Alan Pevec (apevec) |
importance: | Undecided → High |
milestone: | none → icehouse-2 |
Changed in neutron: | |
milestone: | none → icehouse-2 |
tags: | removed: in-stable-havana |
Changed in keystone: | |
status: | Fix Committed → Fix Released |
Changed in heat: | |
status: | Fix Committed → Fix Released |
Changed in ceilometer: | |
status: | Fix Committed → Fix Released |
Changed in cinder: | |
status: | Fix Committed → Fix Released |
Changed in nova: | |
status: | Fix Committed → Fix Released |
Changed in neutron: | |
status: | Fix Committed → Fix Released |
Changed in oslo: | |
milestone: | icehouse-1 → 2014.1 |
Changed in keystone: | |
milestone: | icehouse-2 → 2014.1 |
Changed in oslo.messaging: | |
milestone: | icehouse-1 → 1.3.0 |
Changed in ceilometer: | |
milestone: | icehouse-2 → 2014.1 |
Changed in nova: | |
milestone: | icehouse-2 → 2014.1 |
Changed in cinder: | |
milestone: | icehouse-2 → 2014.1 |
Changed in heat: | |
milestone: | icehouse-2 → 2014.1 |
Changed in neutron: | |
milestone: | icehouse-2 → 2014.1 |
Fix proposed to branch: master /review. openstack. org/57700
Review: https:/