CC-5109: Fix race-condition when updating cc_pref table
This commit is contained in:
parent
ad82b4ff98
commit
9f6a1033ea
2 changed files with 19 additions and 4 deletions
|
@ -2,9 +2,11 @@
|
|||
class Application_Common_Database
|
||||
{
|
||||
public static function prepareAndExecute($sql, array $paramValueMap,
|
||||
$type='all', $fetchType=PDO::FETCH_ASSOC)
|
||||
$type='all', $fetchType=PDO::FETCH_ASSOC, $con=null)
|
||||
{
|
||||
if (is_null($con)) {
|
||||
$con = Propel::getConnection();
|
||||
}
|
||||
$stmt = $con->prepare($sql);
|
||||
foreach ($paramValueMap as $param => $v) {
|
||||
$stmt->bindValue($param, $v);
|
||||
|
|
|
@ -11,6 +11,9 @@ class Application_Model_Preference
|
|||
private static function setValue($key, $value, $isUserValue = false, $userId = null)
|
||||
{
|
||||
try {
|
||||
$con = Propel::getConnection(CcPrefPeer::DATABASE_NAME);
|
||||
$con->beginTransaction();
|
||||
|
||||
//called from a daemon process
|
||||
if (!class_exists("Zend_Auth", false) || !Zend_Auth::getInstance()->hasIdentity()) {
|
||||
$id = NULL;
|
||||
|
@ -35,7 +38,11 @@ class Application_Model_Preference
|
|||
$paramMap[':id'] = $userId;
|
||||
}
|
||||
|
||||
$result = Application_Common_Database::prepareAndExecute($sql, $paramMap, 'column');
|
||||
$result = Application_Common_Database::prepareAndExecute($sql,
|
||||
$paramMap,
|
||||
'column',
|
||||
PDO::FETCH_ASSOC,
|
||||
$con);
|
||||
|
||||
$paramMap = array();
|
||||
if ($result > 1) {
|
||||
|
@ -80,9 +87,15 @@ class Application_Model_Preference
|
|||
$paramMap[':key'] = $key;
|
||||
$paramMap[':value'] = $value;
|
||||
|
||||
Application_Common_Database::prepareAndExecute($sql, $paramMap, 'execute');
|
||||
Application_Common_Database::prepareAndExecute($sql,
|
||||
$paramMap,
|
||||
'execute',
|
||||
PDO::FETCH_ASSOC,
|
||||
$con);
|
||||
|
||||
$con->commit();
|
||||
} catch (Exception $e) {
|
||||
$con->rollback();
|
||||
header('HTTP/1.0 503 Service Unavailable');
|
||||
Logging::info("Database error: ".$e->getMessage());
|
||||
exit;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue