From 242ebe2b54a3fe3b820784b471500dbf45419613 Mon Sep 17 00:00:00 2001 From: Dmitriy Rabotyagov Date: Thu, 6 Oct 2022 11:37:54 +0200 Subject: [PATCH] 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 --- defaults/main.yml | 8 +++++--- ...va_memcached_servers-6c40d3b1714786bf.yaml | 7 +++++++ templates/nova.conf.j2 | 10 +++++++--- vars/main.yml | 20 +++++++++++++++++++ 4 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 releasenotes/notes/nova_memcached_servers-6c40d3b1714786bf.yaml diff --git a/defaults/main.yml b/defaults/main.yml index 58c1f453..e3fc213e 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -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 diff --git a/releasenotes/notes/nova_memcached_servers-6c40d3b1714786bf.yaml b/releasenotes/notes/nova_memcached_servers-6c40d3b1714786bf.yaml new file mode 100644 index 00000000..b88d25d8 --- /dev/null +++ b/releasenotes/notes/nova_memcached_servers-6c40d3b1714786bf.yaml @@ -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. diff --git a/templates/nova.conf.j2 b/templates/nova.conf.j2 index fa0cf680..f97e19fa 100644 --- a/templates/nova.conf.j2 +++ b/templates/nova.conf.j2 @@ -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] diff --git a/vars/main.yml b/vars/main.yml index 459e67fb..0775b353 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -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 }}]