DynamicSupervisor - problem with communication with the workers
I have a problem with communication with the workers created in my dynamicSupervisor. after start all my workers i try make a call to one by pid and is generated one error (always).
At the beginning of the child I keep the pid with ets. Then when I want to make a call to this child I get the pid from the ets by an identifier. So far so good.
The problem is when I do the following:
GenServer.call(
pid,
{:action_project, %{project_id: project_id, pid: :erlang.pid_to_list(pid)}}
)
returns following error:
[error] GenServer #PID<0.606.0> terminating
** (RuntimeError) attempted to call GenServer #PID<0.606.0> but no handle_call/3 clause was provided
(backercamp) lib/gen_server.ex:693: MyApplication.ProjectWorker.handle_call/3
(stdlib) gen_server.erl:661: :gen_server.try_handle_call/4
(stdlib) gen_server.erl:690: :gen_server.handle_msg/6
(stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
Last message (from #PID<0.680.0>): {:action_project, %{pid: '<0.606.0>', project_id: "23"}}
State: %{pid: '<0.606.0>', project_id: "23"}
Client #PID<0.680.0> is alive
(stdlib) gen.erl:169: :gen.do_call/4
(elixir) lib/gen_server.ex:921: GenServer.call/3
What's the problem with this call?
DynamicSupervisor code:
defmodule MyApplication.Supervisor do
use DynamicSupervisor
alias MyApplication.Management
def start_link(arg) do
DynamicSupervisor.start_link(__MODULE__, arg, name: __MODULE__)
end
def init(arg) do
DynamicSupervisor.init(arg)
end
def start_project_worker(project_id) do
spec = {MyApplication.ProjectWorker, %{project_id: project_id}}
DynamicSupervisor.start_child(__MODULE__, spec)
end
def start_all_project_workers() do
Enum.each(Management.list_all_projects(), fn %{id: project_id} ->
IO.puts("Started for project Id [#{project_id}]")
# 1s between workers
:timer.sleep(1000)
start_project_worker("#{project_id}")
end)
end
def action_project(pid, project_id) do
GenServer.call(
pid,
{:action_project, %{project_id: project_id, pid: :erlang.pid_to_list(pid)}}
)
end
end
Worker code:
defmodule MyApplication.ProjectWorker do
use GenServer, restart: :transient
alias MyApplication.Settings
alias MyApplication.Management
def start_link(state) do
GenServer.start_link(__MODULE__, state)
end
def init(state) do
schedule_action_project(Settings.get_frequency_ms())
state = Map.put(state, :pid, :erlang.pid_to_list(self()))
persist_state(state)
{:ok, state}
end
def handle_info(:schedule_action_project, %{project_id: _project_id, pid: _pid} = state) do
action_by_state(state)
{:noreply, state}
end
def handle_call({:action_project}, %{project_id: _project_id, pid: _pid} = state) do
case action_by_state(state) do
true ->
terminate(state)
false ->
{:reply, state, state}
end
end
defp persist_state(state) do
IO.puts(" :: Add project_id [#{state.project_id}] and pid #{state.pid}")
:ets.insert_new(:project_backup, {state.project_id, state.pid})
end
defp delete_persist_state(project_id) do
IO.puts(" :: Delete project_id [#{project_id}]")
:ets.delete(:project_backup, project_id)
end
defp schedule_action_project(time) do
IO.puts(" :: Schedule_action_project [#{time}]")
Process.send_after(self(), :schedule_action_project, time)
end
defp terminate(%{project_id: project_id, pid: _pid} = state) do
IO.puts(
" :: Stop processed, everything is done! project_id [#{state.project_id}] and pid #{
state.pid
}"
)
delete_persist_state(project_id)
{:stop, :normal, state}
end
defp action_by_state(%{project_id: _project_id, pid: _pid} = state) do
action_by_project(Management.get_project!(state.project_id))
end
defp action_by_project(%Project{} = project) do
#do something in project
end
end
erlang elixir otp supervisor elixir-framework
add a comment |
I have a problem with communication with the workers created in my dynamicSupervisor. after start all my workers i try make a call to one by pid and is generated one error (always).
At the beginning of the child I keep the pid with ets. Then when I want to make a call to this child I get the pid from the ets by an identifier. So far so good.
The problem is when I do the following:
GenServer.call(
pid,
{:action_project, %{project_id: project_id, pid: :erlang.pid_to_list(pid)}}
)
returns following error:
[error] GenServer #PID<0.606.0> terminating
** (RuntimeError) attempted to call GenServer #PID<0.606.0> but no handle_call/3 clause was provided
(backercamp) lib/gen_server.ex:693: MyApplication.ProjectWorker.handle_call/3
(stdlib) gen_server.erl:661: :gen_server.try_handle_call/4
(stdlib) gen_server.erl:690: :gen_server.handle_msg/6
(stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
Last message (from #PID<0.680.0>): {:action_project, %{pid: '<0.606.0>', project_id: "23"}}
State: %{pid: '<0.606.0>', project_id: "23"}
Client #PID<0.680.0> is alive
(stdlib) gen.erl:169: :gen.do_call/4
(elixir) lib/gen_server.ex:921: GenServer.call/3
What's the problem with this call?
DynamicSupervisor code:
defmodule MyApplication.Supervisor do
use DynamicSupervisor
alias MyApplication.Management
def start_link(arg) do
DynamicSupervisor.start_link(__MODULE__, arg, name: __MODULE__)
end
def init(arg) do
DynamicSupervisor.init(arg)
end
def start_project_worker(project_id) do
spec = {MyApplication.ProjectWorker, %{project_id: project_id}}
DynamicSupervisor.start_child(__MODULE__, spec)
end
def start_all_project_workers() do
Enum.each(Management.list_all_projects(), fn %{id: project_id} ->
IO.puts("Started for project Id [#{project_id}]")
# 1s between workers
:timer.sleep(1000)
start_project_worker("#{project_id}")
end)
end
def action_project(pid, project_id) do
GenServer.call(
pid,
{:action_project, %{project_id: project_id, pid: :erlang.pid_to_list(pid)}}
)
end
end
Worker code:
defmodule MyApplication.ProjectWorker do
use GenServer, restart: :transient
alias MyApplication.Settings
alias MyApplication.Management
def start_link(state) do
GenServer.start_link(__MODULE__, state)
end
def init(state) do
schedule_action_project(Settings.get_frequency_ms())
state = Map.put(state, :pid, :erlang.pid_to_list(self()))
persist_state(state)
{:ok, state}
end
def handle_info(:schedule_action_project, %{project_id: _project_id, pid: _pid} = state) do
action_by_state(state)
{:noreply, state}
end
def handle_call({:action_project}, %{project_id: _project_id, pid: _pid} = state) do
case action_by_state(state) do
true ->
terminate(state)
false ->
{:reply, state, state}
end
end
defp persist_state(state) do
IO.puts(" :: Add project_id [#{state.project_id}] and pid #{state.pid}")
:ets.insert_new(:project_backup, {state.project_id, state.pid})
end
defp delete_persist_state(project_id) do
IO.puts(" :: Delete project_id [#{project_id}]")
:ets.delete(:project_backup, project_id)
end
defp schedule_action_project(time) do
IO.puts(" :: Schedule_action_project [#{time}]")
Process.send_after(self(), :schedule_action_project, time)
end
defp terminate(%{project_id: project_id, pid: _pid} = state) do
IO.puts(
" :: Stop processed, everything is done! project_id [#{state.project_id}] and pid #{
state.pid
}"
)
delete_persist_state(project_id)
{:stop, :normal, state}
end
defp action_by_state(%{project_id: _project_id, pid: _pid} = state) do
action_by_project(Management.get_project!(state.project_id))
end
defp action_by_project(%Project{} = project) do
#do something in project
end
end
erlang elixir otp supervisor elixir-framework
What error do you get? Post the stack trace here.
– Aleksei Matiushkin
Nov 23 '18 at 11:08
add a comment |
I have a problem with communication with the workers created in my dynamicSupervisor. after start all my workers i try make a call to one by pid and is generated one error (always).
At the beginning of the child I keep the pid with ets. Then when I want to make a call to this child I get the pid from the ets by an identifier. So far so good.
The problem is when I do the following:
GenServer.call(
pid,
{:action_project, %{project_id: project_id, pid: :erlang.pid_to_list(pid)}}
)
returns following error:
[error] GenServer #PID<0.606.0> terminating
** (RuntimeError) attempted to call GenServer #PID<0.606.0> but no handle_call/3 clause was provided
(backercamp) lib/gen_server.ex:693: MyApplication.ProjectWorker.handle_call/3
(stdlib) gen_server.erl:661: :gen_server.try_handle_call/4
(stdlib) gen_server.erl:690: :gen_server.handle_msg/6
(stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
Last message (from #PID<0.680.0>): {:action_project, %{pid: '<0.606.0>', project_id: "23"}}
State: %{pid: '<0.606.0>', project_id: "23"}
Client #PID<0.680.0> is alive
(stdlib) gen.erl:169: :gen.do_call/4
(elixir) lib/gen_server.ex:921: GenServer.call/3
What's the problem with this call?
DynamicSupervisor code:
defmodule MyApplication.Supervisor do
use DynamicSupervisor
alias MyApplication.Management
def start_link(arg) do
DynamicSupervisor.start_link(__MODULE__, arg, name: __MODULE__)
end
def init(arg) do
DynamicSupervisor.init(arg)
end
def start_project_worker(project_id) do
spec = {MyApplication.ProjectWorker, %{project_id: project_id}}
DynamicSupervisor.start_child(__MODULE__, spec)
end
def start_all_project_workers() do
Enum.each(Management.list_all_projects(), fn %{id: project_id} ->
IO.puts("Started for project Id [#{project_id}]")
# 1s between workers
:timer.sleep(1000)
start_project_worker("#{project_id}")
end)
end
def action_project(pid, project_id) do
GenServer.call(
pid,
{:action_project, %{project_id: project_id, pid: :erlang.pid_to_list(pid)}}
)
end
end
Worker code:
defmodule MyApplication.ProjectWorker do
use GenServer, restart: :transient
alias MyApplication.Settings
alias MyApplication.Management
def start_link(state) do
GenServer.start_link(__MODULE__, state)
end
def init(state) do
schedule_action_project(Settings.get_frequency_ms())
state = Map.put(state, :pid, :erlang.pid_to_list(self()))
persist_state(state)
{:ok, state}
end
def handle_info(:schedule_action_project, %{project_id: _project_id, pid: _pid} = state) do
action_by_state(state)
{:noreply, state}
end
def handle_call({:action_project}, %{project_id: _project_id, pid: _pid} = state) do
case action_by_state(state) do
true ->
terminate(state)
false ->
{:reply, state, state}
end
end
defp persist_state(state) do
IO.puts(" :: Add project_id [#{state.project_id}] and pid #{state.pid}")
:ets.insert_new(:project_backup, {state.project_id, state.pid})
end
defp delete_persist_state(project_id) do
IO.puts(" :: Delete project_id [#{project_id}]")
:ets.delete(:project_backup, project_id)
end
defp schedule_action_project(time) do
IO.puts(" :: Schedule_action_project [#{time}]")
Process.send_after(self(), :schedule_action_project, time)
end
defp terminate(%{project_id: project_id, pid: _pid} = state) do
IO.puts(
" :: Stop processed, everything is done! project_id [#{state.project_id}] and pid #{
state.pid
}"
)
delete_persist_state(project_id)
{:stop, :normal, state}
end
defp action_by_state(%{project_id: _project_id, pid: _pid} = state) do
action_by_project(Management.get_project!(state.project_id))
end
defp action_by_project(%Project{} = project) do
#do something in project
end
end
erlang elixir otp supervisor elixir-framework
I have a problem with communication with the workers created in my dynamicSupervisor. after start all my workers i try make a call to one by pid and is generated one error (always).
At the beginning of the child I keep the pid with ets. Then when I want to make a call to this child I get the pid from the ets by an identifier. So far so good.
The problem is when I do the following:
GenServer.call(
pid,
{:action_project, %{project_id: project_id, pid: :erlang.pid_to_list(pid)}}
)
returns following error:
[error] GenServer #PID<0.606.0> terminating
** (RuntimeError) attempted to call GenServer #PID<0.606.0> but no handle_call/3 clause was provided
(backercamp) lib/gen_server.ex:693: MyApplication.ProjectWorker.handle_call/3
(stdlib) gen_server.erl:661: :gen_server.try_handle_call/4
(stdlib) gen_server.erl:690: :gen_server.handle_msg/6
(stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
Last message (from #PID<0.680.0>): {:action_project, %{pid: '<0.606.0>', project_id: "23"}}
State: %{pid: '<0.606.0>', project_id: "23"}
Client #PID<0.680.0> is alive
(stdlib) gen.erl:169: :gen.do_call/4
(elixir) lib/gen_server.ex:921: GenServer.call/3
What's the problem with this call?
DynamicSupervisor code:
defmodule MyApplication.Supervisor do
use DynamicSupervisor
alias MyApplication.Management
def start_link(arg) do
DynamicSupervisor.start_link(__MODULE__, arg, name: __MODULE__)
end
def init(arg) do
DynamicSupervisor.init(arg)
end
def start_project_worker(project_id) do
spec = {MyApplication.ProjectWorker, %{project_id: project_id}}
DynamicSupervisor.start_child(__MODULE__, spec)
end
def start_all_project_workers() do
Enum.each(Management.list_all_projects(), fn %{id: project_id} ->
IO.puts("Started for project Id [#{project_id}]")
# 1s between workers
:timer.sleep(1000)
start_project_worker("#{project_id}")
end)
end
def action_project(pid, project_id) do
GenServer.call(
pid,
{:action_project, %{project_id: project_id, pid: :erlang.pid_to_list(pid)}}
)
end
end
Worker code:
defmodule MyApplication.ProjectWorker do
use GenServer, restart: :transient
alias MyApplication.Settings
alias MyApplication.Management
def start_link(state) do
GenServer.start_link(__MODULE__, state)
end
def init(state) do
schedule_action_project(Settings.get_frequency_ms())
state = Map.put(state, :pid, :erlang.pid_to_list(self()))
persist_state(state)
{:ok, state}
end
def handle_info(:schedule_action_project, %{project_id: _project_id, pid: _pid} = state) do
action_by_state(state)
{:noreply, state}
end
def handle_call({:action_project}, %{project_id: _project_id, pid: _pid} = state) do
case action_by_state(state) do
true ->
terminate(state)
false ->
{:reply, state, state}
end
end
defp persist_state(state) do
IO.puts(" :: Add project_id [#{state.project_id}] and pid #{state.pid}")
:ets.insert_new(:project_backup, {state.project_id, state.pid})
end
defp delete_persist_state(project_id) do
IO.puts(" :: Delete project_id [#{project_id}]")
:ets.delete(:project_backup, project_id)
end
defp schedule_action_project(time) do
IO.puts(" :: Schedule_action_project [#{time}]")
Process.send_after(self(), :schedule_action_project, time)
end
defp terminate(%{project_id: project_id, pid: _pid} = state) do
IO.puts(
" :: Stop processed, everything is done! project_id [#{state.project_id}] and pid #{
state.pid
}"
)
delete_persist_state(project_id)
{:stop, :normal, state}
end
defp action_by_state(%{project_id: _project_id, pid: _pid} = state) do
action_by_project(Management.get_project!(state.project_id))
end
defp action_by_project(%Project{} = project) do
#do something in project
end
end
erlang elixir otp supervisor elixir-framework
erlang elixir otp supervisor elixir-framework
edited Nov 23 '18 at 11:14
Nuno_Coletiv
asked Nov 23 '18 at 11:05
Nuno_ColetivNuno_Coletiv
117111
117111
What error do you get? Post the stack trace here.
– Aleksei Matiushkin
Nov 23 '18 at 11:08
add a comment |
What error do you get? Post the stack trace here.
– Aleksei Matiushkin
Nov 23 '18 at 11:08
What error do you get? Post the stack trace here.
– Aleksei Matiushkin
Nov 23 '18 at 11:08
What error do you get? Post the stack trace here.
– Aleksei Matiushkin
Nov 23 '18 at 11:08
add a comment |
1 Answer
1
active
oldest
votes
The issue is within a handler. You messed all the arguments up. state
is an internal state of GenServer
, you do not pass it through, you receive it in the callback. The following signature will match if your state is a map having keys project_id
and pid
and you call it like GenServer.call(pid, {:action_project})
.
def handle_call({:action_project}, %{project_id: _project_id, pid: _pid} = state)
You should change this handler to match your caller:
def handle_call(
{:action_project, %{project_id: _project_id, pid: _pid}},
_from,
state
)
Also note that handle_call
callback receives three parameters (unlike handle_cast
, the second one being the source of the message.
Sidenote: handle_info
callback has the wrong signature as well.
ohhh you is a machine :D you right in relation to handle_call ... And what is wrong in handle_info?
– Nuno_Coletiv
Nov 23 '18 at 11:29
1
The same, I guess. I am not sure what the state is though.
– Aleksei Matiushkin
Nov 23 '18 at 11:33
another doubt. Is it possible to know at the beginning of a child if it comes from a restart? or have different init functions of child?
– Nuno_Coletiv
Nov 23 '18 at 12:23
I am not sure I follow. If you need a differentinit
, the simplest way would be to create another module.
– Aleksei Matiushkin
Nov 23 '18 at 12:26
1
Nope. As a workaround, you might put something like a flag to DETS on the very first start, check this flag frominit
and behave accordingly.
– Aleksei Matiushkin
Nov 23 '18 at 12:45
|
show 1 more comment
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53445520%2fdynamicsupervisor-problem-with-communication-with-the-workers%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The issue is within a handler. You messed all the arguments up. state
is an internal state of GenServer
, you do not pass it through, you receive it in the callback. The following signature will match if your state is a map having keys project_id
and pid
and you call it like GenServer.call(pid, {:action_project})
.
def handle_call({:action_project}, %{project_id: _project_id, pid: _pid} = state)
You should change this handler to match your caller:
def handle_call(
{:action_project, %{project_id: _project_id, pid: _pid}},
_from,
state
)
Also note that handle_call
callback receives three parameters (unlike handle_cast
, the second one being the source of the message.
Sidenote: handle_info
callback has the wrong signature as well.
ohhh you is a machine :D you right in relation to handle_call ... And what is wrong in handle_info?
– Nuno_Coletiv
Nov 23 '18 at 11:29
1
The same, I guess. I am not sure what the state is though.
– Aleksei Matiushkin
Nov 23 '18 at 11:33
another doubt. Is it possible to know at the beginning of a child if it comes from a restart? or have different init functions of child?
– Nuno_Coletiv
Nov 23 '18 at 12:23
I am not sure I follow. If you need a differentinit
, the simplest way would be to create another module.
– Aleksei Matiushkin
Nov 23 '18 at 12:26
1
Nope. As a workaround, you might put something like a flag to DETS on the very first start, check this flag frominit
and behave accordingly.
– Aleksei Matiushkin
Nov 23 '18 at 12:45
|
show 1 more comment
The issue is within a handler. You messed all the arguments up. state
is an internal state of GenServer
, you do not pass it through, you receive it in the callback. The following signature will match if your state is a map having keys project_id
and pid
and you call it like GenServer.call(pid, {:action_project})
.
def handle_call({:action_project}, %{project_id: _project_id, pid: _pid} = state)
You should change this handler to match your caller:
def handle_call(
{:action_project, %{project_id: _project_id, pid: _pid}},
_from,
state
)
Also note that handle_call
callback receives three parameters (unlike handle_cast
, the second one being the source of the message.
Sidenote: handle_info
callback has the wrong signature as well.
ohhh you is a machine :D you right in relation to handle_call ... And what is wrong in handle_info?
– Nuno_Coletiv
Nov 23 '18 at 11:29
1
The same, I guess. I am not sure what the state is though.
– Aleksei Matiushkin
Nov 23 '18 at 11:33
another doubt. Is it possible to know at the beginning of a child if it comes from a restart? or have different init functions of child?
– Nuno_Coletiv
Nov 23 '18 at 12:23
I am not sure I follow. If you need a differentinit
, the simplest way would be to create another module.
– Aleksei Matiushkin
Nov 23 '18 at 12:26
1
Nope. As a workaround, you might put something like a flag to DETS on the very first start, check this flag frominit
and behave accordingly.
– Aleksei Matiushkin
Nov 23 '18 at 12:45
|
show 1 more comment
The issue is within a handler. You messed all the arguments up. state
is an internal state of GenServer
, you do not pass it through, you receive it in the callback. The following signature will match if your state is a map having keys project_id
and pid
and you call it like GenServer.call(pid, {:action_project})
.
def handle_call({:action_project}, %{project_id: _project_id, pid: _pid} = state)
You should change this handler to match your caller:
def handle_call(
{:action_project, %{project_id: _project_id, pid: _pid}},
_from,
state
)
Also note that handle_call
callback receives three parameters (unlike handle_cast
, the second one being the source of the message.
Sidenote: handle_info
callback has the wrong signature as well.
The issue is within a handler. You messed all the arguments up. state
is an internal state of GenServer
, you do not pass it through, you receive it in the callback. The following signature will match if your state is a map having keys project_id
and pid
and you call it like GenServer.call(pid, {:action_project})
.
def handle_call({:action_project}, %{project_id: _project_id, pid: _pid} = state)
You should change this handler to match your caller:
def handle_call(
{:action_project, %{project_id: _project_id, pid: _pid}},
_from,
state
)
Also note that handle_call
callback receives three parameters (unlike handle_cast
, the second one being the source of the message.
Sidenote: handle_info
callback has the wrong signature as well.
answered Nov 23 '18 at 11:12
Aleksei MatiushkinAleksei Matiushkin
84.5k95795
84.5k95795
ohhh you is a machine :D you right in relation to handle_call ... And what is wrong in handle_info?
– Nuno_Coletiv
Nov 23 '18 at 11:29
1
The same, I guess. I am not sure what the state is though.
– Aleksei Matiushkin
Nov 23 '18 at 11:33
another doubt. Is it possible to know at the beginning of a child if it comes from a restart? or have different init functions of child?
– Nuno_Coletiv
Nov 23 '18 at 12:23
I am not sure I follow. If you need a differentinit
, the simplest way would be to create another module.
– Aleksei Matiushkin
Nov 23 '18 at 12:26
1
Nope. As a workaround, you might put something like a flag to DETS on the very first start, check this flag frominit
and behave accordingly.
– Aleksei Matiushkin
Nov 23 '18 at 12:45
|
show 1 more comment
ohhh you is a machine :D you right in relation to handle_call ... And what is wrong in handle_info?
– Nuno_Coletiv
Nov 23 '18 at 11:29
1
The same, I guess. I am not sure what the state is though.
– Aleksei Matiushkin
Nov 23 '18 at 11:33
another doubt. Is it possible to know at the beginning of a child if it comes from a restart? or have different init functions of child?
– Nuno_Coletiv
Nov 23 '18 at 12:23
I am not sure I follow. If you need a differentinit
, the simplest way would be to create another module.
– Aleksei Matiushkin
Nov 23 '18 at 12:26
1
Nope. As a workaround, you might put something like a flag to DETS on the very first start, check this flag frominit
and behave accordingly.
– Aleksei Matiushkin
Nov 23 '18 at 12:45
ohhh you is a machine :D you right in relation to handle_call ... And what is wrong in handle_info?
– Nuno_Coletiv
Nov 23 '18 at 11:29
ohhh you is a machine :D you right in relation to handle_call ... And what is wrong in handle_info?
– Nuno_Coletiv
Nov 23 '18 at 11:29
1
1
The same, I guess. I am not sure what the state is though.
– Aleksei Matiushkin
Nov 23 '18 at 11:33
The same, I guess. I am not sure what the state is though.
– Aleksei Matiushkin
Nov 23 '18 at 11:33
another doubt. Is it possible to know at the beginning of a child if it comes from a restart? or have different init functions of child?
– Nuno_Coletiv
Nov 23 '18 at 12:23
another doubt. Is it possible to know at the beginning of a child if it comes from a restart? or have different init functions of child?
– Nuno_Coletiv
Nov 23 '18 at 12:23
I am not sure I follow. If you need a different
init
, the simplest way would be to create another module.– Aleksei Matiushkin
Nov 23 '18 at 12:26
I am not sure I follow. If you need a different
init
, the simplest way would be to create another module.– Aleksei Matiushkin
Nov 23 '18 at 12:26
1
1
Nope. As a workaround, you might put something like a flag to DETS on the very first start, check this flag from
init
and behave accordingly.– Aleksei Matiushkin
Nov 23 '18 at 12:45
Nope. As a workaround, you might put something like a flag to DETS on the very first start, check this flag from
init
and behave accordingly.– Aleksei Matiushkin
Nov 23 '18 at 12:45
|
show 1 more comment
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53445520%2fdynamicsupervisor-problem-with-communication-with-the-workers%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
What error do you get? Post the stack trace here.
– Aleksei Matiushkin
Nov 23 '18 at 11:08