Skip to content

Commit

Permalink
Retry when checking ceph pool compression mode.
Browse files Browse the repository at this point in the history
The compression mode after it's set via config-changed might take a
while to fully propagate to the whole cluster, hence the hook may be
done before the cluster is fully configured with the new compression
mode. This is more noticeable in the gate when there are many jobs
running in parallel.

This patch modes the check to its own method wrapped with a
tenacity.retry decorator to make the test more robust.

Closes openstack-charmers#946
  • Loading branch information
freyes committed Feb 20, 2023
1 parent 903ddaa commit 618fb7b
Showing 1 changed file with 15 additions and 11 deletions.
26 changes: 15 additions & 11 deletions zaza/openstack/charm_tests/ceph/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -1372,25 +1372,29 @@ def test_configure_compression(self):
with self.config_change(
{'bluestore-compression-mode': 'none'},
{'bluestore-compression-mode': 'force'}):
# Retrieve pool details from Ceph after changing configuration
ceph_pools_detail = zaza_ceph.get_ceph_pool_details(
model_name=self.model_name)
logging.debug('CONFIG_CHANGE: {}'.format(ceph_pools_detail))
logging.info('Checking Ceph pool compression_mode after to change')
self._assert_pools_properties(
app_pools, ceph_pools_detail,
{'options': {'compression_mode': 'force'}})
self._check_pool_compression_mode(app_pools, 'force')

logging.info('Checking Ceph pool compression_mode after '
'restoring config to previous value')
self._check_pool_compression_mode(app_pools, 'none')

@tenacity.retry(
wait=tenacity.wait_exponential(multiplier=1, min=2, max=10),
stop=tenacity.stop_after_attempt(10),
reraise=True,
retry=tenacity.retry_if_exception_type(AssertionError)
)
def _check_pool_compression_mode(self, app_pools, mode):
ceph_pools_detail = zaza_ceph.get_ceph_pool_details(
model_name=self.model_name)
logging.debug('AFTER: {}'.format(ceph_pools_detail))
logging.debug('ceph_pools_details: %s', ceph_pools_detail)
logging.debug(juju_utils.get_relation_from_unit(
'ceph-mon', self.application_name, None,
model_name=self.model_name))
logging.info('Checking Ceph pool compression_mode after restoring '
'config to previous value')
self._assert_pools_properties(
app_pools, ceph_pools_detail,
{'options': {'compression_mode': 'none'}})
{'options': {'compression_mode': mode}})

def test_invalid_compression_configuration(self):
"""Set invalid configuration and validate charm response."""
Expand Down

0 comments on commit 618fb7b

Please sign in to comment.