Build API calls are not compatable with Abstract scheduler subclasses

Bug #844160 reported by Chris Behrens
10
This bug affects 2 people
Affects Status Importance Assigned to Milestone
OpenStack Compute (nova)
Fix Released
Medium
Chris Behrens

Bug Description

compute api's create() creates a DB entry locally. The abstract scheduler will also create a DB entry locally. The latter one is what is used and will go active, since it casts this one to compute for building. The former entry is stuck in 'BUILD' status.

create() really needs to work with schedulers like LeastCost and work with or without zones.

Related branches

Chris Behrens (cbehrens)
Changed in nova:
assignee: nobody → Chris Behrens (cbehrens)
status: New → In Progress
Thierry Carrez (ttx)
Changed in nova:
importance: Undecided → Medium
Revision history for this message
Openstack Gerrit (openstack-gerrit) wrote : A change has been merged to openstack/nova

Reviewed: https://review.openstack.org/640
Committed: http://github.com/openstack/nova/commit/0fab78825ef06310926181f6f97d377058b56b97
Submitter: Jenkins
Branch: master

 status fixcommitted
 done

commit 0fab78825ef06310926181f6f97d377058b56b97
Author: Chris Behrens <email address hidden>
Date: Sat Sep 24 23:49:36 2011 +0000

    compute_api create*() and schedulers refactoring

    Fixes bug 844160

    Makes the servers create API call work with all schedulers, removes
    'zone boot', and folds create_instance_helper back into servers
    controller.

    Notable changes:
    1) compute API's create_at_all_once has been removed. It was only used
    by zone boot.
    2) compute API's create() no longer creates Instance DB entries. The
    schedulers now do this. This makes sense, as only the schedulers will
    know where the instances will be placed. They could be placed locally or
    in a child zone. However, this comes at a cost. compute_api.create() now
    does a 'call' to the scheduler instead of a 'cast' in most cases (* see
    below). This is so it can receive the instance ID(s) that were created
    back from the scheduler. Ultimately, we probably need to figure out a
    way to generate UUIDs before scheduling and return only the information
    we know about an instance before it is actually scheduled and created.
    We could then revert this back to a cast. (Or maybe we always return a
    reservation ID instead of an instance.)
    3) scheduler* calls do not return a host now. They return a value
    that'll be returned if the caller does an rpc.call(). The casts to
    hosts are now done by the scheduler drivers themselves.
    4) There's been an undocumented feature in the OS API to allow multiple
    instances to be built. I've kept it.
    5) If compute_api.create() is creating multiple instances, only a single
    call is made to the scheduler, vs the old way of sending many casts. All
    schedulers now check how many instances have been requested.
    6) I've added an undocumented option 'return_reservation_id' when
    building. If set to True, only a reservation ID is returned to the API
    caller, not the instance. This essentially gives you the old 'nova
    zone-boot' functionality.
    7) It was requested I create a stub for a zones extension, so you'll see
    the empty extension in here. We'll move some code to it later.
    8) Fixes an unrelated bug that merged into trunk recently where zones DB
    calls were not being done with admin context always, anymore.
    9) Scheduler calls were always done with admin context when they should
    elevate only when needed.
    10) Moved stub_network flag so individual tests can run again.

    * Case #6 above doesn't wait for the scheduler response with instance
    IDs. It does a 'cast' instead.

    Change-Id: Ic040780a2e86d7330e225f14056dadbaa9fb3c7e

Changed in nova:
status: In Progress → Fix Committed
Thierry Carrez (ttx)
Changed in nova:
milestone: none → essex-1
Thierry Carrez (ttx)
Changed in nova:
status: Fix Committed → Fix Released
Thierry Carrez (ttx)
Changed in nova:
milestone: essex-1 → 2012.1
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.