Bug #33168 Incorrectly handled parameters can make the TC crash during node failure

- during commit deadlock timeout needs to be at least 5 times db hearbeat
parent b009d97f
...@@ -1674,6 +1674,7 @@ private: ...@@ -1674,6 +1674,7 @@ private:
UintR cfailure_nr; UintR cfailure_nr;
UintR coperationsize; UintR coperationsize;
UintR ctcTimer; UintR ctcTimer;
UintR cDbHbInterval;
ApiConnectRecordPtr tmpApiConnectptr; ApiConnectRecordPtr tmpApiConnectptr;
UintR tcheckGcpId; UintR tcheckGcpId;
......
...@@ -643,6 +643,10 @@ void Dbtc::execREAD_CONFIG_REQ(Signal* signal) ...@@ -643,6 +643,10 @@ void Dbtc::execREAD_CONFIG_REQ(Signal* signal)
ndb_mgm_get_int_parameter(p, CFG_DB_TRANSACTION_DEADLOCK_TIMEOUT, &val); ndb_mgm_get_int_parameter(p, CFG_DB_TRANSACTION_DEADLOCK_TIMEOUT, &val);
set_timeout_value(val); set_timeout_value(val);
val = 1500;
ndb_mgm_get_int_parameter(p, CFG_DB_HEARTBEAT_INTERVAL, &val);
cDbHbInterval = (val < 10) ? 10 : val;
val = 3000; val = 3000;
ndb_mgm_get_int_parameter(p, CFG_DB_TRANSACTION_INACTIVE_TIMEOUT, &val); ndb_mgm_get_int_parameter(p, CFG_DB_TRANSACTION_INACTIVE_TIMEOUT, &val);
set_appl_timeout_value(val); set_appl_timeout_value(val);
...@@ -6390,6 +6394,7 @@ void Dbtc::timeOutFoundLab(Signal* signal, Uint32 TapiConPtr, Uint32 errCode) ...@@ -6390,6 +6394,7 @@ void Dbtc::timeOutFoundLab(Signal* signal, Uint32 TapiConPtr, Uint32 errCode)
// conditions should get us here. We ignore it. // conditions should get us here. We ignore it.
/*------------------------------------------------------------------*/ /*------------------------------------------------------------------*/
case CS_PREPARE_TO_COMMIT: case CS_PREPARE_TO_COMMIT:
{
jam(); jam();
/*------------------------------------------------------------------*/ /*------------------------------------------------------------------*/
/* WE ARE WAITING FOR DIH TO COMMIT THE TRANSACTION. WE SIMPLY*/ /* WE ARE WAITING FOR DIH TO COMMIT THE TRANSACTION. WE SIMPLY*/
...@@ -6398,12 +6403,16 @@ void Dbtc::timeOutFoundLab(Signal* signal, Uint32 TapiConPtr, Uint32 errCode) ...@@ -6398,12 +6403,16 @@ void Dbtc::timeOutFoundLab(Signal* signal, Uint32 TapiConPtr, Uint32 errCode)
// To ensure against strange bugs we crash the system if we have passed // To ensure against strange bugs we crash the system if we have passed
// time-out period by a factor of 10 and it is also at least 5 seconds. // time-out period by a factor of 10 and it is also at least 5 seconds.
/*------------------------------------------------------------------*/ /*------------------------------------------------------------------*/
if (((ctcTimer - getApiConTimer(apiConnectptr.i)) > (10 * ctimeOutValue)) && Uint32 time_passed = ctcTimer - getApiConTimer(apiConnectptr.i);
((ctcTimer - getApiConTimer(apiConnectptr.i)) > 500)) { if (time_passed > 500 &&
jam(); time_passed > (5 * cDbHbInterval) &&
systemErrorLab(signal, __LINE__); time_passed > (10 * ctimeOutValue))
{
jam();
systemErrorLab(signal, __LINE__);
}//if }//if
break; break;
}
case CS_COMMIT_SENT: case CS_COMMIT_SENT:
jam(); jam();
/*------------------------------------------------------------------*/ /*------------------------------------------------------------------*/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment