bug 2534 fixed: clean (as clean as possible with MySQL+MyISAM) handle of
concurrency on user cache refresh. No more error when regenerating several thumbnails at once. git-svn-id: http://piwigo.org/svn/branches/2.3@12747 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
parent
a1b59897a1
commit
2372b25a1c
3 changed files with 16 additions and 10 deletions
|
@ -42,12 +42,6 @@ foreach ($upload_form_config as $param_shortname => $param)
|
|||
$form_values[$param_shortname] = $conf[$param_name];
|
||||
}
|
||||
|
||||
// User cache must not be regenerated during simultaneous ajax requests
|
||||
if (!isset($user['need_update']) or !$user['need_update'])
|
||||
{
|
||||
getuserdata($user['id'], true);
|
||||
}
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Check Access and exit when user status is not ok |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
|
|
@ -416,8 +416,14 @@ UPDATE '.$tablename.'
|
|||
* @param array inserts
|
||||
* @return void
|
||||
*/
|
||||
function mass_inserts($table_name, $dbfields, $datas)
|
||||
function mass_inserts($table_name, $dbfields, $datas, $options=array())
|
||||
{
|
||||
$ignore = '';
|
||||
if (isset($options['ignore']) and $options['ignore'])
|
||||
{
|
||||
$ignore = 'IGNORE';
|
||||
}
|
||||
|
||||
if (count($datas) != 0)
|
||||
{
|
||||
$first = true;
|
||||
|
@ -438,7 +444,7 @@ function mass_inserts($table_name, $dbfields, $datas)
|
|||
if ($first)
|
||||
{
|
||||
$query = '
|
||||
INSERT INTO '.$table_name.'
|
||||
INSERT '.$ignore.' INTO '.$table_name.'
|
||||
('.implode(',', $dbfields).')
|
||||
VALUES';
|
||||
$first = false;
|
||||
|
|
|
@ -446,6 +446,9 @@ DELETE FROM '.USER_CACHE_CATEGORIES_TABLE.'
|
|||
WHERE user_id = '.$userdata['id'];
|
||||
pwg_query($query);
|
||||
|
||||
// Due to concurrency issues, we ask MySQL to ignore errors on
|
||||
// insert. This may happen when cache needs refresh and that Piwigo is
|
||||
// called "very simultaneously".
|
||||
mass_inserts
|
||||
(
|
||||
USER_CACHE_CATEGORIES_TABLE,
|
||||
|
@ -454,7 +457,8 @@ DELETE FROM '.USER_CACHE_CATEGORIES_TABLE.'
|
|||
'user_id', 'cat_id',
|
||||
'date_last', 'max_date_last', 'nb_images', 'count_images', 'count_categories'
|
||||
),
|
||||
$user_cache_cats
|
||||
$user_cache_cats,
|
||||
array('ignore' => true)
|
||||
);
|
||||
|
||||
|
||||
|
@ -464,8 +468,10 @@ DELETE FROM '.USER_CACHE_TABLE.'
|
|||
WHERE user_id = '.$userdata['id'];
|
||||
pwg_query($query);
|
||||
|
||||
// for the same reason as user_cache_categories, we ignore error on
|
||||
// this insert
|
||||
$query = '
|
||||
INSERT INTO '.USER_CACHE_TABLE.'
|
||||
INSERT IGNORE INTO '.USER_CACHE_TABLE.'
|
||||
(user_id, need_update, cache_update_time, forbidden_categories, nb_total_images,
|
||||
image_access_type, image_access_list)
|
||||
VALUES
|
||||
|
|
Loading…
Reference in a new issue