madclaws

madclaws

Mnesia not reading from disk on a new docker deployment (mix release)

Hi guys,

We have a phoenix application, deployed with mix releases inside docker.

We are trying to use mnesia (disk_copies) inside docker using volumes.

This is working fine when we deploy a new container and even on restarting the container. We can read/write from mnesia (from disk).

Below is the :mnesia.info output, we can see tables are in disk_copies

---> Active tables <--- 
Elixir.GamestateTimeTrial: with 0        records occupying 305      words of mem
Elixir.GamestateTrickShot: with 0        records occupying 305      words of mem
Elixir.GamestateClassic: with 0        records occupying 305      words of mem
schema         : with 4        records occupying 775      words of mem
===> System info in version "4.19.1", debug level = none <===
opt_disc. Directory "/home/elixir/app/mnesiadb" is used.
use fallback at restart = false
running db nodes   = [deadpool@7e1ae5afa43d]
stopped db nodes   = [] 
master node tables = []
remote             = []
ram_copies         = []
disc_copies        = ['Elixir.GamestateClassic','Elixir.GamestateTimeTrial',
                      'Elixir.GamestateTrickShot',schema]
disc_only_copies   = []
[{deadpool@7e1ae5afa43d,disc_copies}] = [schema,'Elixir.GamestateClassic',
                                         'Elixir.GamestateTrickShot',
                                         'Elixir.GamestateTimeTrial']
5 transactions committed, 0 aborted, 0 restarted, 6 logged to disc
0 held locks, 0 in queue; 0 local transactions, 0 remote
0 transactions waits for other nodes: []
:ok

Now the issue is when we deploy a new container of same image (by stopping the old one), and same volume
mnesia is trying to read from ram_copies instead of disk_copies.

we can see disk_copies list is empty contrary to the previous output

---> Active tables <--- 
schema         : with 4        records occupying 775      words of mem
===> System info in version "4.19.1", debug level = none <===
opt_disc. Directory "/home/elixir/app/mnesiadb" is used.
use fallback at restart = false
running db nodes   = [deadpool@bf64da26fdbd]
stopped db nodes   = [deadpool@7e1ae5afa43d] 
master node tables = []
remote             = ['Elixir.GamestateClassic','Elixir.GamestateTimeTrial',
                      'Elixir.GamestateTrickShot']
ram_copies         = [schema]
disc_copies        = []
disc_only_copies   = []
[] = ['Elixir.GamestateTrickShot','Elixir.GamestateClassic',
      'Elixir.GamestateTimeTrial']
[{deadpool@bf64da26fdbd,ram_copies}] = [schema]
2 transactions committed, 3 aborted, 0 restarted, 0 logged to disc
0 held locks, 0 in queue; 0 local transactions, 0 remote
0 transactions waits for other nodes: []
:ok

We can see here that the old stopped container is mentioned in stopped db nodes = [deadpool@7e1ae5afa43d] .

We tried copy tables to disk on every migrations with Mnesia.change_table_copy_type(GamestateClassic, node(), :disc_copies), but we got Tables doesn’t exist.

So basically on a new deployment of a docker image (ex after we do some changes in codebase) with existing volume, mnesia is not reading from disk_copies but works if we just restarts the container.

Any help is much appreciated.

Marked As Solved

ghostdsb

ghostdsb

This problem occurs because erlang uses the hostname as the node name. But in docker, the hostname changes on every new deployment. We can make the node name the same by adding a hostname to the docker container.

Found the answer here.

Where Next?

Popular in Questions Top

vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
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
jay1
Why is it that the mnesia database isn’t the most preferred database for use in Elixir/Phoenix?
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
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
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New

Other popular topics Top

vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
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
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
gausby
I asked this very same question on twitter and got some interesting feedback, but I thought it would be a good question to ask here as we...
1207 40165 209
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New

We're in Beta

About us Mission Statement