DRBD Filesystem Resizing Stuck

During controller filesystem resizing, the drbd filesystem sizes are
not rounded correctly. This causes the resizing procedure to stuck.

Change-Id: Ie105714db8fd98e90c82e5c1ec72b1a1d75b8604
Closes-Bug: 1812682
Signed-off-by: Wei Zhou <wei.zhou@windriver.com>
This commit is contained in:
Wei Zhou 2019-01-21 14:14:37 -05:00
parent dd7fa2eff3
commit a20de5f64c
1 changed files with 19 additions and 15 deletions

View File

@ -33,6 +33,7 @@ import errno
import filecmp import filecmp
import glob import glob
import hashlib import hashlib
import math
import os import os
import re import re
import shutil import shutil
@ -7522,7 +7523,7 @@ class ConductorManager(service.PeriodicService):
LOG.error("Skipping unexpected drbd-overview output: %s" % row) LOG.error("Skipping unexpected drbd-overview output: %s" % row)
continue continue
unit = size[-1] unit = size[-1]
size = round(float(size[:-1])) size = float(size[:-1])
# drbd-overview can display the units in M or G # drbd-overview can display the units in M or G
if unit == 'M': if unit == 'M':
@ -7545,33 +7546,33 @@ class ConductorManager(service.PeriodicService):
lvdisplay_dict = self.get_controllerfs_lv_sizes(context) lvdisplay_dict = self.get_controllerfs_lv_sizes(context)
if lvdisplay_dict.get('pgsql-lv', None): if lvdisplay_dict.get('pgsql-lv', None):
pgsql_lv_size = round(float(lvdisplay_dict['pgsql-lv'])) pgsql_lv_size = float(lvdisplay_dict['pgsql-lv'])
if lvdisplay_dict.get('cgcs-lv', None): if lvdisplay_dict.get('cgcs-lv', None):
cgcs_lv_size = round(float(lvdisplay_dict['cgcs-lv'])) cgcs_lv_size = float(lvdisplay_dict['cgcs-lv'])
if lvdisplay_dict.get('extension-lv', None): if lvdisplay_dict.get('extension-lv', None):
extension_lv_size = round(float(lvdisplay_dict['extension-lv'])) extension_lv_size = float(lvdisplay_dict['extension-lv'])
if lvdisplay_dict.get('patch-vault-lv', None): if lvdisplay_dict.get('patch-vault-lv', None):
patch_lv_size = round(float(lvdisplay_dict['patch-vault-lv'])) patch_lv_size = float(lvdisplay_dict['patch-vault-lv'])
if lvdisplay_dict.get('etcd-lv', None): if lvdisplay_dict.get('etcd-lv', None):
etcd_lv_size = round(float(lvdisplay_dict['etcd-lv'])) etcd_lv_size = float(lvdisplay_dict['etcd-lv'])
if lvdisplay_dict.get('dockerdistribution-lv', None): if lvdisplay_dict.get('dockerdistribution-lv', None):
dockerdistribution_lv_size = round(float(lvdisplay_dict['dockerdistribution-lv'])) dockerdistribution_lv_size = float(lvdisplay_dict['dockerdistribution-lv'])
LOG.info("drbd-overview: pgsql-%s, cgcs-%s, extension-%s, patch-vault-%s, etcd-%s, dockerdistribution-%s", drbd_pgsql_size, drbd_cgcs_size, drbd_extension_size, drbd_patch_size, drbd_etcd_size, dockerdistribution_size) LOG.info("drbd-overview: pgsql-%s, cgcs-%s, extension-%s, patch-vault-%s, etcd-%s, dockerdistribution-%s", drbd_pgsql_size, drbd_cgcs_size, drbd_extension_size, drbd_patch_size, drbd_etcd_size, dockerdistribution_size)
LOG.info("lvdisplay: pgsql-%s, cgcs-%s, extension-%s, patch-vault-%s, etcd-%s, dockerdistribution-%s", pgsql_lv_size, cgcs_lv_size, extension_lv_size, patch_lv_size, etcd_lv_size, dockerdistribution_lv_size) LOG.info("lvdisplay: pgsql-%s, cgcs-%s, extension-%s, patch-vault-%s, etcd-%s, dockerdistribution-%s", pgsql_lv_size, cgcs_lv_size, extension_lv_size, patch_lv_size, etcd_lv_size, dockerdistribution_lv_size)
drbd_fs_updated = [] drbd_fs_updated = []
if drbd_pgsql_size < pgsql_lv_size: if math.ceil(drbd_pgsql_size) < math.ceil(pgsql_lv_size):
drbd_fs_updated.append(constants.DRBD_PGSQL) drbd_fs_updated.append(constants.DRBD_PGSQL)
if drbd_cgcs_size < cgcs_lv_size: if math.ceil(drbd_cgcs_size) < math.ceil(cgcs_lv_size):
drbd_fs_updated.append(constants.DRBD_CGCS) drbd_fs_updated.append(constants.DRBD_CGCS)
if drbd_extension_size < extension_lv_size: if math.ceil(drbd_extension_size) < math.ceil(extension_lv_size):
drbd_fs_updated.append(constants.DRBD_EXTENSION) drbd_fs_updated.append(constants.DRBD_EXTENSION)
if drbd_patch_size < patch_lv_size: if math.ceil(drbd_patch_size) < math.ceil(patch_lv_size):
drbd_fs_updated.append(constants.DRBD_PATCH_VAULT) drbd_fs_updated.append(constants.DRBD_PATCH_VAULT)
if drbd_etcd_size < etcd_lv_size: if math.ceil(drbd_etcd_size) < math.ceil(etcd_lv_size):
drbd_fs_updated.append(constants.DRBD_ETCD) drbd_fs_updated.append(constants.DRBD_ETCD)
if dockerdistribution_size < dockerdistribution_lv_size: if math.ceil(dockerdistribution_size) < math.ceil(dockerdistribution_lv_size):
drbd_fs_updated.append(constants.DRBD_DOCKER_DISTRIBUTION) drbd_fs_updated.append(constants.DRBD_DOCKER_DISTRIBUTION)
return drbd_fs_updated return drbd_fs_updated
@ -7590,7 +7591,7 @@ class ConductorManager(service.PeriodicService):
if standby_host: if standby_host:
if not self._drbd_connected(): if not self._drbd_connected():
LOG.info("resizing filesystems WAIT for drbd connected") LOG.info("resizing filesystems WAIT for drbd connected")
return return rc
else: else:
LOG.info("resizing filesystems drbd connected") LOG.info("resizing filesystems drbd connected")
@ -7612,7 +7613,9 @@ class ConductorManager(service.PeriodicService):
dockerdistribution_resized = False dockerdistribution_resized = False
loop_timeout = 0 loop_timeout = 0
drbd_fs_updated = self._drbd_fs_updated(context) drbd_fs_updated = self._drbd_fs_updated(context)
if drbd_fs_updated: if not drbd_fs_updated:
rc = True
else:
while(loop_timeout <= 5): while(loop_timeout <= 5):
if constants.DRBD_PGSQL in drbd_fs_updated: if constants.DRBD_PGSQL in drbd_fs_updated:
if (not pgsql_resized and if (not pgsql_resized and
@ -7681,6 +7684,7 @@ class ConductorManager(service.PeriodicService):
dockerdistribution_resized = True dockerdistribution_resized = True
if not standby_host: if not standby_host:
rc = True
break break
all_resized = True all_resized = True