Details
-
Type:
Improvement
-
Status:
Closed
-
Priority:
Minor
-
Resolution: Fixed
-
Affects Version/s: 1.3
-
Fix Version/s: 1.3.1
-
Labels:None
-
Patch Submitted:Yes
-
Number of attachments :
Description
The BTM datasources are completely cluster-safe. Unfortunately, the recovery engine isn't so in case of a crash, the cluster node that crashed must be the one performing recovery.
This isn't guaranteed for now so you have to be very careful that if a node crash, it must be restarted before you can restart any other node. If you don't, you might get heuristic errors during recovery !
Activity
Ludovic Orban
made changes -
| Field | Original Value | New Value |
|---|---|---|
| Attachment | clustering-recovery.patch [ 36265 ] | |
| Patch Submitted | [Yes] |
Ludovic Orban
made changes -
| Resolution | Fixed [ 1 ] | |
| Status | Open [ 1 ] | Resolved [ 5 ] |
Ludovic Orban
made changes -
| Status | Resolved [ 5 ] | Closed [ 6 ] |
See: http://www.nabble.com/BTM-and-clustering-to18752764.html
This can be done in an elegant and easy way by telling the recovery engine to filter out recovered transactions where the ServerId part of the XID does not match the current TM's ServerId.
This would make all recovery engines to only recover their own transactions. This is mandatory as the global TX outcome is contained in the TX logs of the node that started the transaction.
An extra check in RecoveryHelper.recover(XAResourceHolderState resourceHolderState, Set alreadyRecoveredXids, int flags) to filter out XIDs should do the trick. An extra configuration parameter to enable / disable this should be added as well.