2012-04-20 3 views
2

여러 감독자 하위를 원자 적 방식으로 시작해야합니다. 즉, 그룹에 속한 자녀 중 한 명이 시작시 실패하면 그 중 누구도 시작해서는 안됩니다. 관리자가 여러 개의 자식을 원자 작업으로 시작합니다.

나는 함수로이 작업을 참조하십시오

이 이
start_children(SupRef, ChildSpecs) 
ChildSpecs = List :: [child_spec()] 

가 어떻게 적절한 방법으로이를 구현해야합니까? 모든 예제, 라이브러리 등? 내 직감은 목록에서 모든 어린이를 시작하고 모든 어린이가 성공했는지 확인한 다음 나머지 어린이를 죽이는 것이 길은 아니라고합니다.

아니면 내 디자인에 결함이있어 정말 그런 필요가 없어야합니까?

답변

2

OTP의 supervisorone_for_all 전략을 지원합니다. 기본적으로 일부 프로세스가 실패하면 모든 프로세스가 재시작되지만 용도에 맞게 Restart 매개 변수 (예 : temporary)를 사용하여 변경할 수 있습니다.

+0

예,하지만 저는 이것을 동적으로하고 싶습니다. 'start_child'로 호출 된 자식이 실패하면'one_for_all'로,이 관리자의 모든 자식은 이전에 시작된 자식이라 할지라도 다시 시작 (또는 종료)됩니다. 나는 그것을 원하지 않는다. 나는 같은 명단에있는 어린이들 중 하나가 실패한 것만을 살해하기를 원합니다. 이전에 시작된 어린이는 만져서는 안됩니다. – gregorej

+4

정확하게 이해한다면 여러 자녀 목록이 있습니다. 그 중 하나가 실패하면 목록에있는 모든 어린이를 죽이고 다른 목록의 자녀는 만지지 않기를 원할 것입니다. ('one_for_all' 전략으로) 목록 당 한 명의 감독자가 있고, 필요하다면이 감독자의 관리자가 있습니까? – 3lectrologos

+0

나는 그것에 대해 생각했다. 그러나 내가 아이들을 붙이고 싶어하는 관리자는 이미 일부 작업자 노드를 사용하고 있습니다. Erlang/OTP에 대한 나의 경험에 나는 아이들 유형 (노동자와 감독자)을 혼합 할 수 없다고 말해 준다. – gregorej

관련 문제