From f16036e1f1d8898a528e6ad17a4f7c079cb26beb Mon Sep 17 00:00:00 2001 From: Dmitriy Rabotyagov Date: Thu, 20 Apr 2023 16:02:10 +0200 Subject: [PATCH] Add way to periodically trim Cinder DB We're adding a service that is responsible for executing db purge. Service will be deployed by default, but left stopped/disabled. This way we allow deployers to enable/disable feature by changing value of cinder_purge_deleted. Otherwise, when variables set to true once, setting them back to false won't lead to stopping of DB trimming , so timer would need to be stopped manually. Change-Id: Ic5ae8c778bff2858fcb31c85d4b910805e452c3f --- defaults/main.yml | 10 ++++++ ...r_db_cleanup_service-4754f3094604f677.yaml | 12 +++++++ tasks/main.yml | 31 +++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 releasenotes/notes/cinder_db_cleanup_service-4754f3094604f677.yaml diff --git a/defaults/main.yml b/defaults/main.yml index 6466934c..dec86063 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -459,3 +459,13 @@ cinder_pki_install_certificates: # Define user-provided SSL certificates #cinder_user_ssl_cert: #cinder_user_ssl_key: + +# Database cleanup +# Periodically purge shadow tables, where archived records are stored +cinder_purge_deleted: False +# When to start purge task. +cinder_purge_deleted_on_calendar: "*-*-* 01:00:00" +# Purge events that are older then the number of days below. +cinder_purge_deleted_before_days: "364" +# Delay the timer by a randomly selected amount of time. +cinder_purge_deleted_randomized_delay_sec: 0 diff --git a/releasenotes/notes/cinder_db_cleanup_service-4754f3094604f677.yaml b/releasenotes/notes/cinder_db_cleanup_service-4754f3094604f677.yaml new file mode 100644 index 00000000..ba9e8362 --- /dev/null +++ b/releasenotes/notes/cinder_db_cleanup_service-4754f3094604f677.yaml @@ -0,0 +1,12 @@ +--- +features: + - | + Added option to periodically clean-up deleted records from Cinder + database. + For this purpose a new service``cinder-purge-deleted`` was introduced. + It will be called periodically using corresponsive systemd timer on the + first cinder-api host. + + By default this service is disabled/stopped and database cleanup + is not performed. You can enable this behaviour by defining variable + ``cinder_purge_deleted``. diff --git a/tasks/main.yml b/tasks/main.yml index 7824d54e..3b612489 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -248,3 +248,34 @@ - "_cinder_is_last_play_host" tags: - cinder-config + +- name: Create service and timer for archiving deleted records + include_role: + name: systemd_service + vars: + systemd_service_restart_changed: false + systemd_user_name: "{{ cinder_system_user_name }}" + systemd_group_name: "{{ cinder_system_group_name }}" + systemd_tempd_prefix: openstack + systemd_slice_name: "{{ cinder_system_slice_name }}" + systemd_lock_dir: "{{ cinder_lock_dir }}" + systemd_services: + - service_name: "cinder-purge-deleted" + execstarts: + - "{{ cinder_bin }}/cinder-manage db purge {{ cinder_purge_deleted_before_days }}" + environment: + UMASK: '0640' + UMASK_DIR: '0750' + program_sandboxing: + RuntimeDirectory: 'cinder-purge-deleted' + enabled: "{{ cinder_purge_deleted }}" + timer: + state: "{{ cinder_purge_deleted | ternary('started', 'stopped') }}" + enabled: "{{ cinder_purge_deleted }}" + options: + OnCalendar: "{{ cinder_purge_deleted_on_calendar }}" + RandomizedDelaySec: "{{ cinder_purge_deleted_randomized_delay_sec }}" + Persistent: true + Unit: "cinder-purge-deleted.service" + when: + - inventory_hostname == groups[cinder_services['cinder-api']['group']] | first