Skip to content
  • Mauritz Sundell's avatar
    f565caa8
    WL#9756 Disallow commit transaction too big for take over. · f565caa8
    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).
    f565caa8
    WL#9756 Disallow commit transaction too big for take over.
    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).
Loading