More flexible cookie handling by relx?

olivier.boudeville@REDACTED olivier.boudeville@REDACTED
Tue Aug 11 13:35:45 CEST 2020


Hi,

(I cannot currently answer directly to the "Some release-related 
watchdog enabled by default?" thread, see 
https://erlang.org/pipermail/erlang-questions/2020-August/099852.html - 
hence this new thread)

Thanks Tristan for your answer. I was not aware that 'foreground' was to 
be preferred to 'daemon' when running a release (currently I have an 
issue with the former that does not show up with the latter, I will 
investigate).

Anyway, regarding the original problem, the cause of the unexplained 
"one connection attempt to the VM per second" lies probably in relx, 
precisely here: 
https://github.com/erlware/relx/blob/86ad0a3e9a9430c4537273397e8de258f1ce0721/priv/templates/extended_bin#L716 
; in daemon mode, if having switched cookie at runtime, such rpc 
interactions are bound to fail endlessly and block the operations.

A quick work-around (apparently many releases run with the 
--relx-disable-hooks option anyway?) would be to perform this polling 
iff there are post start/stop hooks defined, like in:

		# wait for node to be up before running any hooks:
		if [ -n "$POST_START_HOOKS" ]; then
			while ! erl_rpc erlang is_alive > /dev/null 2>&1
			do
				sleep 1
			done

			relx_run_hooks "$POST_START_HOOKS"

		fi

(and to do the same for post stop hooks)

Another solution (maybe better, in the sense that this would re-enable 
all rpc-based functionalities for that release script in spite of a 
runtime change in the cookie) could be to provide the user with the 
possibility of specifying a cookie through an environment variable when 
running the resulting release script; this would take place typically 
here: 
https://github.com/erlware/relx/blob/86ad0a3e9a9430c4537273397e8de258f1ce0721/priv/templates/extended_bin#L650

If, say, the RELX_OVERRIDE_COOKIE environment variable was set to such a 
"top-priority" cookie, then it would be used, otherwise the current 
cookie logic would be used [1].

Then for example start/stop scripts that are run through systemd could 
extract the right cookie from the application-specific configuration 
file, and supply it to the release script thanks to that 
RELX_OVERRIDE_COOKIE variable.

Would these changes make sense? As they both could be useful, I could 
submit a relx patch/pull-request introducing them?

Thanks in advance for any answer,
Best regards,

Olivier.

[1] The whole topic comes from the fact that one may not like the actual 
cookie to be found by any logged-in user thanks to a mere 'ps -edf | 
grep setcookie'; and if the cookie is specified in a configuration file 
instead, it may better be specified in a single, application-specific 
configuration file that is already needed for its own purposes (among 
all other settings), rather than in a separate file in a different 
location (such as vm.args).



More information about the erlang-questions mailing list