Improve way of cache backend selection

At the moment we don't provide any option rather then use memcached
backend. With that we also hardocde list of packages that should be
installed inside virtualenv for selected backend.

Adding bmemcached requirement to oslo_cache.memcache_pool [1] gives us
opportunity to refactor this bit of deployment and allow to be more
flexible in backend selection and requirements installation for it.

[1] https://review.opendev.org/c/openstack/oslo.cache/+/854628

Change-Id: I48e193ef29e56aa8639511c5b5dcddc70f5e1198
This commit is contained in:
Dmitriy Rabotyagov 2022-10-06 11:37:54 +02:00 committed by Dmitriy Rabotyagov
parent f8840ece3b
commit 242ebe2b54
4 changed files with 39 additions and 6 deletions

View File

@ -25,7 +25,10 @@ nova_ceilometer_enabled: "{{ (groups['ceilometer_all'] is defined) and (groups['
# Enable/Disable nova versioned notification
nova_versioned_notification_enabled: False
nova_memcached_servers: "{{ memcached_servers }}"
# Caching
nova_cache_servers: "{{ nova_memcached_servers | default(memcached_servers) }}"
nova_cache_backend: "{{ openstack_cache_backend | default('oslo_cache.memcache_pool') }}"
nova_cache_backend_map: "{{ openstack_cache_backend_map | default(_nova_cache_backend_map) }}"
## Verbosity Options
debug: False
@ -496,8 +499,7 @@ nova_pip_packages:
- "git+{{ nova_git_repo }}@{{ nova_git_install_branch }}#egg=nova"
- osprofiler
- PyMySQL
- pymemcache
- python-memcached
- "{{ _nova_cache_backend_package }}"
- systemd-python
# Specific pip packages provided by the user

View File

@ -0,0 +1,7 @@
---
deprecations:
- |
Variable ``nova_memcached_servers`` has been deprecated and replaced with
``nova_cache_servers`` that defaults to ``memcached_servers``. For
backpwards compatability ``nova_memcached_servers`` is still respected
but will be removed in future releases.

View File

@ -68,8 +68,10 @@ manager_interval = {{ nova_image_cache_manager_interval }}
# Cache
[cache]
enabled = true
backend = oslo_cache.memcache_pool
memcache_servers = {{ nova_memcached_servers }}
backend = {{ nova_cache_backend }}
{% if nova_cache_backend in nova_cache_backend_map['dogpile'] %}
memcache_servers = {{ nova_cache_servers }}
{% endif %}
# Cinder
@ -194,13 +196,15 @@ service_token_roles_required = {{ nova_service_token_roles_required | bool }}
service_token_roles = {{ nova_service_token_roles | join(',') }}
service_type = {{ nova_service_type }}
memcached_servers = {{ memcached_servers }}
{% if nova_cache_backend in nova_cache_backend_map['dogpile'] %}
memcached_servers = {{ nova_cache_servers }}
token_cache_time = 300
# if your memcached server is shared, use these settings to avoid cache poisoning
memcache_security_strategy = ENCRYPT
memcache_secret_key = {{ memcached_encryption_key }}
{% endif %}
{% if group_names | intersect(nova_services.keys() | difference('nova-compute') | map('extract', nova_services, 'group') | list) | count > 0 %}
[database]

View File

@ -116,3 +116,23 @@ _qemu_default_conf_dict: |-
_nova_qemu_conf: "{{ _qemu_default_conf_dict | combine(qemu_conf_dict) }}"
_nova_oslomsg_heartbeat_in_pthread: "{{ (nova_services['nova-compute']['group'] in group_names) | ternary(False, True) }}"
_nova_cache_backend_map:
dogpile:
- oslo_cache.memcache_pool
- dogpile.cache.pymemcache
- dogpile.cache.memcached
- dogpile.cache.bmemcached
mongo:
- oslo_cache.mongo
etcd3gw:
- oslo_cache.etcd3gw
_nova_cache_backend_package: |-
{% set oslo = namespace(backend='dogpile') %}
{% for key, value in _nova_cache_backend_map.items() %}
{% if nova_cache_backend in value %}
{% set oslo.backend = key %}
{%- endif %}
{%- endfor %}
oslo.cache[{{ oslo.backend }}]