[drupal-devel] [bug] cache_set sometimes fails
wiz
drupal-devel at drupal.org
Fri Mar 25 17:12:03 UTC 2005
Issue status update for http://drupal.org/node/19442
Project: Drupal
Version: cvs
Component: base system
Category: bug reports
Priority: normal
Assigned to: Anonymous
Reported by: wiz
Updated by: wiz
Status: active
When cache_set is called for a cache entry which already exists in that
very form (including the timestamp), the first UPDATE will change no
rows (db_affected_rows() == 0), and the subsequent INSERT will fail
because the row (i.e., the primary key) already exists.
This can happen only if calling cache_set with the same parameters
twice in one second -- but this can happen. Example:
locale_refresh_cache() may be called often from locale() when no rows
exist in the translation_* tables (which is a bug by itself). The
error message then is:
user error: Duplicate entry 'locale:de' for key 1
query: INSERT INTO cache (cid, data, created, expire, headers) VALUES
('locale:de', 'N;', 1111769323, 0, '') in
/var/www/drupal-cvs/includes/database.mysql.inc on line 66.
I can think of no obvious general fix, except to add another column to
cache that is updated with a random number, or to use a SELECT to check
for the existence of the row. The function locale_refresh_cache in
locale.module seems to have a bug too (separate post).
wiz
More information about the drupal-devel
mailing list