rpc-api-review: topic names can conflict across exchanges
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
oslo.messaging |
Won't Fix
|
High
|
Unassigned |
Bug Description
On the face of it, it looks like if each service chooses a different rpc_control_
The most obvious example is that nova and cinder should both be able to have completely unrelated 'scheduler' topics but, in fact, cinder's scheduler topic is named 'cinder-scheduler'
One problem seems to be that AMQP exchange names are scoped to the virtual host, but we're not prefixing per-topic fanout exchanges with rpc_control_
in impl_kombu:
class FanoutConsumer(
...
def __init__(self, ..., topic, ...):
queue_name = '%s_fanout_%s' % (topic, unique)
...
exchange = kombu.entity.
and impl_qpid:
class ConsumerBase(
...
def __init__(self, session, callback, node_name, node_opts,
...
class FanoutConsumer(
...
def __init__(self, ..., topic, ...):
...
{...},
{...})
the obvious fix here would seem to be to name the exchanges e.g. 'nova_scheduler
The difficult part is to make this switch while retaining backwards compatibility - e.g. by adding a consumer for the new fanout topic format in Havana then in I (when we know all consumers support the new name) we switch the producers to the new name and then in J (when we know no producers are using the old name) remove the old name
We also need to check that all our queue names are unique across services, since those too are scoped at the virtual host level - it seems like we're fine there, because you can see in the code above that we include a random uuid in the queue name
affects: | oslo → oslo.messaging |
Changed in oslo.messaging: | |
importance: | High → Low |
importance: | Low → High |
It's 4 years old, not sure we still have this issue.