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
A simple solution can be having distinct cookies between deployed versions, so clustering only happens between nodes of the same version.







