From: Sage Weil Date: Tue, 2 Feb 2021 18:01:32 +0000 (-0600) Subject: mgr/cephadm: track last_applied by host for osd specs X-Git-Tag: v17.1.0~3046^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=197a8ba22ff30ccf9498bbc14b7a3897e48e1220;p=ceph-ci.git mgr/cephadm: track last_applied by host for osd specs For each host, note when we last applied each osdspec. Log the start time, not the end time. Signed-off-by: Sage Weil --- diff --git a/src/pybind/mgr/cephadm/inventory.py b/src/pybind/mgr/cephadm/inventory.py index 1b51547c6c9..97fdd8d776b 100644 --- a/src/pybind/mgr/cephadm/inventory.py +++ b/src/pybind/mgr/cephadm/inventory.py @@ -215,6 +215,7 @@ class HostCache(): self.facts = {} # type: Dict[str, Dict[str, Any]] self.last_facts_update = {} # type: Dict[str, datetime.datetime] self.osdspec_previews = {} # type: Dict[str, List[Dict[str, Any]]] + self.osdspec_last_applied = {} # type: Dict[str, Dict[str, datetime.datetime]] self.networks = {} # type: Dict[str, Dict[str, List[str]]] self.last_device_update = {} # type: Dict[str, datetime.datetime] self.daemon_refresh_queue = [] # type: List[str] @@ -249,6 +250,7 @@ class HostCache(): self.daemon_refresh_queue.append(host) self.daemons[host] = {} self.osdspec_previews[host] = [] + self.osdspec_last_applied[host] = {} self.devices[host] = [] self.networks[host] = {} self.daemon_config_deps[host] = {} @@ -259,6 +261,8 @@ class HostCache(): self.devices[host].append(inventory.Device.from_json(d)) self.networks[host] = j.get('networks', {}) self.osdspec_previews[host] = j.get('osdspec_previews', {}) + for name, ts in j.get('osdspec_last_applied', {}).items(): + self.osdspec_last_applied[host][name] = str_to_datetime(ts) for name, d in j.get('daemon_config_deps', {}).items(): self.daemon_config_deps[host][name] = { @@ -309,6 +313,10 @@ class HostCache(): # type: (str) -> None self.last_host_check[host] = datetime_now() + def update_osdspec_last_applied(self, host, service_name, ts): + # type: (str, str, datetime.datetime) -> None + self.osdspec_last_applied[host][service_name] = ts + def prime_empty_host(self, host): # type: (str) -> None """ @@ -318,6 +326,7 @@ class HostCache(): self.devices[host] = [] self.networks[host] = {} self.osdspec_previews[host] = [] + self.osdspec_last_applied[host] = {} self.daemon_config_deps[host] = {} self.daemon_refresh_queue.append(host) self.device_refresh_queue.append(host) @@ -346,6 +355,7 @@ class HostCache(): 'daemons': {}, 'devices': [], 'osdspec_previews': [], + 'osdspec_last_applied': {}, 'daemon_config_deps': {}, } if host in self.last_daemon_update: @@ -368,6 +378,9 @@ class HostCache(): } if host in self.osdspec_previews and self.osdspec_previews[host]: j['osdspec_previews'] = self.osdspec_previews[host] + if host in self.osdspec_last_applied: + for name, ts in self.osdspec_last_applied[host].items(): + j['osdspec_last_applied'][name] = datetime_to_str(ts) if host in self.last_host_check: j['last_host_check'] = datetime_to_str(self.last_host_check[host]) @@ -391,6 +404,8 @@ class HostCache(): del self.last_facts_update[host] if host in self.osdspec_previews: del self.osdspec_previews[host] + if host in self.osdspec_last_applied: + del self.osdspec_last_applied[host] if host in self.loading_osdspec_preview: self.loading_osdspec_preview.remove(host) if host in self.networks: diff --git a/src/pybind/mgr/cephadm/services/osd.py b/src/pybind/mgr/cephadm/services/osd.py index 0d88b52fe07..c9182b43d75 100644 --- a/src/pybind/mgr/cephadm/services/osd.py +++ b/src/pybind/mgr/cephadm/services/osd.py @@ -42,17 +42,28 @@ class OSDService(CephService): logger.debug("No data_devices, skipping DriveGroup: {}".format( drive_group.service_id)) return None - logger.info('Applying drive group %s on host %s...' % (drive_group.service_id, host)) + + logger.info('Applying drive group %s on host %s...' % ( + drive_group.service_id, host + )) + start_ts = datetime_now() env_vars: List[str] = [f"CEPH_VOLUME_OSDSPEC_AFFINITY={drive_group.service_id}"] ret_msg = self.create_single_host( - host, cmd, replace_osd_ids=osd_id_claims.get(host, []), env_vars=env_vars + drive_group, host, cmd, + replace_osd_ids=osd_id_claims.get(host, []), env_vars=env_vars + ) + self.mgr.cache.update_osdspec_last_applied( + host, drive_group.service_name(), start_ts ) + self.mgr.cache.save_host(host) return ret_msg ret = create_from_spec_one(self.prepare_drivegroup(drive_group)) return ", ".join(filter(None, ret)) - def create_single_host(self, host: str, cmd: str, replace_osd_ids: List[str], + def create_single_host(self, + drive_group: DriveGroupSpec, + host: str, cmd: str, replace_osd_ids: List[str], env_vars: Optional[List[str]] = None) -> str: out, err, code = self._run_ceph_volume_command(host, cmd, env_vars=env_vars)