From 4dcb36aba4160ffe9ae90c93642e717e813e4779 Mon Sep 17 00:00:00 2001 From: Tony Asleson Date: Thu, 10 Oct 2019 16:53:10 -0500 Subject: [PATCH] lvmdbusd: Fix model inconsistency when LV loses interface When a LV loses an interface it ends up getting removed and recreated. This happens after the VGs have been processed and updated. Thus when this happens we need to re-check the VGs. --- daemons/lvmdbusd/fetch.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/daemons/lvmdbusd/fetch.py b/daemons/lvmdbusd/fetch.py index e8f3521ac..b7eb8c83a 100644 --- a/daemons/lvmdbusd/fetch.py +++ b/daemons/lvmdbusd/fetch.py @@ -29,11 +29,26 @@ def _main_thread_load(refresh=True, emit_signal=True): refresh=refresh, emit_signal=emit_signal, cache_refresh=False)[1] - num_total_changes += load_lvs( + + lv_changes = load_lvs( refresh=refresh, emit_signal=emit_signal, cache_refresh=False)[1] + num_total_changes += lv_changes + + # When the LVs change it can cause another change in the VGs which is + # missed if we don't scan through the VGs again. We could achieve this + # the other way and re-scan the LVs, but in general there are more LVs than + # VGs, thus this should be more efficient. This happens when a LV interface + # changes causing the dbus object representing it to be removed and + # recreated. + if refresh and lv_changes > 0: + num_total_changes += load_vgs( + refresh=refresh, + emit_signal=emit_signal, + cache_refresh=False)[1] + return num_total_changes -- 2.43.5