Supervisionando vários gen_servers com o mesmo módulo/argumentos diferentes
Pergunta
Eu tenho um aplicativo OTP composto por um único supervisor supervisionando um pequeno número de gen_servers.Uma especificação filha típica é a seguinte:
{my_server,
{my_server, start_link, [123]},
permanent,
5000,
worker,
[my_server]}
Sem problemas até agora.
Agora quero adicionar gen_server extra à estrutura do supervisor, usando o mesmo módulo Module/Fn acima, mas argumentos diferentes, por exemplo
{my_server_2,
{my_server, start_link, [123]},
permanent,
5000,
worker,
[my_server_2]}
Achei que isso funcionaria, mas não:
=SUPERVISOR REPORT==== 15-Apr-2010::16:50:13 ===
Supervisor: {local,my_sup}
Context: start_error
Reason: {already_started,<0.179.0>}
Offender: [{pid,undefined},
{name,my_server_2},
{mfa,{my_server,start_link,[]}},
{restart_type,permanent},
{shutdown,5000},
{child_type,worker}]
Os argumentos do módulo no segundo elemento de cada especificação filho precisam ser diferentes?
Obrigado,
Justino
Solução
Meu palpite é que my_server registra seu nome usando gen_server:start_link/4, de modo que quando o segundo tentar iniciar ele não consiga porque o nome já está em uso.Os gen_servers terão que iniciar sem nome (gen_server:start_link/3) ou com nomes diferentes.
Parece estranho variar o último elemento da especificação filho, que identifica a lista de módulos utilizados pelo trabalhador.É realmente isso que você pretende?