programing

휴리스틱 참가자의 주기적인 복구를 절대로 종료하지 않음

starjava 2023. 9. 24. 12:16
반응형

휴리스틱 참가자의 주기적인 복구를 절대로 종료하지 않음

며칠동안 우리의 로그는 이 메시지로 가득 차 있었습니다.

2018-06-15 12:19:23 WARN [com.arjuna.ats.arjuna] (Periodic Recovery) Transaction 0:ffff0a983f1e:1f3aa2ff:5a09aa02:d1c08c has 1 heuristic participant(s)!
2018-06-15 12:19:23 WARN [com.arjuna.ats.jta] (Periodic Recovery) ARJUNA016037: Could not find new XAResource to use for recovering non-serializable XAResource XAResourceRecord < resource:null, txid:< formatId=131077, gtrid_length=46, bqual_length=36, tx_uid=0:ffff0a983f1e:1f3aa2ff:5a09aa02:d1c08c, node_name=acme_node, branch_uid=0:ffff0a983f1e:1f3aa2ff:5a09aa02:d1c08d, subordinatenodename=null, eis_name=unknown eis name >, heuristic: TwoPhaseOutcome.FINISH_OK com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord@6569a57c >
2018-06-15 12:19:23 WARN [com.arjuna.ats.arjuna] (Periodic Recovery) Transaction 0:ffff0a983f1e:1f3aa2ff:5a09aa02:d1c08c restored heuristic participant XAResourceRecord < resource:null, txid:< formatId=131077, gtrid_length=46, bqual_length=36, tx_uid=0:ffff0a983f1e:1f3aa2ff:5a09aa02:d1c08c, node_name=acme_node, branch_uid=0:ffff0a983f1e:1f3aa2ff:5a09aa02:d1c08d, subordinatenodename=null, eis_name=unknown eis name >, heuristic: TwoPhaseOutcome.FINISH_OK com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord@6569a57c >

그것은 항상 같은 Xid입니다.이것을 해결할 방법이 있습니까?애플리케이션을 정상적으로 종료하고 data/tx-object-store의 파일을 삭제하는 것을 고려하고 있습니다.이게 좋은 생각입니까?

그것은 와일드플라이 11입니다.오라클 12c와 IBM WebSphere MQ로 XA 트랜잭션을 설정하고 있습니다. 메시지를 통해 JDBC로 XA 트랜잭션을 수행하고 있습니다.

문제의 답은 2.4.1에서 찾았습니다. 트랜잭션 가이드가 완료된 것으로 가정합니다.

트랜잭션 조정자가 XA 리소스에 커밋을 지시한 후 참여자를 제거하기 위해 트랜잭션 로그를 업데이트하기 전에 트랜잭션 환경에서 오류가 발생하면 복구에서 커밋 재생을 시도합니다.Serialized XA Resource의 경우 XA Resource의 응답을 통해 로그에서 참가자를 제거할 수 있으며, 이 로그는 모든 참가자가 커밋되면 삭제됩니다.그러나 XA 리소스를 복구할 수 없는 경우 XA 리소스 복구 인스턴스가 복구 하위 시스템에 복구를 시도하는 데 사용할 새 XA 리소스를 제공할 가능성은 매우 낮습니다. 이 경우 복구가 계속 실패하고 로그 항목이 제거되지 않습니다.

이 문제를 해결할 수 있는 방법은 다음 두 가지입니다.

해당 Expiry Scanner를 사용하여 로그를 다른 곳으로 이동합니다.그러면 로그를 안전하게 삭제할 수 있도록 수동으로 개입해야 합니다.로그 항목이 이동되면 적절한 경고 메시지가 출력됩니다.

com.arjuna.ats.jta.xa복구완료 가정을 true로 설정합니다.등록된 XA 리소스 복구 인스턴스에서 새 XA 리소스 인스턴스를 찾을 수 없을 때마다 이 옵션을 선택합니다.false(기본값)인 경우 복구는 XAresourceRecovery 인스턴스에 일시적인 문제가 있는 것으로 가정하며(예: 모든 것이 하위 시스템에 등록되어 있지 않음) 주기적으로 복구를 시도합니다.true인 경우 복구는 이전 커밋 시도가 성공했다고 가정하며 이 인스턴스는 더 이상 복구 시도 없이 로그에서 제거할 수 있습니다.이 옵션은 전역 옵션이므로 잘못 사용된 경우 XA 리소스 인스턴스가 커밋되지 않은 상태로 유지될 수 있으므로 주의하여 사용해야 합니다.

완료되지 않은 db 트랜잭션이 있으며 서버에서 복구를 시도하고 있습니다.체크인 인스

SERVER_HOME/독립형/data/tx-object-store/ShadowNoFileLockStore/defaultStore/StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction/

트랜잭션 파일이 있습니다.먼저 트랜잭션 파일을 삭제하고(부득이하게는 로컬/개발에서) 로그를 추적하여 완료/커밋하지 않은 트랜잭션을 식별할 수 있습니다.문제의 근원을 고치면 경고가 사라집니다.또는 WARNING에서 jndiName을 확인하여 어떤 데이터 소스가 이러한 경고를 생성하는지 확인합니다.

지정된 간격에 따라 계속 DB와 통신을 시도하는 예약된 작업이 있지만 먼저 수정해야 하는 근본적인 오류로 인해 트랜잭션이 완료되지 않기 때문에 경고가 "절대 종료되지 않음"입니다.

이전 포스터들이 말했듯이, 메시지는 절대 끝나지 않습니다.저는 시스템을 물려받았는데 이 메시지들이 3년 동안 우리의 로그를 채우고 있다는 것을 알게 되었습니다.전 단서를 얻었어요

https://knowledge.broadcom.com/external/article/129101/arjuna016037-could-not-find-new-xaresour.htm

그리고.

https://docs.wildfly.org/13/Admin_Guide.html#Command_Line_Interface

저의 경고 메시지는 이 페이지의 맨 위에 나열된 내용과 매우 유사했습니다.수정 방법:

  1. jboss-cli에 연결
  2. 경고를 유발하는 트랜잭션을 삭제합니다.
  3. atomic action 디렉토리에 있는 파일을 삭제합니다.

.\jboss-cli.ps1 --connect --controller=localhost

jbboss에서 (창문을 사용하고 있어서 콜론 앞에 백슬래시를 넣어야 했습니다) /subsystem=거래/로그스토어=로그스토어/거래=0\:fffac100086\:781344c7\:61b922df\:5a66f4\:eb:삭제

{
    "outcome" => "failed",
    "failure-description" => "WFLYCTL0030: No resource definition is registered for address [
    (\"subsystem\" => \"transactions\"),
    (\"log-store\" => \"log-store\"),
    (\"transactions\" => \"0:ffffac100086:781344c7:61b922df:5a66f4:eb\")
]",
    "rolled-back" => true
}

모든 것이 작동했다면 롤백된 = > 사실입니다.이제 atomic action 디렉토리에 있는 파일을 삭제합니다.파일은 트랜잭션과 동일해야 하지만 다음 대신 _이 있습니다.

0_fffac100086_781344c7_61b922df_5a66f4

언급URL : https://stackoverflow.com/questions/50885703/never-ending-periodic-recovery-of-heuristic-participants

반응형