gavid

gavid

Horde (and other dist. super.): Managing module versions

(This question is phrased in an abstract way, because it seems to me to be a general problem. But I can create a small example on request.)

So with Horde, a supervised process can be restarted on any node.

Say I have a cluster with three nodes: A, B and C.

I also have a number of GenServers running using the Foo.V_1 module (all under a Horde.DynamicSupervisor). They each starts up other workers under another Supervisor using the Bar.V_1 module.

But, at no point do I know, if a process has been restarted before and on which node it is currently running.

Say I deploy changes to Node A, creating a Foo.V_2 module that starts up Bar.V_2 workers. I create a GenServer with Foo.V_2 called MyWorker. But, before I can deploy changes to the other two nodes, Node A crashes. So now, the Horde.DynamicSupervisor will restart MyWorker on either Node B or Node C.

The trouble is, neither Node B or Node C has the Foo.V_2 nor Bar.V_2 modules.

If I understand correctly (and please feel free to demonstrate my ignorance), then Horde will be able to use the Foo.V_2 to create the worker, but what about Bar.V_2?

Wouldn’t I now get errors from Foo.V_2 because it is trying to use Bar.V_2 to create workers but Bar.V_2 is undefined?

If I understand the situation correctly, what is the best practice for dealing with this?

First Post!

LostKobrakai

LostKobrakai

A simple solution can be having distinct cookies between deployed versions, so clustering only happens between nodes of the same version.

Last Post!

lud

lud

This looks like rolling releases for complex database migrations.

First you need to deploy all your nodes with the v1 and v2 modules, but only v1 is used.

Then you can deploy nodes using the v2 modules only.

Finally a third deployment where the v1 code is removed.

Where Next?

Popular in Questions Top

ovidiubadita
Hey all, I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New
dblack
I’ve got an issue with an app and I’ve no idea of how to troubleshoot it. I’m hoping someone here might have seen something similar. I p...
New

Other popular topics Top

baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers’ Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
msaraiva
Surface is an experimental library built on top of Phoenix LiveView and its new LiveComponent API that aims to provide a more declarative...
564 44139 214
New
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New

Latest on Elixir Forum

Elixir Forum

We're in Beta

About us Mission Statement