global singleton gen_server
Vyacheslav Levytskyy
v.levytskyy@REDACTED
Thu Dec 16 20:09:18 CET 2021
I have similar problem, and didn't find an ultimate solution yet. My
current approach is to register the singleton gen_server using {via,
my_global_module, my_regname(...)} rather than {global, ?MODULE}. In
"my_global_module" I control how a conflict is resolved between running
server and a new one. In the "resolve" callback of global:register_name
I'm able to query for each of gen_server's version and decide which of
two gen_server lives and which is to shut down. This helps also in case
of rolling updates.
Best regards,
Vyacheslav
On 16.12.2021 19:34, Roberto Ostinelli wrote:
> Not necessarily. By the time your first gen_server start you might
> already have more than one node in your cluster.
> I'm ok having other nodes joining later on, I'm trying to avoid a
> clash where multiple nodes execute the "cluster init" code
>
>
> On Thu, Dec 16, 2021 at 3:48 PM Roger Lipscombe
> <roger@REDACTED> wrote:
>
> Define "cluster start". In normal operation, there's nothing stopping
> another node from joining the cluster at some arbitrary later time,
> even days later. The first node to come up is a degenerate, single
> node cluster, no?
>
> On Thu, 16 Dec 2021 at 11:00, Roberto Ostinelli
> <ostinelli@REDACTED> wrote:
> >
> > Dear all,
> > I'm trying to run an operation only once on cluster start but
> there's clearly something that I'm missing in the global module
> (see other related question here [1]).
> >
> > Therefore this time I'm trying to have a single global
> gen_server which I start directly from application start/2
> callback with:
> > gen_server:start_link({global, ?MODULE}, ?MODULE, [], Options).
> >
> > Nodes are already connected at that point (I can see them with
> nodes()), however for some reason this registration works on all
> the nodes and I find myself with multiple gen_server registered
> globally.
> >
> > What is the proper way to register a global singleton gen_server
> at cluster level on application start? mY need is to run an
> operation only _once_ a cluster boots up.
> >
> > [1]
> http://erlang.org/pipermail/erlang-questions/2021-December/101781.html
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20211216/521101ed/attachment.htm>
More information about the erlang-questions
mailing list