diff --git a/framework-create-pidfile-after-os.fork-in-child-proc.patch b/framework-create-pidfile-after-os.fork-in-child-proc.patch new file mode 100644 index 0000000..cc09534 --- /dev/null +++ b/framework-create-pidfile-after-os.fork-in-child-proc.patch @@ -0,0 +1,62 @@ +From 12d0dd3662a21acdde8e2f0264ed4c8aec6e3138 Mon Sep 17 00:00:00 2001 +From: Dongxu Sun +Date: Wed, 24 Aug 2022 15:47:09 +0800 +Subject: [PATCH] framework: create pidfile after os.fork in child process + +To prevent the pidfile from being read by systemd when Skylark +does not initialize the pidfile, move create_pid_file() after +os.fork in child process. + +Signed-off-by: Dongxu Sun +--- + skylark.py | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +diff --git a/skylark.py b/skylark.py +index c281a54..6224f9b 100644 +--- a/skylark.py ++++ b/skylark.py +@@ -112,15 +112,16 @@ def create_pid_file(): + os.fchmod(fd, stat.S_IRUSR | stat.S_IWUSR) + os.close(fd) + try: +- PID_FILE = open(PID_FILE_NAME, 'w') ++ PID_FILE = open(PID_FILE_NAME, 'a') + except IOError: + LOGGER.error("Failed to open pid file") +- exit(1) ++ sys.exit(1) + + try: + fcntl.flock(PID_FILE.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB) + except IOError: + LOGGER.error("A running service instance already creates the pid file! This service will exit!") ++ PID_FILE.close() + os._exit(0) + + process_pid = os.getpid() +@@ -153,9 +154,6 @@ def func_daemon(): + @atexit.register + def daemon_exit_func(): + LIBVIRT_CONN.close() +- remove_pid_file() +- +- create_pid_file() + + LOGGER.info("Try to open libvirtd connection") + try: +@@ -186,7 +184,10 @@ def create_daemon(): + LOGGER.error('Fork daemon process failed: %d (%s)' % (error.errno, error.strerror)) + os._exit(1) + else: +- if pid: ++ if pid == 0: ++ atexit.register(remove_pid_file) ++ create_pid_file() ++ else: + os._exit(0) + os.chdir('/') + os.umask(0) +-- +2.17.1 + diff --git a/skylark.spec b/skylark.spec index 9d2b965..079e467 100644 --- a/skylark.spec +++ b/skylark.spec @@ -1,6 +1,6 @@ Name: skylark Version: 1.0.0 -Release: 4 +Release: 5 Summary: Skylark is a next-generation QoS-aware scheduler. License: Mulan PSL v2 @@ -10,6 +10,7 @@ Source0: %{name}-%{version}.tar.gz Patch0001: guestinfo-Take-another-VM-stop-reason-to-account.patch Patch0002: cpu_qos-Add-aditional-setting-for-cpu-QOS.patch Patch0003: cachembw_qos-Add-a-job-to-sync-VM-pids-to-resctrl.patch +Patch0004: framework-create-pidfile-after-os.fork-in-child-proc.patch BuildRequires: python3-devel make gcc coreutils systemd-units Requires: python3 python3-APScheduler python3-libvirt @@ -59,6 +60,9 @@ make install DESTDIR=%{buildroot} %changelog +* Thu Aug 25 2022 Dongxu Sun - 1.0.0-5 +- framework: create pidfile after os.fork in child process + * Fri Aug 19 2022 Keqian Zhu - 1.0.0-4 - guestinfo: Take another VM stop reason to account - cpu_qos: Add aditional setting for cpu QOS