mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-07-21 02:04:17 +00:00
cloud-setup: merge branch 'th/cloud-setup-error-handling'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/593
This commit is contained in:
commit
94e2348c54
|
@ -103,7 +103,6 @@ typedef struct {
|
|||
NMCSProviderGetConfigTaskData *config_data;
|
||||
guint n_ifaces_pending;
|
||||
GError *error;
|
||||
bool success:1;
|
||||
} AzureData;
|
||||
|
||||
typedef struct {
|
||||
|
@ -126,30 +125,34 @@ _get_config_maybe_task_return (AzureData *azure_data,
|
|||
GError *error_take)
|
||||
{
|
||||
NMCSProviderGetConfigTaskData *config_data = azure_data->config_data;
|
||||
gs_free_error GError *azure_error = NULL;
|
||||
|
||||
if (error_take) {
|
||||
nm_clear_error (&azure_data->error);
|
||||
azure_data->error = error_take;
|
||||
if (!azure_data->error)
|
||||
azure_data->error = error_take;
|
||||
else if ( !nm_utils_error_is_cancelled (azure_data->error)
|
||||
&& nm_utils_error_is_cancelled (error_take)) {
|
||||
nm_clear_error (&azure_data->error);
|
||||
azure_data->error = error_take;
|
||||
} else
|
||||
g_error_free (error_take);
|
||||
}
|
||||
|
||||
if (azure_data->n_ifaces_pending > 0)
|
||||
return;
|
||||
|
||||
azure_error = azure_data->error;
|
||||
|
||||
if (azure_error) {
|
||||
if (nm_utils_error_is_cancelled (azure_error))
|
||||
if (azure_data->error) {
|
||||
if (nm_utils_error_is_cancelled (azure_data->error))
|
||||
_LOGD ("get-config: cancelled");
|
||||
else
|
||||
_LOGD ("get-config: failed: %s", azure_error->message);
|
||||
g_task_return_error (config_data->task, g_steal_pointer (&azure_error));
|
||||
_LOGD ("get-config: failed: %s", azure_data->error->message);
|
||||
g_task_return_error (config_data->task, g_steal_pointer (&azure_data->error));
|
||||
} else {
|
||||
_LOGD ("get-config: success");
|
||||
g_task_return_pointer (config_data->task,
|
||||
g_hash_table_ref (config_data->result_dict),
|
||||
(GDestroyNotify) g_hash_table_unref);
|
||||
}
|
||||
|
||||
nm_g_slice_free (azure_data);
|
||||
g_object_unref (config_data->task);
|
||||
}
|
||||
|
@ -218,7 +221,6 @@ _get_config_fetch_done_cb (NMHttpClient *http_client,
|
|||
iface_get_config->cidr_prefix = tmp_prefix;
|
||||
iface_get_config->has_cidr = TRUE;
|
||||
}
|
||||
azure_data->success = TRUE;
|
||||
}
|
||||
|
||||
done:
|
||||
|
@ -533,7 +535,6 @@ get_config (NMCSProvider *provider,
|
|||
*azure_data = (AzureData) {
|
||||
.config_data = get_config_data,
|
||||
.n_ifaces_pending = 0,
|
||||
.success = FALSE,
|
||||
};
|
||||
|
||||
nm_http_client_poll_get (nmcs_provider_get_http_client (provider),
|
||||
|
|
|
@ -141,30 +141,43 @@ detect (NMCSProvider *provider,
|
|||
|
||||
typedef struct {
|
||||
NMCSProviderGetConfigTaskData *get_config_data;
|
||||
GError *error;
|
||||
GCancellable *cancellable;
|
||||
gulong cancelled_id;
|
||||
guint n_pending;
|
||||
} GetConfigIfaceData;
|
||||
|
||||
static void
|
||||
_get_config_task_return (GetConfigIfaceData *iface_data,
|
||||
GError *error_take)
|
||||
_get_config_task_maybe_return (GetConfigIfaceData *iface_data,
|
||||
GError *error_take)
|
||||
{
|
||||
NMCSProviderGetConfigTaskData *get_config_data = iface_data->get_config_data;
|
||||
|
||||
if (error_take) {
|
||||
if (!iface_data->error)
|
||||
iface_data->error = error_take;
|
||||
else if ( !nm_utils_error_is_cancelled (iface_data->error)
|
||||
&& nm_utils_error_is_cancelled (error_take)) {
|
||||
nm_clear_error (&iface_data->error);
|
||||
iface_data->error = error_take;
|
||||
} else
|
||||
g_error_free (error_take);
|
||||
}
|
||||
|
||||
if (iface_data->n_pending > 0)
|
||||
return;
|
||||
|
||||
nm_clear_g_cancellable_disconnect (g_task_get_cancellable (get_config_data->task),
|
||||
&iface_data->cancelled_id);
|
||||
|
||||
nm_clear_g_cancellable (&iface_data->cancellable);
|
||||
|
||||
nm_g_slice_free (iface_data);
|
||||
|
||||
if (error_take) {
|
||||
if (nm_utils_error_is_cancelled (error_take))
|
||||
if (iface_data->error) {
|
||||
if (nm_utils_error_is_cancelled (iface_data->error))
|
||||
_LOGD ("get-config: cancelled");
|
||||
else
|
||||
_LOGD ("get-config: failed: %s", error_take->message);
|
||||
g_task_return_error (get_config_data->task, error_take);
|
||||
_LOGD ("get-config: failed: %s", iface_data->error->message);
|
||||
g_task_return_error (get_config_data->task, g_steal_pointer (&iface_data->error));
|
||||
} else {
|
||||
_LOGD ("get-config: success");
|
||||
g_task_return_pointer (get_config_data->task,
|
||||
|
@ -172,6 +185,7 @@ _get_config_task_return (GetConfigIfaceData *iface_data,
|
|||
(GDestroyNotify) g_hash_table_unref);
|
||||
}
|
||||
|
||||
nm_g_slice_free (iface_data);
|
||||
g_object_unref (get_config_data->task);
|
||||
}
|
||||
|
||||
|
@ -194,9 +208,6 @@ _get_config_fetch_done_cb (NMHttpClient *http_client,
|
|||
&response_data,
|
||||
&error);
|
||||
|
||||
if (nm_utils_error_is_cancelled (error))
|
||||
return;
|
||||
|
||||
if (!error) {
|
||||
NMCSProviderGetConfigIfaceData *config_iface_data;
|
||||
in_addr_t tmp_addr;
|
||||
|
@ -240,10 +251,8 @@ _get_config_fetch_done_cb (NMHttpClient *http_client,
|
|||
}
|
||||
}
|
||||
|
||||
if (--iface_data->n_pending > 0)
|
||||
return;
|
||||
|
||||
_get_config_task_return (iface_data, NULL);
|
||||
iface_data->n_pending--;
|
||||
_get_config_task_maybe_return (iface_data, g_steal_pointer (&error));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -272,8 +281,8 @@ _get_config_fetch_cancelled_cb (GObject *object, gpointer user_data)
|
|||
|
||||
nm_clear_g_signal_handler (g_task_get_cancellable (iface_data->get_config_data->task),
|
||||
&iface_data->cancelled_id);
|
||||
_get_config_task_return (iface_data,
|
||||
nm_utils_error_new_cancelled (FALSE, NULL));
|
||||
_get_config_task_maybe_return (iface_data,
|
||||
nm_utils_error_new_cancelled (FALSE, NULL));
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
|
@ -317,16 +326,16 @@ _get_config_metadata_ready_cb (GObject *source,
|
|||
};
|
||||
|
||||
if (nm_utils_error_is_cancelled (error)) {
|
||||
_get_config_task_return (iface_data, g_steal_pointer (&error));
|
||||
_get_config_task_maybe_return (iface_data, g_steal_pointer (&error));
|
||||
return;
|
||||
}
|
||||
|
||||
/* We ignore errors. Only if we got no response at all, it's a problem.
|
||||
* Otherwise, we proceed with whatever we could fetch. */
|
||||
if (!response_parsed) {
|
||||
_get_config_task_return (iface_data,
|
||||
nm_utils_error_new (NM_UTILS_ERROR_UNKNOWN,
|
||||
"meta data for interfaces not found"));
|
||||
_get_config_task_maybe_return (iface_data,
|
||||
nm_utils_error_new (NM_UTILS_ERROR_UNKNOWN,
|
||||
"meta data for interfaces not found"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -339,8 +348,8 @@ _get_config_metadata_ready_cb (GObject *source,
|
|||
iface_data,
|
||||
NULL);
|
||||
if (cancelled_id == 0) {
|
||||
_get_config_task_return (iface_data,
|
||||
nm_utils_error_new_cancelled (FALSE, NULL));
|
||||
_get_config_task_maybe_return (iface_data,
|
||||
nm_utils_error_new_cancelled (FALSE, NULL));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -411,8 +420,7 @@ _get_config_metadata_ready_cb (GObject *source,
|
|||
nm_utils_user_data_pack (iface_data, hwaddr));
|
||||
}
|
||||
|
||||
if (iface_data->n_pending == 0)
|
||||
_get_config_task_return (iface_data, NULL);
|
||||
_get_config_task_maybe_return (iface_data, NULL);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
|
|
@ -99,7 +99,6 @@ typedef struct {
|
|||
NMCSProviderGetConfigTaskData *config_data;
|
||||
guint n_ifaces_pending;
|
||||
GError *error;
|
||||
bool success:1;
|
||||
} GCPData;
|
||||
|
||||
typedef struct {
|
||||
|
@ -114,26 +113,27 @@ _get_config_maybe_task_return (GCPData *gcp_data,
|
|||
GError *error_take)
|
||||
{
|
||||
NMCSProviderGetConfigTaskData *config_data = gcp_data->config_data;
|
||||
gs_free_error GError *gcp_error = NULL;
|
||||
|
||||
if (error_take) {
|
||||
nm_clear_error (&gcp_data->error);
|
||||
gcp_data->error = error_take;
|
||||
if (!gcp_data->error)
|
||||
gcp_data->error = error_take;
|
||||
else if ( !nm_utils_error_is_cancelled (gcp_data->error)
|
||||
&& nm_utils_error_is_cancelled (error_take)) {
|
||||
nm_clear_error (&gcp_data->error);
|
||||
gcp_data->error = error_take;
|
||||
} else
|
||||
g_error_free (error_take);
|
||||
}
|
||||
|
||||
if (gcp_data->n_ifaces_pending)
|
||||
if (gcp_data->n_ifaces_pending > 0)
|
||||
return;
|
||||
|
||||
gcp_error = gcp_data->error;
|
||||
|
||||
if (!gcp_data->success) {
|
||||
nm_assert (gcp_error);
|
||||
|
||||
if (nm_utils_error_is_cancelled (gcp_error))
|
||||
if (gcp_data->error) {
|
||||
if (nm_utils_error_is_cancelled (gcp_data->error))
|
||||
_LOGD ("get-config: cancelled");
|
||||
else
|
||||
_LOGD ("get-config: failed: %s", gcp_error->message);
|
||||
g_task_return_error (config_data->task, g_steal_pointer (&gcp_error));
|
||||
_LOGD ("get-config: failed: %s", gcp_data->error->message);
|
||||
g_task_return_error (config_data->task, g_steal_pointer (&gcp_data->error));
|
||||
} else {
|
||||
_LOGD ("get-config: success");
|
||||
g_task_return_pointer (config_data->task,
|
||||
|
@ -199,15 +199,15 @@ _get_config_fip_cb (GObject *source,
|
|||
g_variant_new_string ("local"));
|
||||
routes_arr[iface_get_config->iproutes_len] = route_new;
|
||||
++iface_get_config->iproutes_len;
|
||||
gcp_data->success = TRUE;
|
||||
|
||||
iface_done:
|
||||
--iface_data->n_fips_pending;
|
||||
if (iface_data->n_fips_pending == 0) {
|
||||
nm_g_slice_free (iface_data);
|
||||
--gcp_data->n_ifaces_pending;
|
||||
_get_config_maybe_task_return (gcp_data, g_steal_pointer (&error));
|
||||
}
|
||||
|
||||
_get_config_maybe_task_return (gcp_data, g_steal_pointer (&error));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -450,7 +450,6 @@ _get_net_ifaces_list_cb (GObject *source,
|
|||
NULL,
|
||||
_get_config_iface_cb,
|
||||
data);
|
||||
|
||||
}
|
||||
|
||||
if (ifaces_arr->len == 0) {
|
||||
|
@ -473,7 +472,6 @@ get_config (NMCSProvider *provider,
|
|||
.config_data = get_config_data,
|
||||
.n_ifaces_pending = 0,
|
||||
.error = NULL,
|
||||
.success = FALSE,
|
||||
};
|
||||
|
||||
nm_http_client_poll_get (nmcs_provider_get_http_client (provider),
|
||||
|
|
Loading…
Reference in a new issue