aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorplegall <plg@piwigo.org>2011-12-16 13:52:40 +0000
committerplegall <plg@piwigo.org>2011-12-16 13:52:40 +0000
commit2372b25a1c8d9a5db8e596c50959a0e5934af208 (patch)
tree19469ce26a06b46431a3e0278d439118f164f163
parenta1b59897a1fb62b71fcac05670631f094eb8a3b3 (diff)
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
-rw-r--r--admin/batch_manager_global.php6
-rw-r--r--include/dblayer/functions_mysql.inc.php10
-rw-r--r--include/functions_user.inc.php10
3 files changed, 16 insertions, 10 deletions
diff --git a/admin/batch_manager_global.php b/admin/batch_manager_global.php
index 8b42165f7..d8293e243 100644
--- a/admin/batch_manager_global.php
+++ b/admin/batch_manager_global.php
@@ -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 |
// +-----------------------------------------------------------------------+
diff --git a/include/dblayer/functions_mysql.inc.php b/include/dblayer/functions_mysql.inc.php
index dbc66d503..785e588e0 100644
--- a/include/dblayer/functions_mysql.inc.php
+++ b/include/dblayer/functions_mysql.inc.php
@@ -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;
diff --git a/include/functions_user.inc.php b/include/functions_user.inc.php
index be8962e09..f9d649a34 100644
--- a/include/functions_user.inc.php
+++ b/include/functions_user.inc.php
@@ -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