From d4793f23e8e64038b2e1ac256a32b8b2237c359d Mon Sep 17 00:00:00 2001 From: tigro Date: Wed, 16 Oct 2024 15:13:15 +0300 Subject: [PATCH] - cloud-setup: allow bigger restart bursts - cloud-setup: azure: ensure that primary address is placed first --- ...low-bigger-restart-bursts-rhel-56739.patch | 46 ++++++ ...ces-primary-address-first-rhel-56386.patch | 141 ++++++++++++++++++ SPECS/NetworkManager.spec | 10 +- 3 files changed, 196 insertions(+), 1 deletion(-) create mode 100644 SOURCES/1001-cloud-setup-allow-bigger-restart-bursts-rhel-56739.patch create mode 100644 SOURCES/1002-cloud-setup-ensure-azure-places-primary-address-first-rhel-56386.patch diff --git a/SOURCES/1001-cloud-setup-allow-bigger-restart-bursts-rhel-56739.patch b/SOURCES/1001-cloud-setup-allow-bigger-restart-bursts-rhel-56739.patch new file mode 100644 index 0000000..fd1f51d --- /dev/null +++ b/SOURCES/1001-cloud-setup-allow-bigger-restart-bursts-rhel-56739.patch @@ -0,0 +1,46 @@ +From 6016ef0813a6c048369cc27ae85fc12699bacab5 Mon Sep 17 00:00:00 2001 +From: Lubomir Rintel +Date: Tue, 27 Aug 2024 00:29:17 +0200 +Subject: [PATCH] cloud-setup: allow bigger restart bursts + +On daemon startup, we may end up enqueueing many nm-cloud-setup.service +restarts in very a short time. That is perfectly fine, just bump the +thresholds so that systemd doesn't get in the way too quickly. + +100 requests in 1 seconds seem like a fair choice -- little bit on the +conservative side, yet still giving the service manager some room to +interfere on a chance things really go awry. + +https://issues.redhat.com/browse/RHEL-49694 +(cherry picked from commit 927cff9f178911b2a146259a89bfcc9727cbd8c3) +(cherry picked from commit 4dc35c72744f8820575ab0ea4638c4ddd880547d) +(cherry picked from commit 097dfdf711d2f968d0580839f5a7a54731c68f34) +--- + src/nm-cloud-setup/nm-cloud-setup.service.in | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/src/nm-cloud-setup/nm-cloud-setup.service.in b/src/nm-cloud-setup/nm-cloud-setup.service.in +index 4aa6017e48..10acf8add6 100644 +--- a/src/nm-cloud-setup/nm-cloud-setup.service.in ++++ b/src/nm-cloud-setup/nm-cloud-setup.service.in +@@ -8,6 +8,17 @@ After=NetworkManager.service + Type=oneshot + ExecStart=@libexecdir@/nm-cloud-setup + ++# The service restart gets triggered from dispatcher script ++# (pre-up and dhcp4-change actions), possibly ending up with many ++# restart requests at the same time (e.g. on initial daemon startup ++# on a machine with multiple NICs). The systemd handles multiple ++# concurrent restart requests gracefully (the newer requests supersede ++# older, which wait for them to finish), but the default limits are way ++# too low: 5 restarts in 10 seconds. Raise that high enough for us to ++# be on the safe side. ++StartLimitIntervalSec=1 ++StartLimitBurst=100 ++ + #Environment=NM_CLOUD_SETUP_LOG=TRACE + + # Cloud providers are disabled by default. You need to +-- +2.46.0 + diff --git a/SOURCES/1002-cloud-setup-ensure-azure-places-primary-address-first-rhel-56386.patch b/SOURCES/1002-cloud-setup-ensure-azure-places-primary-address-first-rhel-56386.patch new file mode 100644 index 0000000..1db2da0 --- /dev/null +++ b/SOURCES/1002-cloud-setup-ensure-azure-places-primary-address-first-rhel-56386.patch @@ -0,0 +1,141 @@ +From 81bba3f2321939bb9fd0200a91ac0bec79960732 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= +Date: Tue, 27 Aug 2024 12:08:16 +0200 +Subject: [PATCH] cloud-setup: azure: ensure that primary address is placed + first + +The primary address is that placed at position 0 of all the IP Addresses +of the interface. Sometimes we put it in a different position in the +ipv4s array because we insert them in the order we receive, but it might +happen that the HTTP responses comes back in wrong order. + +In order to solve this, we pass the index of the IPv4 address to the +callback and the address is added in the right position directly. + +Co-authored-by: Fernando Fernandez Mancera +(cherry picked from commit 72014db629cff33611ade58190d45a714efa1bbf) +(cherry picked from commit c976e212372da9683a1e2f8618e3bcfdf21d5e25) +(cherry picked from commit 55812963fde9519bb2752c46575a740fa0fea688) +--- + src/nm-cloud-setup/nmcs-provider-azure.c | 43 ++++++++++++++++-------- + 1 file changed, 29 insertions(+), 14 deletions(-) + +diff --git a/src/nm-cloud-setup/nmcs-provider-azure.c b/src/nm-cloud-setup/nmcs-provider-azure.c +index 771c43d9ad..78eda16cbb 100644 +--- a/src/nm-cloud-setup/nmcs-provider-azure.c ++++ b/src/nm-cloud-setup/nmcs-provider-azure.c +@@ -102,6 +102,11 @@ typedef struct { + guint n_iface_data_pending; + } AzureIfaceData; + ++typedef struct { ++ AzureIfaceData *iface_data; ++ guint64 ipaddress_idx; ++} AzureIpAddressReqData; ++ + static void + _azure_iface_data_destroy(AzureIfaceData *iface_data) + { +@@ -112,7 +117,8 @@ static void + _get_config_fetch_done_cb(NMHttpClient *http_client, + GAsyncResult *result, + AzureIfaceData *iface_data, +- GetConfigFetchType fetch_type) ++ GetConfigFetchType fetch_type, ++ guint64 ipaddress_idx) + { + NMCSProviderGetConfigTaskData *get_config_data; + NMCSProviderGetConfigIfaceData *iface_get_config; +@@ -149,9 +155,7 @@ _get_config_fetch_done_cb(NMHttpClient *http_client, + _LOGD("interface[%" G_GSSIZE_FORMAT "]: received address %s", + iface_data->intern_iface_idx, + nm_inet4_ntop(tmp_addr, tmp_addr_str)); +- iface_get_config->ipv4s_arr[iface_get_config->ipv4s_len] = tmp_addr; +- iface_get_config->has_ipv4s = TRUE; +- iface_get_config->ipv4s_len++; ++ iface_get_config->ipv4s_arr[ipaddress_idx] = tmp_addr; + break; + + case GET_CONFIG_FETCH_TYPE_IPV4_SUBNET_0_ADDRESS: +@@ -203,10 +207,14 @@ _get_config_fetch_done_cb_ipv4_ipaddress_x_privateipaddress(GObject *source + GAsyncResult *result, + gpointer user_data) + { ++ AzureIpAddressReqData *ipaddress_req_data = user_data; ++ + _get_config_fetch_done_cb(NM_HTTP_CLIENT(source), + result, +- user_data, +- GET_CONFIG_FETCH_TYPE_IPV4_IPADDRESS_X_PRIVATEIPADDRESS); ++ ipaddress_req_data->iface_data, ++ GET_CONFIG_FETCH_TYPE_IPV4_IPADDRESS_X_PRIVATEIPADDRESS, ++ ipaddress_req_data->ipaddress_idx); ++ g_free(ipaddress_req_data); + } + + static void +@@ -217,7 +225,8 @@ _get_config_fetch_done_cb_ipv4_subnet_0_address(GObject *source, + _get_config_fetch_done_cb(NM_HTTP_CLIENT(source), + result, + user_data, +- GET_CONFIG_FETCH_TYPE_IPV4_SUBNET_0_ADDRESS); ++ GET_CONFIG_FETCH_TYPE_IPV4_SUBNET_0_ADDRESS, ++ 0); + } + + static void +@@ -228,7 +237,8 @@ _get_config_fetch_done_cb_ipv4_subnet_0_prefix(GObject *source, + _get_config_fetch_done_cb(NM_HTTP_CLIENT(source), + result, + user_data, +- GET_CONFIG_FETCH_TYPE_IPV4_SUBNET_0_PREFIX); ++ GET_CONFIG_FETCH_TYPE_IPV4_SUBNET_0_PREFIX, ++ 0); + } + + static void +@@ -265,9 +275,10 @@ _get_config_ips_prefix_list_cb(GObject *source, GAsyncResult *result, gpointer u + nm_sprintf_buf(iface_idx_str, "%" G_GSSIZE_FORMAT, iface_data->intern_iface_idx); + + while (nm_utils_parse_next_line(&response_str, &response_len, &line, &line_len)) { +- gint64 ips_prefix_idx; +- gs_free char *uri = NULL; +- char buf[100]; ++ AzureIpAddressReqData *ipaddress_req_data; ++ gint64 ips_prefix_idx; ++ gs_free char *uri = NULL; ++ char buf[100]; + + if (line_len == 0) + continue; +@@ -284,8 +295,11 @@ _get_config_ips_prefix_list_cb(GObject *source, GAsyncResult *result, gpointer u + if (ips_prefix_idx < 0) + continue; + +- iface_data->n_iface_data_pending++; ++ ipaddress_req_data = g_new(AzureIpAddressReqData, 1); ++ ipaddress_req_data->iface_data = iface_data; ++ ipaddress_req_data->ipaddress_idx = ips_prefix_idx; + ++ iface_data->n_iface_data_pending++; + nm_http_client_poll_req( + NM_HTTP_CLIENT(source), + (uri = _azure_uri_interfaces(iface_idx_str, +@@ -302,11 +316,12 @@ _get_config_ips_prefix_list_cb(GObject *source, GAsyncResult *result, gpointer u + NULL, + NULL, + _get_config_fetch_done_cb_ipv4_ipaddress_x_privateipaddress, +- iface_data); ++ ipaddress_req_data); + } + +- iface_data->iface_get_config->ipv4s_len = 0; + iface_data->iface_get_config->ipv4s_arr = g_new(in_addr_t, iface_data->n_iface_data_pending); ++ iface_data->iface_get_config->has_ipv4s = TRUE; ++ iface_data->iface_get_config->ipv4s_len = iface_data->n_iface_data_pending; + + { + gs_free char *uri = NULL; +-- +2.46.0 + diff --git a/SPECS/NetworkManager.spec b/SPECS/NetworkManager.spec index f9d2c8f..265750e 100644 --- a/SPECS/NetworkManager.spec +++ b/SPECS/NetworkManager.spec @@ -6,7 +6,7 @@ %global epoch_version 1 %global real_version 1.48.10 %global rpm_version %{real_version} -%global release_version 1 +%global release_version 2 %global snapshot %{nil} %global git_sha %{nil} %global bcond_default_debug 0 @@ -218,6 +218,10 @@ Source1000: 20-connectivity-msvsphere.conf # Patch0001: 0001-some.patch Patch0001: 0001-revert-change-default-value-for-ipv4.dad-timeout-from-0-to-200ms.patch +# Sources were taken from latest stable release: +Patch1001: 1001-cloud-setup-allow-bigger-restart-bursts-rhel-56739.patch +Patch1002: 1002-cloud-setup-ensure-azure-places-primary-address-first-rhel-56386.patch + # Bugfixes that are only relevant until next rebase of the package. # Patch1001: 1001-some.patch @@ -1300,6 +1304,10 @@ fi %changelog +* Wed Oct 16 2024 Arkady L. Shane - 1:1.48.10-2.inferit +- cloud-setup: allow bigger restart bursts +- cloud-setup: azure: ensure that primary address is placed first + * Fri Oct 11 2024 Arkady L. Shane - 1:1.48.10-1.inferit - Implemented connectivity checking via MSVSphere infrastructure