Build API calls are not compatable with Abstract scheduler subclasses
Bug #844160 reported by
Chris Behrens
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
lp:~cbehrens/nova/lp844160-build-works-with-zones
Rejected
for merging
into
lp:~hudson-openstack/nova/trunk
- Sandy Walsh (community): Needs Fixing
- Chris Behrens (community): Abstain
- Brian Waldon (community): Needs Information
-
Diff: 4592 lines (+1761/-1238)33 files modifieddoc/source/devref/distributed_scheduler.rst (+2/-0)
nova/api/ec2/cloud.py (+6/-4)
nova/api/openstack/__init__.py (+1/-2)
nova/api/openstack/contrib/createserverext.py (+1/-2)
nova/api/openstack/contrib/volumes.py (+2/-41)
nova/api/openstack/contrib/zones.py (+50/-0)
nova/api/openstack/create_instance_helper.py (+0/-602)
nova/api/openstack/servers.py (+581/-30)
nova/api/openstack/zones.py (+3/-35)
nova/compute/api.py (+111/-116)
nova/scheduler/abstract_scheduler.py (+32/-43)
nova/scheduler/api.py (+2/-2)
nova/scheduler/chance.py (+23/-2)
nova/scheduler/driver.py (+106/-9)
nova/scheduler/least_cost.py (+1/-2)
nova/scheduler/manager.py (+5/-19)
nova/scheduler/multi.py (+5/-3)
nova/scheduler/simple.py (+35/-39)
nova/scheduler/vsa.py (+13/-20)
nova/scheduler/zone.py (+23/-5)
nova/tests/api/openstack/contrib/test_createserverext.py (+8/-4)
nova/tests/api/openstack/contrib/test_volumes.py (+12/-2)
nova/tests/api/openstack/test_extensions.py (+1/-0)
nova/tests/api/openstack/test_server_actions.py (+2/-2)
nova/tests/api/openstack/test_servers.py (+158/-45)
nova/tests/integrated/api/client.py (+16/-3)
nova/tests/integrated/test_servers.py (+36/-0)
nova/tests/scheduler/test_abstract_scheduler.py (+58/-17)
nova/tests/scheduler/test_least_cost_scheduler.py (+1/-1)
nova/tests/scheduler/test_scheduler.py (+320/-167)
nova/tests/scheduler/test_vsa_scheduler.py (+14/-16)
nova/tests/test_compute.py (+116/-5)
nova/tests/test_quota.py (+17/-0)
Changed in nova: | |
assignee: | nobody → Chris Behrens (cbehrens) |
status: | New → In Progress |
Changed in nova: | |
importance: | Undecided → Medium |
Changed in nova: | |
milestone: | none → essex-1 |
Changed in nova: | |
status: | Fix Committed → Fix Released |
Changed in nova: | |
milestone: | essex-1 → 2012.1 |
To post a comment you must log in.
Reviewed: https:/ /review. openstack. org/640 github. com/openstack/ nova/commit/ 0fab78825ef0631 0926181f6f97d37 7058b56b97
Committed: http://
Submitter: Jenkins
Branch: master
status fixcommitted
done
commit 0fab78825ef0631 0926181f6f97d37 7058b56b97
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 instance_ helper back into servers
'zone boot', and folds create_
controller.
Notable changes: api.create( ) now api.create( ) is creating multiple instances, only a single reservation_ id' when
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_
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_
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_
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: Ic040780a2e86d7 330e225f14056da dbaa9fb3c7e