Utilities and helper functions for all Cinder code.
This file is for utilities useful in all of Cinder, including cinder-manage, the api service, the scheduler, etc.
Code related to volume drivers and connecting to volumes should be placed in volume_utils instead.
Bases: object
Bases: str
Class that literrally does nothing.
We inherit from str in case it’s called with json.dumps.
Bases: object
Custom semaphore to workaround eventlet issues with multiprocessing.
Builds a string of elements joined by ‘or’.
Will join strings with the ‘or’ word and if a str_format is provided it will be used to format the resulted joined string. If there are no elements an empty string will be returned.
elements (String or iterable of strings.) – Elements we want to join.
str_format (String.) – String to use to format the response.
Create the various capacity factors of the a particular backend.
Based off of definition of terms cinder-specs/specs/queens/provisioning-improvements.html Description of factors calculated where units of gb are Gibibytes. reserved_capacity - The amount of space reserved from the total_capacity as reported by the backend. total_reserved_available_capacity - The total capacity minus reserved capacity total_available_capacity - The total capacity available to cinder calculated from total_reserved_available_capacity (for thick) OR for thin total_reserved_available_capacity max_over_subscription_ratio calculated_free_capacity - total_available_capacity - provisioned_capacity virtual_free_capacity - The calculated free capacity available to cinder to allocate new storage. For thin: calculated_free_capacity For thick: the reported free_capacity can be less than the calculated capacity, so we use free_capacity - reserved_capacity.
free_percent - the percentage of the virtual_free_capacity and total_available_capacity is left over provisioned_ratio - The ratio of provisioned storage to total_available_capacity
total_capacity (float) – The reported total capacity in the backend.
free_capacity (float) – The free space/capacity as reported by the backend.
provisioned_capacity (float) – as reported by backend or volume manager from allocated_capacity_gb
thin_provisioning_support (bool) – Is thin provisioning supported?
max_over_subscription_ratio (float) – as reported by the backend
reserved_percentage (int, 0-100) – the % amount to reserve as unavailable. 0-100
thin (bool) – calculate based on thin provisioning if enabled by thin_provisioning_support
A dictionary of all of the capacity factors.
dict
Calculate the virtual free capacity based on multiple factors.
total_capacity – total_capacity_gb of a host_state or pool.
free_capacity – free_capacity_gb of a host_state or pool.
provisioned_capacity – provisioned_capacity_gb of a host_state or pool.
thin_provisioning_support – thin_provisioning_support of a host_state or a pool.
max_over_subscription_ratio – max_over_subscription_ratio of a host_state or a pool
reserved_percentage – reserved_percentage of a host_state or a pool.
thin – whether volume to be provisioned is thin
the calculated virtual free capacity.
Checks that only one of the provided options is actually not-none.
Iterates over all the kwargs passed in and checks that only one of said arguments is not-none, if more than one is not-none then an exception will be raised with the names of those arguments who were not-none.
Checks that the volume metadata properties are valid.
Check the length of specified string.
value – the value of the string
name – the name of the string
min_length – the min_length of the string
max_length – the max_length of the string
Remove file locks used by Cinder.
This doesn’t take care of driver locks, those should be handled in driver’s delete_volume method.
Convert to native string.
Convert bytes and Unicode strings to native strings:
convert to bytes on Python 2: encode Unicode using encodeutils.safe_encode()
convert to Unicode on Python 3: decode bytes from UTF-8
Given a dict, return a sorted OrderedDict.
Convenience wrapper around oslo’s execute() method.
Get ‘major:minor’ number of block device.
Get the device’s ‘major:minor’ number of a block device to control I/O ratelimit of the specified path. If lookup_for_file is True and the path is a regular file, lookup a disk device which the file lies on and returns the result for the device.
This primarily exists to make unit testing easier.
This primarily exists to make unit testing easier.
Returns the file size.
Calls decorated method only if notifications are enabled.
This method gives you the most recently completed audit period.
Periods normally begin at the beginning (UTC) of the period unit (So a ‘day’ period begins at midnight UTC, a ‘month’ unit on the 1st, a ‘year’ on Jan, 1) unit string may be appended with an optional offset like so: ‘day@18’ This will begin the period at 18:00 UTC. ‘month@15’ starts a monthly period on the 15th, and year@3 begins a yearly one on March 1st.
The begin timestamp of this audit period is the same as the end of the previous.
Decorator to limit the number of concurrent operations.
This method decorator expects to have a _semaphore attribute holding an initialized semaphore in the self instance object.
We can get the appropriate semaphore with the semaphore_factory method.
Return a path to a particular device.
>>> make_dev_path('xvdc')
/dev/xvdc
>>> make_dev_path('xvdc', 1)
/dev/xvdc1
Patches decorators for all functions in a specified module.
If the CONF.monkey_patch set as True, this function patches a decorator for all functions in specified modules.
You can set decorators for each modules using CONF.monkey_patch_modules. The format is “Module path:Decorator function”. Example: ‘cinder.api.ec2.cloud:’ cinder.openstack.common.notifier.api.notify_decorator’
Parameters of the decorator are as follows. (See cinder.openstack.common.notifier.api.notify_decorator)
name – name of the function
function – object of the function
Check if oslo notifications are enabled.
Bases: retry_if_exception
Retry on ProcessExecutionError specific exit codes.
Robust file write.
Use “write to temp file and rename” model for writing the persistence file.
directory – Target directory to create a file.
filename – File name to store specified data.
data – String data.
Get a semaphore to limit concurrent operations.
The semaphore depends on the limit we want to set and the concurrent processes that need to be limited.
Temporarily chown a path.
UID of temporary owner (defaults to current user)
Check the length of each key and value of dictionary.
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.