summaryrefslogtreecommitdiff
path: root/0092-isolate-oom-monitor-codes.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-09-03 03:24:28 +0000
committerCoprDistGit <infra@openeuler.org>2024-09-03 03:24:28 +0000
commite45819fcb4a96649a4030db7684f140d5ca46735 (patch)
tree544dac3e30a0448eabdc50add41aa3a18982d9f1 /0092-isolate-oom-monitor-codes.patch
parent1a71e3afebb4b43be63949dcc8e882fe7643f13b (diff)
automatic import of iSuladopeneuler24.03_LTS
Diffstat (limited to '0092-isolate-oom-monitor-codes.patch')
-rw-r--r--0092-isolate-oom-monitor-codes.patch317
1 files changed, 317 insertions, 0 deletions
diff --git a/0092-isolate-oom-monitor-codes.patch b/0092-isolate-oom-monitor-codes.patch
new file mode 100644
index 0000000..d7d61de
--- /dev/null
+++ b/0092-isolate-oom-monitor-codes.patch
@@ -0,0 +1,317 @@
+From d97656a8b99f4fa95a9c15abfbac777a94b84d55 Mon Sep 17 00:00:00 2001
+From: jikai <jikai11@huawei.com>
+Date: Mon, 20 May 2024 08:48:00 +0000
+Subject: [PATCH 092/108] isolate oom monitor codes
+
+Signed-off-by: jikai <jikai11@huawei.com>
+---
+ cmake/options.cmake | 7 +++++++
+ src/daemon/common/cgroup/cgroup.c | 2 ++
+ src/daemon/common/cgroup/cgroup.h | 2 ++
+ src/daemon/common/cgroup/cgroup_common.h | 4 ++++
+ src/daemon/common/cgroup/cgroup_v1.c | 8 ++++++++
+ src/daemon/common/cgroup/cgroup_v2.c | 8 ++++++++
+ src/daemon/common/cri/v1/v1_cri_helpers.cc | 2 ++
+ src/daemon/modules/container/container_state.c | 2 ++
+ .../modules/container/supervisor/supervisor.c | 14 ++++++++++++++
+ 9 files changed, 49 insertions(+)
+
+diff --git a/cmake/options.cmake b/cmake/options.cmake
+index a15b8194..5b17f631 100644
+--- a/cmake/options.cmake
++++ b/cmake/options.cmake
+@@ -58,6 +58,13 @@ if (ENABLE_SANDBOXER STREQUAL "ON")
+ message("${Green}-- Enable sandbox API${ColourReset}")
+ endif()
+
++option(ENABLE_OOM_MONITOR "Enable oom monitor" ON)
++IF (ENABLE_OOM_MONITOR STREQUAL "ON")
++ add_definitions(-DENABLE_OOM_MONITOR)
++ set(ENABLE_OOM_MONITOR 1)
++ message("${Green}-- Enable oom monitor${ColourReset}")
++endif()
++
+ option(ENABLE_SYSTEMD_NOTIFY "Enable systemd notify" ON)
+ if (ENABLE_SYSTEMD_NOTIFY STREQUAL "ON")
+ add_definitions(-DSYSTEMD_NOTIFY)
+diff --git a/src/daemon/common/cgroup/cgroup.c b/src/daemon/common/cgroup/cgroup.c
+index 71bf9801..77fafdae 100644
+--- a/src/daemon/common/cgroup/cgroup.c
++++ b/src/daemon/common/cgroup/cgroup.c
+@@ -197,6 +197,7 @@ char *common_convert_cgroup_path(const char *cgroup_path)
+ return util_strdup_s(result);
+ }
+
++#ifdef ENABLE_OOM_MONITOR
+ cgroup_oom_handler_info_t *common_get_cgroup_oom_handler(int fd, const char *name, const char *cgroup_path,
+ const char *exit_fifo)
+ {
+@@ -225,3 +226,4 @@ void common_free_cgroup_oom_handler_info(cgroup_oom_handler_info_t *info)
+ free(info->cgroup_memory_event_path);
+ free(info);
+ }
++#endif
+diff --git a/src/daemon/common/cgroup/cgroup.h b/src/daemon/common/cgroup/cgroup.h
+index 0bbb70a0..1ebbfa98 100644
+--- a/src/daemon/common/cgroup/cgroup.h
++++ b/src/daemon/common/cgroup/cgroup.h
+@@ -43,9 +43,11 @@ char *common_get_own_cgroup_path(const char *subsystem);
+
+ char *common_convert_cgroup_path(const char *cgroup_path);
+
++#ifdef ENABLE_OOM_MONITOR
+ cgroup_oom_handler_info_t *common_get_cgroup_oom_handler(int fd, const char *name, const char *cgroup_path,
+ const char *exit_fifo);
+ void common_free_cgroup_oom_handler_info(cgroup_oom_handler_info_t *info);
++#endif
+
+ #ifdef __cplusplus
+ }
+diff --git a/src/daemon/common/cgroup/cgroup_common.h b/src/daemon/common/cgroup/cgroup_common.h
+index 46a7de50..01fc669c 100644
+--- a/src/daemon/common/cgroup/cgroup_common.h
++++ b/src/daemon/common/cgroup/cgroup_common.h
+@@ -116,6 +116,7 @@ typedef struct {
+ cgroup_pids_metrics_t cgpids_metrics;
+ } cgroup_metrics_t;
+
++#ifdef ENABLE_OOM_MONITOR
+ #define CGROUP_OOM_HANDLE_CONTINUE false
+ #define CGROUP_OOM_HANDLE_CLOSE true
+
+@@ -126,6 +127,7 @@ typedef struct _cgroup_oom_handler_info_t {
+ char *cgroup_memory_event_path;
+ bool (*oom_event_handler)(int, void *);
+ } cgroup_oom_handler_info_t;
++#endif
+
+ typedef struct {
+ int (*get_cgroup_version)(void);
+@@ -140,8 +142,10 @@ typedef struct {
+ char *(*get_init_cgroup_path)(const char *subsystem);
+ char *(*get_own_cgroup_path)(const char *subsystem);
+
++#ifdef ENABLE_OOM_MONITOR
+ cgroup_oom_handler_info_t *(*get_cgroup_oom_handler)(int fd, const char *name, const char *cgroup_path,
+ const char *exit_fifo);
++#endif
+ } cgroup_ops;
+
+ #ifdef __cplusplus
+diff --git a/src/daemon/common/cgroup/cgroup_v1.c b/src/daemon/common/cgroup/cgroup_v1.c
+index 45b1d096..018336ea 100644
+--- a/src/daemon/common/cgroup/cgroup_v1.c
++++ b/src/daemon/common/cgroup/cgroup_v1.c
+@@ -20,12 +20,16 @@
+
+ #include <stdio.h>
+ #include <stdlib.h>
++#ifdef ENABLE_OOM_MONITOR
+ #include <sys/eventfd.h>
++#endif
+
+ #include "utils.h"
+ #include "sysinfo.h"
+ #include "err_msg.h"
++#ifdef ENABLE_OOM_MONITOR
+ #include "events_sender_api.h"
++#endif
+
+ #define CGROUP_HUGETLB_LIMIT "hugetlb.%s.limit_in_bytes"
+ #define CGROUP_MOUNT_PATH_PREFIX "/sys/fs/cgroup/"
+@@ -1052,6 +1056,7 @@ static char *common_get_cgroup_path(const char *path, const char *subsystem)
+ return res;
+ }
+
++#ifdef ENABLE_OOM_MONITOR
+ static bool oom_cb_cgroup_v1(int fd, void *cbdata)
+ {
+ cgroup_oom_handler_info_t *info = (cgroup_oom_handler_info_t *)cbdata;
+@@ -1205,6 +1210,7 @@ cleanup:
+ common_free_cgroup_oom_handler_info(info);
+ return NULL;
+ }
++#endif
+
+ char *get_init_cgroup_path_v1(const char *subsystem)
+ {
+@@ -1232,6 +1238,8 @@ int cgroup_v1_ops_init(cgroup_ops *ops)
+ ops->get_cgroup_mnt_and_root_path = get_cgroup_mnt_and_root_path_v1;
+ ops->get_init_cgroup_path = get_init_cgroup_path_v1;
+ ops->get_own_cgroup_path = get_own_cgroup_v1;
++#ifdef ENABLE_OOM_MONITOR
+ ops->get_cgroup_oom_handler = get_cgroup_oom_handler_v1;
++#endif
+ return 0;
+ }
+\ No newline at end of file
+diff --git a/src/daemon/common/cgroup/cgroup_v2.c b/src/daemon/common/cgroup/cgroup_v2.c
+index 76754dc1..ce72e6c4 100644
+--- a/src/daemon/common/cgroup/cgroup_v2.c
++++ b/src/daemon/common/cgroup/cgroup_v2.c
+@@ -17,14 +17,18 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <sys/stat.h>
++#ifdef ENABLE_OOM_MONITOR
+ #include <sys/inotify.h>
++#endif
+
+ #include <isula_libutils/auto_cleanup.h>
+
+ #include "utils.h"
+ #include "path.h"
+ #include "sysinfo.h"
++#ifdef ENABLE_OOM_MONITOR
+ #include "events_sender_api.h"
++#endif
+
+ // Cgroup V2 Item Definition
+ #define CGROUP2_CPU_WEIGHT "cpu.weight"
+@@ -416,6 +420,7 @@ static int get_cgroup_mnt_and_root_v2(const char *subsystem, char **mountpoint,
+ return 0;
+ }
+
++#ifdef ENABLE_OOM_MONITOR
+ static bool oom_cb_cgroup_v2(int fd, void *cbdata)
+ {
+ const size_t events_size = sizeof(struct inotify_event) + NAME_MAX + 1;
+@@ -547,6 +552,7 @@ cleanup:
+ common_free_cgroup_oom_handler_info(info);
+ return NULL;
+ }
++#endif
+
+ int get_cgroup_version_v2()
+ {
+@@ -562,6 +568,8 @@ int cgroup_v2_ops_init(cgroup_ops *ops)
+ ops->get_cgroup_info = get_cgroup_info_v2;
+ ops->get_cgroup_metrics = get_cgroup_metrics_v2;
+ ops->get_cgroup_mnt_and_root_path = get_cgroup_mnt_and_root_v2;
++#ifdef ENABLE_OOM_MONITOR
+ ops->get_cgroup_oom_handler = get_cgroup_oom_handler_v2;
++#endif
+ return 0;
+ }
+\ No newline at end of file
+diff --git a/src/daemon/common/cri/v1/v1_cri_helpers.cc b/src/daemon/common/cri/v1/v1_cri_helpers.cc
+index 478dd105..31b6b137 100644
+--- a/src/daemon/common/cri/v1/v1_cri_helpers.cc
++++ b/src/daemon/common/cri/v1/v1_cri_helpers.cc
+@@ -517,9 +517,11 @@ void UpdateBaseStatusFromInspect(
+ } else { // Case 3
+ state = runtime::v1::CONTAINER_CREATED;
+ }
++#ifdef ENABLE_OOM_MONITOR
+ if (inspect->state->oom_killed == true) {
+ reason = "OOMKilled";
+ }
++#endif
+ if (inspect->state->error != nullptr) {
+ message = inspect->state->error;
+ }
+diff --git a/src/daemon/modules/container/container_state.c b/src/daemon/modules/container/container_state.c
+index 452a2b26..f8ad0537 100644
+--- a/src/daemon/modules/container/container_state.c
++++ b/src/daemon/modules/container/container_state.c
+@@ -587,7 +587,9 @@ container_inspect_state *container_state_to_inspect_state(container_state_t *s)
+ state->running = s->state->running;
+ state->paused = s->state->paused;
+ state->restarting = s->state->restarting;
++#ifdef ENABLE_OOM_MONITOR
+ state->oom_killed = s->state->oom_killed;
++#endif
+ state->pid = s->state->pid;
+
+ state->exit_code = s->state->exit_code;
+diff --git a/src/daemon/modules/container/supervisor/supervisor.c b/src/daemon/modules/container/supervisor/supervisor.c
+index 39d9fdb8..294783eb 100644
+--- a/src/daemon/modules/container/supervisor/supervisor.c
++++ b/src/daemon/modules/container/supervisor/supervisor.c
+@@ -42,8 +42,10 @@
+ #ifdef ENABLE_CRI_API_V1
+ #include "sandbox_ops.h"
+ #endif
++#ifdef ENABLE_OOM_MONITOR
+ #include "cgroup.h"
+ #include "specs_api.h"
++#endif
+
+ pthread_mutex_t g_supervisor_lock = PTHREAD_MUTEX_INITIALIZER;
+ struct epoll_descr g_supervisor_descr;
+@@ -286,6 +288,7 @@ static int supervisor_exit_cb(int fd, uint32_t events, void *cbdata, struct epol
+ return EPOLL_LOOP_HANDLE_CONTINUE;
+ }
+
++#ifdef ENABLE_OOM_MONITOR
+ static int oom_handle_cb(int fd, uint32_t events, void *cbdata, struct epoll_descr *descr)
+ {
+ cgroup_oom_handler_info_t *oom_handler_info = (cgroup_oom_handler_info_t *)cbdata;
+@@ -305,6 +308,7 @@ static int oom_handle_cb(int fd, uint32_t events, void *cbdata, struct epoll_des
+
+ return EPOLL_LOOP_HANDLE_CONTINUE;
+ }
++#endif
+
+ /* supervisor add exit monitor */
+ int container_supervisor_add_exit_monitor(int fd, const char *exit_fifo, const pid_ppid_info_t *pid_info,
+@@ -312,8 +316,10 @@ int container_supervisor_add_exit_monitor(int fd, const char *exit_fifo, const p
+ {
+ int ret = 0;
+ struct supervisor_handler_data *data = NULL;
++#ifdef ENABLE_OOM_MONITOR
+ cgroup_oom_handler_info_t *oom_handler_info = NULL;
+ __isula_auto_free char *cgroup_path = NULL;
++#endif
+
+ if (fd < 0) {
+ ERROR("Invalid exit fifo fd");
+@@ -326,12 +332,14 @@ int container_supervisor_add_exit_monitor(int fd, const char *exit_fifo, const p
+ return -1;
+ }
+
++#ifdef ENABLE_OOM_MONITOR
+ cgroup_path = merge_container_cgroups_path(cont->common_config->id, cont->hostconfig);
+ if (cgroup_path == NULL) {
+ ERROR("Failed to get cgroup path");
+ close(fd);
+ return -1;
+ }
++#endif
+
+ data = util_common_calloc_s(sizeof(struct supervisor_handler_data));
+ if (data == NULL) {
+@@ -353,9 +361,12 @@ int container_supervisor_add_exit_monitor(int fd, const char *exit_fifo, const p
+ data->pid_info.start_time = pid_info->start_time;
+ data->pid_info.ppid = pid_info->ppid;
+ data->pid_info.pstart_time = pid_info->pstart_time;
++#ifdef ENABLE_OOM_MONITOR
+ oom_handler_info = common_get_cgroup_oom_handler(fd, cont->common_config->id, cgroup_path, exit_fifo);
++#endif
+
+ supervisor_handler_lock();
++#ifdef ENABLE_OOM_MONITOR
+ if (oom_handler_info != NULL) {
+ ret = epoll_loop_add_handler(&g_supervisor_descr, oom_handler_info->oom_event_fd, oom_handle_cb, oom_handler_info);
+ if (ret != 0) {
+@@ -363,6 +374,7 @@ int container_supervisor_add_exit_monitor(int fd, const char *exit_fifo, const p
+ goto err;
+ }
+ }
++#endif
+
+ ret = epoll_loop_add_handler(&g_supervisor_descr, fd, supervisor_exit_cb, data);
+ if (ret != 0) {
+@@ -374,7 +386,9 @@ int container_supervisor_add_exit_monitor(int fd, const char *exit_fifo, const p
+
+ err:
+ supervisor_handler_data_free(data);
++#ifdef ENABLE_OOM_MONITOR
+ common_free_cgroup_oom_handler_info(oom_handler_info);
++#endif
+ out:
+ supervisor_handler_unlock();
+ return ret;
+--
+2.25.1
+