From 6351653c864d0d83778941e8775bd9b5056d5efc Mon Sep 17 00:00:00 2001 From: matuskosut Date: Wed, 5 Feb 2020 11:40:03 +0100 Subject: [PATCH] Add support and tests for live_migration_ parameters in charm config, templates and hook. Change-Id: I9e426d7718f044f0e73231448b0a3dad17c81524 Closes-Bug: 1861986 --- config.yaml | 30 ++++++++++++++++++++++++ hooks/nova_compute_context.py | 8 +++++++ templates/newton/nova.conf | 12 ++++++++++ templates/ocata/nova.conf | 12 ++++++++++ templates/pike/nova.conf | 12 ++++++++++ templates/queens/nova.conf | 12 ++++++++++ templates/rocky/nova.conf | 12 ++++++++++ templates/stein/nova.conf | 12 ++++++++++ templates/train/nova.conf | 12 ++++++++++ unit_tests/test_nova_compute_contexts.py | 12 ++++++++++ 10 files changed, 134 insertions(+) diff --git a/config.yaml b/config.yaml index f50769ac..387781ce 100644 --- a/config.yaml +++ b/config.yaml @@ -108,6 +108,36 @@ options: description: | TCP authentication scheme for libvirt live migration. Available options include ssh. + live-migration-completion-timeout: + type: int + default: 800 + description: | + Time to wait, in seconds, for migration to successfully complete + transferring data before aborting the operation. Value is per GiB + of guest RAM + disk to be transferred, with lower bound of a minimum + of 2 GiB. Should usually be larger than downtime-delay*downtime-steps + Set to 0 to disable timeouts. + live-migration-downtime: + type: int + default: 500 + description: | + Maximum permitted downtime, in milliseconds, for live migration + switchover. Will be rounded up to a minimum of 100ms. Use + a large value if guest liveness is unimportant. + live-migration-downtime-delay: + type: int + default: 75 + description: | + Time to wait, in seconds, between each step increase of the migration + downtime. Minimum delay is 10 seconds. Value is per GiB of guest + RAM + disk to be transferred, with lower bound of a minimum of 2 GiB + per device. + live-migration-downtime-steps: + type: int + default: 10 + description: | + Number of incremental steps to reach max downtime value. Will be rounded + up to a minimum of 3 steps. live-migration-permit-post-copy: type: boolean default: False diff --git a/hooks/nova_compute_context.py b/hooks/nova_compute_context.py index f916c183..fe087f85 100644 --- a/hooks/nova_compute_context.py +++ b/hooks/nova_compute_context.py @@ -209,6 +209,14 @@ class NovaComputeLibvirtContext(context.OSContextGenerator): ctxt['live_migration_uri'] = 'qemu+ssh://%s/system' if config('enable-live-migration'): + ctxt['live_migration_completion_timeout'] = \ + config('live-migration-completion-timeout') + ctxt['live_migration_downtime'] = \ + config('live-migration-downtime') + ctxt['live_migration_downtime_steps'] = \ + config('live-migration-downtime-steps') + ctxt['live_migration_downtime_delay'] = \ + config('live-migration-downtime-delay') ctxt['live_migration_permit_post_copy'] = \ config('live-migration-permit-post-copy') ctxt['live_migration_permit_auto_converge'] = \ diff --git a/templates/newton/nova.conf b/templates/newton/nova.conf index 28b82343..bda460f1 100644 --- a/templates/newton/nova.conf +++ b/templates/newton/nova.conf @@ -206,6 +206,18 @@ rbd_secret_uuid = {{ rbd_secret_uuid }} {% if live_migration_uri -%} live_migration_uri = {{ live_migration_uri }} {% endif -%} +{% if live_migration_completion_timeout -%} +live_migration_completion_timeout = {{ live_migration_completion_timeout }} +{% endif -%} +{% if live_migration_downtime -%} +live_migration_downtime = {{ live_migration_downtime }} +{% endif -%} +{% if live_migration_downtime_steps -%} +live_migration_downtime_steps = {{ live_migration_downtime_steps }} +{% endif -%} +{% if live_migration_downtime_delay -%} +live_migration_downtime_delay = {{ live_migration_downtime_delay }} +{% endif -%} {% if live_migration_permit_post_copy -%} live_migration_permit_post_copy = {{ live_migration_permit_post_copy }} {% endif -%} diff --git a/templates/ocata/nova.conf b/templates/ocata/nova.conf index 57424a65..7565a97b 100644 --- a/templates/ocata/nova.conf +++ b/templates/ocata/nova.conf @@ -221,6 +221,18 @@ live_migration_scheme = {{ live_migration_scheme }} {% if live_migration_inbound_addr -%} live_migration_inbound_addr = {{ live_migration_inbound_addr }} {% endif -%} +{% if live_migration_completion_timeout -%} +live_migration_completion_timeout = {{ live_migration_completion_timeout }} +{% endif -%} +{% if live_migration_downtime -%} +live_migration_downtime = {{ live_migration_downtime }} +{% endif -%} +{% if live_migration_downtime_steps -%} +live_migration_downtime_steps = {{ live_migration_downtime_steps }} +{% endif -%} +{% if live_migration_downtime_delay -%} +live_migration_downtime_delay = {{ live_migration_downtime_delay }} +{% endif -%} {% if live_migration_permit_post_copy -%} live_migration_permit_post_copy = {{ live_migration_permit_post_copy }} {% endif -%} diff --git a/templates/pike/nova.conf b/templates/pike/nova.conf index c22a993c..fbba6b05 100644 --- a/templates/pike/nova.conf +++ b/templates/pike/nova.conf @@ -222,6 +222,18 @@ live_migration_scheme = {{ live_migration_scheme }} {% if live_migration_inbound_addr -%} live_migration_inbound_addr = {{ live_migration_inbound_addr }} {% endif -%} +{% if live_migration_completion_timeout -%} +live_migration_completion_timeout = {{ live_migration_completion_timeout }} +{% endif -%} +{% if live_migration_downtime -%} +live_migration_downtime = {{ live_migration_downtime }} +{% endif -%} +{% if live_migration_downtime_steps -%} +live_migration_downtime_steps = {{ live_migration_downtime_steps }} +{% endif -%} +{% if live_migration_downtime_delay -%} +live_migration_downtime_delay = {{ live_migration_downtime_delay }} +{% endif -%} {% if live_migration_permit_post_copy -%} live_migration_permit_post_copy = {{ live_migration_permit_post_copy }} {% endif -%} diff --git a/templates/queens/nova.conf b/templates/queens/nova.conf index 43a5f16e..d482492b 100644 --- a/templates/queens/nova.conf +++ b/templates/queens/nova.conf @@ -240,6 +240,18 @@ live_migration_scheme = {{ live_migration_scheme }} {% if live_migration_inbound_addr -%} live_migration_inbound_addr = {{ live_migration_inbound_addr }} {% endif -%} +{% if live_migration_completion_timeout -%} +live_migration_completion_timeout = {{ live_migration_completion_timeout }} +{% endif -%} +{% if live_migration_downtime -%} +live_migration_downtime = {{ live_migration_downtime }} +{% endif -%} +{% if live_migration_downtime_steps -%} +live_migration_downtime_steps = {{ live_migration_downtime_steps }} +{% endif -%} +{% if live_migration_downtime_delay -%} +live_migration_downtime_delay = {{ live_migration_downtime_delay }} +{% endif -%} {% if live_migration_permit_post_copy -%} live_migration_permit_post_copy = {{ live_migration_permit_post_copy }} {% endif -%} diff --git a/templates/rocky/nova.conf b/templates/rocky/nova.conf index 35ae6ac3..bd71cc00 100644 --- a/templates/rocky/nova.conf +++ b/templates/rocky/nova.conf @@ -240,6 +240,18 @@ live_migration_scheme = {{ live_migration_scheme }} {% if live_migration_inbound_addr -%} live_migration_inbound_addr = {{ live_migration_inbound_addr }} {% endif -%} +{% if live_migration_completion_timeout -%} +live_migration_completion_timeout = {{ live_migration_completion_timeout }} +{% endif -%} +{% if live_migration_downtime -%} +live_migration_downtime = {{ live_migration_downtime }} +{% endif -%} +{% if live_migration_downtime_steps -%} +live_migration_downtime_steps = {{ live_migration_downtime_steps }} +{% endif -%} +{% if live_migration_downtime_delay -%} +live_migration_downtime_delay = {{ live_migration_downtime_delay }} +{% endif -%} {% if live_migration_permit_post_copy -%} live_migration_permit_post_copy = {{ live_migration_permit_post_copy }} {% endif -%} diff --git a/templates/stein/nova.conf b/templates/stein/nova.conf index 11a2b552..96a46e12 100644 --- a/templates/stein/nova.conf +++ b/templates/stein/nova.conf @@ -241,6 +241,18 @@ live_migration_scheme = {{ live_migration_scheme }} {% if live_migration_inbound_addr -%} live_migration_inbound_addr = {{ live_migration_inbound_addr }} {% endif -%} +{% if live_migration_completion_timeout -%} +live_migration_completion_timeout = {{ live_migration_completion_timeout }} +{% endif -%} +{% if live_migration_downtime -%} +live_migration_downtime = {{ live_migration_downtime }} +{% endif -%} +{% if live_migration_downtime_steps -%} +live_migration_downtime_steps = {{ live_migration_downtime_steps }} +{% endif -%} +{% if live_migration_downtime_delay -%} +live_migration_downtime_delay = {{ live_migration_downtime_delay }} +{% endif -%} {% if live_migration_permit_post_copy -%} live_migration_permit_post_copy = {{ live_migration_permit_post_copy }} {% endif -%} diff --git a/templates/train/nova.conf b/templates/train/nova.conf index 717e29b0..a7b326cf 100644 --- a/templates/train/nova.conf +++ b/templates/train/nova.conf @@ -245,6 +245,18 @@ rbd_secret_uuid = {{ rbd_secret_uuid }} {% if live_migration_uri -%} live_migration_uri = {{ live_migration_uri }} {% endif -%} +{% if live_migration_completion_timeout -%} +live_migration_completion_timeout = {{ live_migration_completion_timeout }} +{% endif -%} +{% if live_migration_downtime -%} +live_migration_downtime = {{ live_migration_downtime }} +{% endif -%} +{% if live_migration_downtime_steps -%} +live_migration_downtime_steps = {{ live_migration_downtime_steps }} +{% endif -%} +{% if live_migration_downtime_delay -%} +live_migration_downtime_delay = {{ live_migration_downtime_delay }} +{% endif -%} {% if live_migration_permit_post_copy -%} live_migration_permit_post_copy = {{ live_migration_permit_post_copy }} {% endif -%} diff --git a/unit_tests/test_nova_compute_contexts.py b/unit_tests/test_nova_compute_contexts.py index e0d32bcc..fc804a51 100644 --- a/unit_tests/test_nova_compute_contexts.py +++ b/unit_tests/test_nova_compute_contexts.py @@ -392,6 +392,10 @@ class NovaComputeContextTests(CharmTestCase): 'listen_tls': 0, 'host_uuid': self.host_uuid, 'live_migration_uri': 'qemu+ssh://%s/system', + 'live_migration_completion_timeout': 800, + 'live_migration_downtime': 500, + 'live_migration_downtime_delay': 75, + 'live_migration_downtime_steps': 10, 'live_migration_permit_auto_converge': False, 'live_migration_permit_post_copy': False, 'default_ephemeral_format': 'ext4', @@ -448,6 +452,10 @@ class NovaComputeContextTests(CharmTestCase): 'listen_tls': 0, 'host_uuid': self.host_uuid, 'live_migration_uri': 'qemu+ssh://%s/system', + 'live_migration_completion_timeout': 800, + 'live_migration_downtime': 500, + 'live_migration_downtime_delay': 75, + 'live_migration_downtime_steps': 10, 'live_migration_permit_auto_converge': True, 'live_migration_permit_post_copy': False, 'force_raw_images': True, @@ -470,6 +478,10 @@ class NovaComputeContextTests(CharmTestCase): 'listen_tls': 0, 'host_uuid': self.host_uuid, 'live_migration_uri': 'qemu+ssh://%s/system', + 'live_migration_completion_timeout': 800, + 'live_migration_downtime': 500, + 'live_migration_downtime_delay': 75, + 'live_migration_downtime_steps': 10, 'live_migration_permit_auto_converge': False, 'live_migration_permit_post_copy': True, 'default_ephemeral_format': 'ext4',