[openstack-dev] [nova] Averting the Nova crisis by splitting out virt drivers

Daniel P. Berrange berrange at redhat.com
Fri Sep 5 10:22:28 UTC 2014


On Fri, Sep 05, 2014 at 07:31:50PM +0930, Christopher Yeoh wrote:
> On Thu, 4 Sep 2014 11:24:29 +0100
> "Daniel P. Berrange" <berrange at redhat.com> wrote:
> > 
> >  - A fairly significant amount of nova code would need to be
> >    considered semi-stable API. Certainly everything under nova/virt
> >    and any object which is passed in/out of the virt driver API.
> >    Changes to such APIs would have to be done in a backwards
> >    compatible manner, since it is no longer possible to lock-step
> >    change all the virt driver impls. In some ways I think this would
> >    be a good thing as it will encourage people to put more thought
> >    into the long term maintainability of nova internal code instead
> >    of relying on being able to rip it apart later, at will.
> > 
> >  - The nova/virt/driver.py class would need to be much better
> >    specified. All parameters / return values which are opaque dicts
> >    must be replaced with objects + attributes. Completion of the
> >    objectification work is mandatory, so there is cleaner separation
> >    between virt driver impls & the rest of Nova.
> 
> I think for this to work well with multiple repositories and drivers
> having different priorities over implementing changes in the API it
> would not just need to be semi-stable, but stable with versioning built
> in from the start to allow for backwards incompatible changes. And
> the interface would have to be very well documented including things
> such as what exceptions are allowed to be raised through the API.
> Hopefully this would be enforced through code as well. But as long as
> driver maintainers are willing to commit to this extra overhead I can
> see it working. 

With our primary REST or RPC APIs we're under quite strict rules about
what we can & can't change - almost impossible to remove an existing
API from the REST API for example. With the internal virt driver API
we would probably have a little more freedom. For example, I think
if we found an existing virt driver API that was insufficient for a
new bit of work, we could add a new API in parallel with it, give the
virt drivers 1 dev cycle to convert, and then permanently delete the
original virt driver API. So a combination of that kind of API
replacement,  versioning for some data structures/objects, and use of
the capabilties flags would probably be sufficient. That's what I mean
by semi-stable here - no need to maintain existing virt driver APIs
indefinitely - we can remove & replace them in reasonably short time
scales as long as we avoid any lock-step updates.

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|



More information about the OpenStack-dev mailing list