[openstack-dev] [nova][neutron] VIF event callbacks implementation

Dan Smith dms at danplanet.com
Tue Apr 29 19:23:51 UTC 2014


> Aside from creating a sort of cyclic dependency between the two, it 
> is my understanding that Neutron is meant to be a "stand alone" 
> service capable of being consumed by other compute managers (i.e. 
> oVirt). This breaks that paradigm.

<snip>

> So my question is: Why use API and not RPC?
> 
> I saw that there is already a notification system in Neutron that 
> notifies on each port update (among other things) which are
> currently consumed by Ceilometer. Why not have Nova use those
> notifications to decide that a VIF got plugged correctly, floating
> IPs changed, and so on?

To your point above, having either service sit on the other's RPC bus
ties them together far closer than having them consume each other's REST
API, IMHO. Further, Nova's internal RPC mechanics are controlled pretty
tightly for upgrade compatibility and I don't think I'd want another
service sitting on that bus that we have to worry about when we're
coordinating a change across releases (which we do quite often). We
consume Neutron's services via the REST API because that's what is
exposed externally and guaranteed to be stable -- the same goes for
Neutron consuming anything from Nova.

> I believe the rationale here was that nova's API interface is only 
> currently exposed via a rest API over http so leveraging this 
> existing framework seemed like a good place to do it. In addition, 
> there didn't seem to be an obvious advantage to using RPC rather
> than the rest interface. Lastly, this new interface that nova exposes
> is generic and not neutron specific as it can be used for other type
> of notifications that things want to send nova. I added Dan Smith to
> CC to keep me honest here as I believe this was the rationale.

Yeah, we've already got plans in place to get Cinder to use the
interface to provide us more detailed information and eliminate some
polling. We also have a very purpose-built notification scheme between
nova and cinder that facilitates a callback for a very specific
scenario. I'd like to get that converted to use this mechanism as well,
so that it becomes "the way you tell nova that things it's waiting for
have happened."

--Dan



More information about the OpenStack-dev mailing list