From a0f1275dfbd835b704355d095e610ac1f1254f25 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Sun, 11 Dec 2022 13:40:15 -0500 Subject: [PATCH] daemon: Make failure to query base image non-fatal We had a GC bug which then propagates into a hard daemon failure right now because we try to gather data on all deployments. Make this non-fatal; we should try to stumble forward as much as possible so that one can e.g. perform an upgrade operation. (cherry picked from commit 8dd45f293afc1ca32b42bda86dde47c66e652dda) --- src/app/rpmostree-builtin-status.cxx | 12 +++++++++--- src/daemon/rpmostreed-deployment-utils.cxx | 20 ++++++++++++++------ 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/app/rpmostree-builtin-status.cxx b/src/app/rpmostree-builtin-status.cxx index cec0a2e3..ee82e589 100644 --- a/src/app/rpmostree-builtin-status.cxx +++ b/src/app/rpmostree-builtin-status.cxx @@ -688,9 +688,15 @@ print_one_deployment (RPMOSTreeSysroot *sysroot_proxy, GVariant *child, gint ind break; case rpmostreecxx::RefspecType::Container: { - g_assert (g_variant_dict_lookup (dict, "container-image-reference-digest", "s", - &container_image_reference_digest)); - g_print ("%s", origin_refspec); + if (g_variant_dict_lookup (dict, "container-image-reference-digest", "s", + &container_image_reference_digest)) + { + g_print ("%s", origin_refspec); + } + else + { + g_print ("(error fetching image metadata)"); + } } break; } diff --git a/src/daemon/rpmostreed-deployment-utils.cxx b/src/daemon/rpmostreed-deployment-utils.cxx index b7b27fed..48480509 100644 --- a/src/daemon/rpmostreed-deployment-utils.cxx +++ b/src/daemon/rpmostreed-deployment-utils.cxx @@ -214,12 +214,20 @@ rpmostreed_deployment_generate_variant (OstreeSysroot *sysroot, OstreeDeployment case rpmostreecxx::RefspecType::Container: { g_variant_dict_insert (dict, "container-image-reference", "s", refspec); - CXX_TRY_VAR (state, rpmostreecxx::query_container_image_commit (*repo, base_checksum), - error); - g_variant_dict_insert (dict, "container-image-reference-digest", "s", - state->image_digest.c_str ()); - if (state->version.size () > 0) - g_variant_dict_insert (dict, "version", "s", state->version.c_str ()); + // For now, make this non-fatal https://github.com/coreos/rpm-ostree/issues/4185 + try + { + auto state = rpmostreecxx::query_container_image_commit (*repo, base_checksum); + g_variant_dict_insert (dict, "container-image-reference-digest", "s", + state->image_digest.c_str ()); + if (state->version.size () > 0) + g_variant_dict_insert (dict, "version", "s", state->version.c_str ()); + } + catch (std::exception &e) + { + sd_journal_print (LOG_ERR, "failed to query container image base metadata: %s", + e.what ()); + } } break; case rpmostreecxx::RefspecType::Checksum: -- 2.31.1