Support filter backend based on operation type
This spec proposes to add attribute 'operation' to RequestSpec when asking scheduler plugins to perform filtering and weighing. Partial-Implements: bp support-mark-pool-sold-out Change-Id: I694ad2f8fab76b39ca1d9f4551102130faf5fc44
This commit is contained in:
parent
3111f1e96e
commit
a1af51fb82
173
specs/rocky/support-filter-backend-on-operation-type.rst
Normal file
173
specs/rocky/support-filter-backend-on-operation-type.rst
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
==============================================
|
||||||
|
Support filter backend based on operation type
|
||||||
|
==============================================
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/cinder/+spec/support-mark-pool-sold-out
|
||||||
|
|
||||||
|
This blueprint proposes to support filter backend based on operation type.
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
Now our filter and weigher plugins' algorithm are all designed based on
|
||||||
|
two factors, backend information and user input. But there could be
|
||||||
|
another factor that may also affect the scheduler result, operation
|
||||||
|
type. For instance, if administrators want to disable some of the
|
||||||
|
backend pool only for creating new volume operation, it's impossible
|
||||||
|
based on our current logic.
|
||||||
|
|
||||||
|
Use Cases
|
||||||
|
=========
|
||||||
|
|
||||||
|
We have discussed the concept of **sold out** during Rocky PTG `[1]`_ and
|
||||||
|
that word is more related to administrative operation, when most of an
|
||||||
|
specific pool's capacity has been consumed, administrators need the
|
||||||
|
functionality to mark the backend pool sold out, that is to say, it
|
||||||
|
will become unavailable for allocating new volumes, but end users still
|
||||||
|
can perform any operations on their existing resources (extend volume,
|
||||||
|
create snapshot).
|
||||||
|
|
||||||
|
Adding this feature in cinder will help cloud vendors write their
|
||||||
|
own plugins which can filter backend based on the operation type as well
|
||||||
|
as backend information.
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
New attribute ``operation`` will be added into ``RequestSpec`` object
|
||||||
|
and plugins can filter backend based on backend states as well as
|
||||||
|
request type:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
def backend_passes(self, backend_state, filter_properties):
|
||||||
|
#get request type from filter_properties
|
||||||
|
spec = filter_properties.get('request_spec', {})
|
||||||
|
request_type = spec.get('operation', None)
|
||||||
|
if request_type in ['create_volume']:
|
||||||
|
#check backend state when request is for creating new volume
|
||||||
|
return backend_state.free_capacity_gb > MIN_REQUIRED_GB
|
||||||
|
if request_type in ['extend_volume', 'retype_volume']
|
||||||
|
#perform other validation when request is ......
|
||||||
|
|
||||||
|
**NOTE**: This spec doesn't propose to update any plugin's logic, the code
|
||||||
|
above only intends to demonstrate how the ``operation`` can be used.
|
||||||
|
|
||||||
|
Based on our current features, the value of ``operation`` can be one of
|
||||||
|
these below:
|
||||||
|
|
||||||
|
1. create_group
|
||||||
|
2. manage_existing
|
||||||
|
3. extend_volume
|
||||||
|
4. create_volume
|
||||||
|
5. create_snapshot
|
||||||
|
6. migrate_volume
|
||||||
|
7. retype_volume
|
||||||
|
8. manage_existing_snapshot
|
||||||
|
|
||||||
|
And we will inject scheduler manager's corresponding methods in order to
|
||||||
|
append this info to ``RequestSpec`` automatically:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
@append_operation
|
||||||
|
def extend_volume(self, context, volume, new_size, reservations,
|
||||||
|
request_spec=None, filter_properties=None):
|
||||||
|
#other existing codes
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
The alternative is to implement a custom scheduler manager and configure it
|
||||||
|
in ``scheduler_manager`` and then use either a custom filter or the JSON
|
||||||
|
filter.
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
``RequestSpec`` will be updated to store this new attribute.
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Cinder-client impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Notifications impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Developers can develop new scheduler plugins based
|
||||||
|
on backend state as well as request type.
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee:
|
||||||
|
tommylikehu(tommylikehu@gmail.com)
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
* Add ``operation`` to those actions which will be scheduled
|
||||||
|
to scheduler to perform filtering and weighing logic.
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
* Add unit tests to cover this change.
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
* Update the developer document to mention the new attribute
|
||||||
|
will be delivered to scheduler plugins as well.
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
|
||||||
|
_`[1]`: https://etherpad.openstack.org/p/cinder-ptg-rocky-wednesday
|
||||||
|
_`[2]`: https://review.openstack.org/#/c/308869/
|
Loading…
Reference in New Issue
Block a user