-
Mauritz Sundell authored
Problem ======= During node start a fixed number of records are reserved to be used when taking over transaction from failing nodes. If a transaction have more operations than the reserved number of records it can not be taken over. This is a critical failure for cluster since the transaction is already said to be committed but that might not be true. Two bugs was introduced in WL#9756 related to this problem. Solution#1 ========== In WL#9756 the number of reserved records for transaction takeover was changed to use MaxDMLOperationsPerTransaction instead of MaxNoOfConcurrentOperation as before. If MaxDMLOperationsPerTransaction was set to something lower would allow that transactions using deferred constraint flag may become bigger than possible to take over. Fix use MaxNoOfConcurrentOperations again for the number of transaction takeover records. Solution#2 ========== The deferred constraints flag (OO_DEFERRED_CONSTAINTS [sic!]) for transaction also make DBTC allow the normal limitation of operations by MaxDMLOperationsPerTransaction to be exceeded. Before worklog there was still an implicit transaction size limitation given by MaxNoOfConcurrentOperations, but in WL#9756 no upper limit was implied. Fix takes MaxNoOfConcurrentOperations (via CFG_TC_MAX_TO_CONNECT_RECORD) as the hard limitation of transaction size (Dbtc::m_take_over_operations) and add a check for that when checking for deferred constraints flag (In DBTC TF_DEFERRED_CONSTRAINTS).
Mauritz Sundell authoredProblem ======= During node start a fixed number of records are reserved to be used when taking over transaction from failing nodes. If a transaction have more operations than the reserved number of records it can not be taken over. This is a critical failure for cluster since the transaction is already said to be committed but that might not be true. Two bugs was introduced in WL#9756 related to this problem. Solution#1 ========== In WL#9756 the number of reserved records for transaction takeover was changed to use MaxDMLOperationsPerTransaction instead of MaxNoOfConcurrentOperation as before. If MaxDMLOperationsPerTransaction was set to something lower would allow that transactions using deferred constraint flag may become bigger than possible to take over. Fix use MaxNoOfConcurrentOperations again for the number of transaction takeover records. Solution#2 ========== The deferred constraints flag (OO_DEFERRED_CONSTAINTS [sic!]) for transaction also make DBTC allow the normal limitation of operations by MaxDMLOperationsPerTransaction to be exceeded. Before worklog there was still an implicit transaction size limitation given by MaxNoOfConcurrentOperations, but in WL#9756 no upper limit was implied. Fix takes MaxNoOfConcurrentOperations (via CFG_TC_MAX_TO_CONNECT_RECORD) as the hard limitation of transaction size (Dbtc::m_take_over_operations) and add a check for that when checking for deferred constraints flag (In DBTC TF_DEFERRED_CONSTRAINTS).
Loading