Skip to content

Commit

Permalink
Accept any scheduler driver entrypoint
Browse files Browse the repository at this point in the history
We broke the possibility in Ocata with Icdcf839b6d28893694bfa1355e9dbe8dbb5ea8c3
to use other scheduler drivers but the ones we provided in tree.

Unfortunately, that was an incidental change without any communication.

Removing the choices kwarg will allow operators to run their own scheduler driver.
Whether Nova would stop supporting custom drivers would require a totally separate
change which would clearly communicate thru a deprecation notice but that is not
the intent for that bugfix, which aims only to bring back the capability.

Change-Id: I346881bc3bc48794b139cc471be1de11c49b8ee3
Closes-Bug: #1704788
  • Loading branch information
sbauza authored and mriedem committed Aug 1, 2017
1 parent 008bc0b commit 1e5c7b5
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 12 deletions.
31 changes: 19 additions & 12 deletions nova/conf/scheduler.py
Expand Up @@ -34,25 +34,32 @@
"""),
cfg.StrOpt("driver",
default="filter_scheduler",
choices=("filter_scheduler", "caching_scheduler",
"chance_scheduler", "fake_scheduler"),
deprecated_name="scheduler_driver",
deprecated_group="DEFAULT",
help="""
The class of the driver used by the scheduler.
The class of the driver used by the scheduler. This should be chosen from one
of the entrypoints under the namespace 'nova.scheduler.driver' of file
'setup.cfg'. If nothing is specified in this option, the 'filter_scheduler' is
used.
The options are chosen from the entry points under the namespace
'nova.scheduler.driver' in 'setup.cfg'.
Other options are:
* 'caching_scheduler' which aggressively caches the system state for better
individual scheduler performance at the risk of more retries when running
multiple schedulers.
* 'chance_scheduler' which simply picks a host at random.
* 'fake_scheduler' which is used for testing.
Possible values:
* A string, where the string corresponds to the class name of a scheduler
driver. There are a number of options available:
** 'caching_scheduler', which aggressively caches the system state for better
individual scheduler performance at the risk of more retries when running
multiple schedulers
** 'chance_scheduler', which simply picks a host at random
** 'fake_scheduler', which is used for testing
* Any of the drivers included in Nova:
** filter_scheduler
** caching_scheduler
** chance_scheduler
** fake_scheduler
* You may also set this to the entry point name of a custom scheduler driver,
but you will be responsible for creating and maintaining it in your setup.cfg
file.
"""),
cfg.IntOpt("periodic_task_interval",
default=60,
Expand Down
10 changes: 10 additions & 0 deletions nova/tests/unit/scheduler/test_scheduler.py
Expand Up @@ -67,6 +67,16 @@ def test_init_using_caching_schedulerdriver(self,
driver = self.manager_cls().driver
self.assertIsInstance(driver, caching_scheduler.CachingScheduler)

@mock.patch.object(host_manager.HostManager, '_init_instance_info')
@mock.patch.object(host_manager.HostManager, '_init_aggregates')
def test_init_nonexist_schedulerdriver(self,
mock_init_agg,
mock_init_inst):
self.flags(driver='nonexist_scheduler', group='scheduler')
# The entry point has to be defined in setup.cfg and nova-scheduler has
# to be deployed again before using a custom value.
self.assertRaises(RuntimeError, self.manager_cls)


class SchedulerManagerTestCase(test.NoDBTestCase):
"""Test case for scheduler manager."""
Expand Down
5 changes: 5 additions & 0 deletions releasenotes/notes/bug-1704788-490797827bae9142.yaml
@@ -0,0 +1,5 @@
---
fixes:
- Correctly allow the use of a custom scheduler driver by using the name of
the custom driver entry point in the ``[scheduler]/driver`` config option.
You must also update the entry point in ``setup.cfg``.

0 comments on commit 1e5c7b5

Please sign in to comment.