Контроль нескольких gen_servers с тем же модулем / разные аргументы - PullRequest
3 голосов
/ 15 апреля 2010

У меня есть приложение OTP, состоящее из одного супервизора, который контролирует небольшое количество gen_servers. Типичная дочерняя спецификация выглядит следующим образом:

{my_server,
  {my_server, start_link, [123]},
  permanent, 
  5000, 
  worker,
  [my_server]}

Пока проблем нет.

Теперь я хочу добавить дополнительный gen_server в структуру супервизора, используя тот же модуль Module / Fn, что и выше, но с другими аргументами, например,

{my_server_2,
  {my_server, start_link, [123]},
  permanent, 
  5000, 
  worker,
  [my_server_2]}

Я думал, что это будет работать, но нет:

=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}]

Должны ли отличаться аргументы модуля во втором элементе каждой дочерней спецификации?

Спасибо

Justin

1 Ответ

7 голосов
/ 15 апреля 2010

Я предполагаю, что my_server регистрирует свое имя, используя gen_server: start_link / 4, поэтому, когда второй пытается запустить, он не может, потому что имя уже занято. Gen_servers должен начинаться без имени (gen_server: start_link / 3) или с другими именами.

Кажется странным варьировать последний элемент дочерней спецификации, который идентифицирует список модулей, используемых работником. Это действительно то, что вы намерены?

...