2017-09-15 17 views
0

이 시나리오를 고려하십시오.Narayana/2PC/XA - 메시지 전파 오류 준비 후 리소스 잠금 해제

  1. 코디네이터는이 명 참가자들에게 메시지를 준비 보내고,
  2. 참가자가 성공적으로 자원을 잠근 다음
  3. 코디네이터가 회복 복구 코디네이터 기다려야하지만, prepare_success 메시지
  4. 을에 대해 참가자로부터 메시지를받지 못한 충돌

잠긴 리소스의 잠금을 해제하려면 수동 개입이 필요합니까? 또는 참가자가 코디네이터를 설문하여 거래 상태를 찾습니다.

처음에는 참가자가 커밋 메시지를받지 못하는 경우와 비슷하지만 가장 큰 차이점은 코디네이터가 해당 시나리오에서 메시지를 다시 작성한다는 점입니다. 위에 나열된 시나리오에서 코디네이터는 글로벌 트랜잭션을 로그에 기록하지 않았기 때문에 글로벌 트랜잭션을 재 시도해야한다는 것을조차 알지 못합니다.

답변

0

여기 Narayana의 작동 방식에 대한 세부 정보를 입력 할 수 있습니다. XA 복구 전략은 트랜잭션 관리자 구현에 따라 다양 할 수 있습니다.

시나리오는 Narayana에서 orphan detection이라는 절차로 관리됩니다. 준비 단계가 끝나기 전에 Narayana 트랜잭션 관리자가 충돌하여 Narayana 로그에 트랜잭션 존재에 대한 정보가 없음을 지적했습니다. 여기서 Narayana 구성은 가능한 모든 참가자를 알아야한다는 요구 사항입니다. WildFly의 경우에는 데이터 소스 또는 리소스 관리자의 정의에 따라 standalone.xml으로 보장됩니다. 복구 프로세스는 XAResource.recover 전화 (https://docs.oracle.com/javase/7/docs/api/javax/transaction/xa/XAResource.html#recover(int))와 함께 사용 가능한 모든 리소스를 요청합니다. 자원은 알고있는 모든 인다 우트 ​​(in-doubt) 트랜잭션 중 Xid을 리턴합니다.

Xid

는 나라야나에 의해 건설되었다 (준비 중 자원에 전달하고 자원 TXN 로그에 저장, 복구 다시 나라야나에 반환시) 및 트랜잭션 관리자 아이디 ( https://wildscribe.github.io/WildFly/11.0.CR1/subsystem/transactions/index.html -> node-identifier)가 포함되어 있습니다. Narayana는 Xid이 현재 Narayana 인스턴스 (노드 식별자 일치)에 속하는지 확인합니다. 그렇다면 2PC 추정 중단 최적화 ( https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.0/html/development_guide/java_transaction_api_jta#about_the_presumed_abort_optimization)를 기반으로 Narayana 트랜잭션 로그에 Xid에 대한 개념이 없으므로 마지막으로 자원에 롤백을 요청합니다. 그것은 효과적으로 자물쇠를 제거합니다.