Disallow epmd to send systemd notifications every time
Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
This commit is contained in:
parent
e6fdb0b601
commit
8d530e97f0
10
erlang.spec
10
erlang.spec
@ -16,7 +16,7 @@
|
||||
|
||||
Name: erlang
|
||||
Version: 18.3
|
||||
Release: 1%{?dist}
|
||||
Release: 2%{?dist}
|
||||
Summary: General-purpose programming language and runtime environment
|
||||
|
||||
Group: Development/Languages
|
||||
@ -72,6 +72,9 @@ Patch7: otp-0007-Split-off-webtool-dependency-from-tools.patch
|
||||
# Fedora specific patch
|
||||
# Add patch to crash dump on large distribution
|
||||
Patch8: otp-0008-Add-patch-to-crash-dump-on-large-distribution.patch
|
||||
# Fedora specific patch
|
||||
# Don't send unasked for systemd notifications
|
||||
Patch9: otp-0009-Don-t-send-unasked-for-systemd-notifications.patch
|
||||
# end of autogenerated patch tag list
|
||||
|
||||
BuildRequires: flex
|
||||
@ -901,6 +904,7 @@ Erlang mode for XEmacs (source lisp files).
|
||||
%patch6 -p1 -b .Do_not_install_erlang_sources
|
||||
%patch7 -p1 -b .Split_off_webtool_dependency_from_tools
|
||||
%patch8 -p1 -b .Add_patch_to_crash_dump_on_large_distribution
|
||||
%patch9 -p1 -b .Don_t_send_unasked_for_systemd_notifications
|
||||
# end of autogenerated prep patch list
|
||||
|
||||
# FIXME we should come up with a better solution
|
||||
@ -2226,6 +2230,10 @@ useradd -r -g epmd -d /tmp -s /sbin/nologin \
|
||||
|
||||
|
||||
%changelog
|
||||
* Thu Mar 31 2016 Peter Lemenkov <lemenkov@gmail.com> - 18.3-2
|
||||
- Added patch to suppress sending systemd notifications from epmd if not
|
||||
started as a systemd service.
|
||||
|
||||
* Thu Mar 24 2016 Peter Lemenkov <lemenkov@gmail.com> - 18.3-1
|
||||
- Ver. 18.3
|
||||
|
||||
|
56
otp-0009-Don-t-send-unasked-for-systemd-notifications.patch
Normal file
56
otp-0009-Don-t-send-unasked-for-systemd-notifications.patch
Normal file
@ -0,0 +1,56 @@
|
||||
From: Alexey Lebedeff <alebedev@mirantis.com>
|
||||
Date: Tue, 29 Mar 2016 20:30:22 +0300
|
||||
Subject: [PATCH] Don't send unasked for systemd notifications
|
||||
|
||||
Suppose we have some erlang system that uses systemd unit with
|
||||
Type=notify - so this should send startup confirmation itself. But if
|
||||
systemd-enabled epmd will be started as a first step of that system
|
||||
startup, empd startup confirmation will be misinterpeted by systemd. And
|
||||
our erlang service will be considered 'ready' to early. Also this will
|
||||
interefere with systemd MAINPID detection: systemd will be monitoring
|
||||
`epmd` process instead of `beam` one.
|
||||
|
||||
For example, rabbitmq works around this issue by starting epmd using
|
||||
separate short-lived beam process, with NOTIFY_SOCKET environment
|
||||
variable reset - only in this way we could be sure that epmd will not
|
||||
interfere with rabbit startup sequence.
|
||||
|
||||
This patch disables indiscriminate confirmation sending, and does it
|
||||
only when it was explicitly asked to do so.
|
||||
|
||||
diff --git a/erts/epmd/src/epmd.c b/erts/epmd/src/epmd.c
|
||||
index 5513cb2..4740ce8 100644
|
||||
--- a/erts/epmd/src/epmd.c
|
||||
+++ b/erts/epmd/src/epmd.c
|
||||
@@ -592,8 +592,10 @@ void epmd_cleanup_exit(EpmdVars *g, int exitval)
|
||||
free(g->argv);
|
||||
}
|
||||
#ifdef HAVE_SYSTEMD_DAEMON
|
||||
- sd_notifyf(0, "STATUS=Exited.\n"
|
||||
- "ERRNO=%i", exitval);
|
||||
+ if (g->is_systemd){
|
||||
+ sd_notifyf(0, "STATUS=Exited.\n"
|
||||
+ "ERRNO=%i", exitval);
|
||||
+ }
|
||||
#endif /* HAVE_SYSTEMD_DAEMON */
|
||||
exit(exitval);
|
||||
}
|
||||
diff --git a/erts/epmd/src/epmd_srv.c b/erts/epmd/src/epmd_srv.c
|
||||
index e1bac99..59d59ad 100644
|
||||
--- a/erts/epmd/src/epmd_srv.c
|
||||
+++ b/erts/epmd/src/epmd_srv.c
|
||||
@@ -452,9 +452,11 @@ void run(EpmdVars *g)
|
||||
num_sockets = bound;
|
||||
#ifdef HAVE_SYSTEMD_DAEMON
|
||||
}
|
||||
- sd_notifyf(0, "READY=1\n"
|
||||
- "STATUS=Processing port mapping requests...\n"
|
||||
- "MAINPID=%lu", (unsigned long) getpid());
|
||||
+ if (g->is_systemd) {
|
||||
+ sd_notifyf(0, "READY=1\n"
|
||||
+ "STATUS=Processing port mapping requests...\n"
|
||||
+ "MAINPID=%lu", (unsigned long) getpid());
|
||||
+ }
|
||||
#endif /* HAVE_SYSTEMD_DAEMON */
|
||||
|
||||
dbg_tty_printf(g,2,"entering the main select() loop");
|
Loading…
Reference in New Issue
Block a user