2017-09-15 60 views
0

請考慮這種情況。Narayana/2PC/XA - 準備郵件傳播失敗後解鎖資源

  1. 協調器發送準備消息2名人蔘加,和崩潰
  2. 參與者鎖定資源成功,然後等待協調恢復
  3. 協調員復甦,但並沒有從參與者收到有關prepare_success消息
  4. 消息

是否需要人工干預來解鎖鎖定的資源?或者參與者詢問協調員以查找交易狀態?

首先,這聽起來與參與者沒有收到提交消息的情況類似,但主要的區別在於協調員重新發送該場景中的消息。在上面列出的方案中,協調員甚至不知道它必須重新啓動全局事務,因爲它沒有記錄它的日誌。

回答

0

我可以在這裏提供關於Narayana如何工作的一些細節。根據事務管理器的實現,XA恢復策略可能會有所不同。

您談論的情景是在名爲orphan detection的過程中在Narayana中管理的。 正如您指出Narayana事務管理器在準備階段結束之前崩潰,因此在Narayana日誌中沒有關於事務存在的信息。這裏的要求是Narayana配置必須知道所有可能的參與者。對於WildFly,通過定義standalone.xml中的數據源或資源管理器來確保。恢復過程通過XAResource.recover呼叫(https://docs.oracle.com/javase/7/docs/api/javax/transaction/xa/XAResource.html#recover(int))詢問所有可用資源。資源返回Xid它知道的所有有問題的交易。

Xid被納拉亞納構建(通過資源期間準備和保存在資源TXN日誌,在恢復過程中返回給納拉亞納),包含事務管理器ID(https://wildscribe.github.io/WildFly/11.0.CR1/subsystem/transactions/index.html - >node-identifier)。 Narayana檢查Xid是否屬於當前Narayana實例(節點標識符匹配)。如果是這樣,並且在Narayana事務日誌中沒有關於Xid的概念,則基於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),它最終要求資源回滾。這有效地消除了鎖。