I am creating a cluster with Erlang that has a leader/follower setup. I have 3 apps that I load in my rebar.config but I don’t start them if they are a follower. If a node starts up (or becomes the leader, it starts these loaded programs. If a node starts as a follower, the loaded apps are not started. If a node goes from a leader to a follower, it stops the loaded applications that are leader-only.
I noticed loaded applications do not appear with application:which_applications/0. They do appear with application:loaded_applications/0. If I the application is running and I run application:stop(app_name). it returns:
{error,{not_started,app_name}}
If I do application:stop or app_name_app:start(ok,ok) for an app that starts when I start my Erlang program, the application runs as expected.
So, starting/stopping the application via app_name_app:stop(ok). is useless then, and likewise I get the not_started when using the application module. So what then is the best way to start/stop unloaded apps? This is leaving processes continuing to run when I intend to stop them. Should I change my loaded apps to be more aware of their state? Or is there a better solution for stopping my apps when a node moves from a leader to a follower?