[openstack-dev] TransportURL and virtualhost/exchnage (was Re: [Oslo] Layering olso.messaging usage of config)

Gordon Sim gsim at redhat.com
Tue Dec 10 13:02:33 UTC 2013


Hi Mark,

Thanks for the response! Some further followup inline...

On 12/09/2013 09:53 PM, Mark McLoughlin wrote:
> It's not a completely unreasonable approach to take, but my thinking was
> that a transport URL connects you to a conduit which multiple
> applications could be sharing so you need the application to specify its
> own application namespace.

I agree with the general picture, I was just wondering whether the 
application is best placed to specify its own namespace.

> e.g. you can have 'scheduler' topics for both Nova and Cinder, and you
> need each application to specify its exchange whereas the administrator
> is in full control of the transport URL and doesn't need to worry about
> application namespacing on the transport.

I can see the value in simplifying things for the administrator by default.

> There are three ways the exchange appears in the API:
>
>    1) A way for an application to set up the default exchange it
>       operates in:
>
>           messaging.set_transport_defaults(control_exchange='nova')
>
>       http://docs.openstack.org/developer/oslo.messaging/transport.html#oslo.messaging.set_transport_defaults
>
>    2) The server can explicitly say what exchange its listening on:
>
>           target = messaging.Target(exchange='nova',
>                                     topic='scheduler',
>                                     server='myhost')
>           server = messaging.get_rpc_server(transport, target, endpoints)
>
>       http://docs.openstack.org/developer/oslo.messaging/server.html#oslo.messaging.get_rpc_server
>
>    3) The client can explicitly say what exchange to connect to:
>
>           target = messaging.Target(exchange='nova',
>                                     topic='scheduler')
>           client = messaging.RPCClient(transport, target)
>
>       http://docs.openstack.org/developer/oslo.messaging/rpcclient.html#oslo.messaging.RPCClient
>
> But also the admin can override the default exchange so that e.g. you
> could put two instances of the application on the same transport, but
> with different exchanges.

I guess I'm saying (thinking aloud?) that if you have this ability (and 
indeed this need), then why not take the responsibility out of the 
application altogether?

Where an application chooses the exchange itself, is that usually 
hardcoded? or would that also be a configuration item, albeit of the 
application and not the transport? I assume the override applies on to 
item (1) above?

> Now, in saying all that, we know that fanout topics of the same name
> will conflict even if the exchange name is different:
>
>    https://bugs.launchpad.net/oslo.messaging/+bug/1173552
>
> So that means the API doesn't work quite as intended yet, but I think
> the idea makes sense.
>
> I'm guessing you have a concern about how transports might implement
> this application namespacing? Could you elaborate if so?

Not really, though the mechanisms available may vary from one transport 
to another. I don't really have any real concerns with things as they are.

My motivation, if that is the right word, was really just around 
simplicity. I was originally confused by what appeared to be multiple 
different ways to disambiguate names and thought this suggestion might 
simplify things overall a little. However as you point out it make it 
less simple for the administrator.

--Gordon





More information about the OpenStack-dev mailing list