eZ Publish 3.10.1 believes ezurlalias_ml is inconsistent

Author Message

Martin Burger

Wednesday 05 August 2009 2:26:21 am

Hi,

I upgraded several eZ publish installations to version 3.10.1. The upgrade path was 3.8.0 -> 3.8.10 -> 3.9.5 -> 3.10.1. In all upgrades, I used the same set of commands to do the actual upgrade (according to the upgrade guides).

After upgrading, I checked the database consistency of all sites via Setup -> System Upgrade. While most of the sites don't show any warning, two sites show the same inconsistencies:

ALTER TABLE ezurlalias_ml DROP INDEX ezurlalias_ml_act_org;
ALTER TABLE ezurlalias_ml ADD INDEX ezurlalias_ml_act_org ( action, is_original );
ALTER TABLE ezurlalias_ml DROP INDEX ezurlalias_ml_action;
ALTER TABLE ezurlalias_ml ADD INDEX ezurlalias_ml_action ( action, id, link );
ALTER TABLE ezurlalias_ml DROP INDEX ezurlalias_ml_par_act_id_lnk;
ALTER TABLE ezurlalias_ml ADD INDEX ezurlalias_ml_par_act_id_lnk ( parent, action, id, link );
ALTER TABLE ezurlalias_ml DROP INDEX ezurlalias_ml_par_lnk_txt;
ALTER TABLE ezurlalias_ml ADD INDEX ezurlalias_ml_par_lnk_txt ( parent, link, text );
ALTER TABLE ezurlalias_ml DROP INDEX ezurlalias_ml_par_txt;
ALTER TABLE ezurlalias_ml ADD INDEX ezurlalias_ml_par_txt ( parent, text );
ALTER TABLE ezurlalias_ml DROP INDEX ezurlalias_ml_text;
ALTER TABLE ezurlalias_ml ADD INDEX ezurlalias_ml_text ( text, id, link );
ALTER TABLE ezurlalias_ml DROP INDEX ezurlalias_ml_text_lang;
ALTER TABLE ezurlalias_ml ADD INDEX ezurlalias_ml_text_lang ( text, lang_mask, parent );

The server runs MySQL version 5.0.32-Debian_7etch10-log.

I compared table "ezurlalias_ml" in a consistent and in an inconsistent database, their structure is exactly the same:

CREATE TABLE IF NOT EXISTS `ezurlalias_ml` (
  `id` int(11) NOT NULL default '0',
  `link` int(11) NOT NULL default '0',
  `parent` int(11) NOT NULL default '0',
  `lang_mask` int(11) NOT NULL default '0',
  `text` longtext collate latin1_german2_ci NOT NULL,
  `text_md5` varchar(32) collate latin1_german2_ci NOT NULL default '',
  `action` longtext collate latin1_german2_ci NOT NULL,
  `action_type` varchar(32) collate latin1_german2_ci NOT NULL default '',
  `is_original` int(11) NOT NULL default '0',
  `is_alias` int(11) NOT NULL default '0',
  `alias_redirects` int(11) NOT NULL default '1',
  PRIMARY KEY  (`parent`,`text_md5`),
  KEY `ezurlalias_ml_text_lang` (`text`(32),`lang_mask`,`parent`),
  KEY `ezurlalias_ml_text` (`text`(32),`id`,`link`),
  KEY `ezurlalias_ml_action` (`action`(32),`id`,`link`),
  KEY `ezurlalias_ml_par_txt` (`parent`,`text`(32)),
  KEY `ezurlalias_ml_par_lnk_txt` (`parent`,`link`,`text`(32)),
  KEY `ezurlalias_ml_par_act_id_lnk` (`parent`,`action`(32),`id`,`link`),
  KEY `ezurlalias_ml_id` (`id`),
  KEY `ezurlalias_ml_act_org` (`action`(32),`is_original`),
  KEY `ezurlalias_ml_actt_org_al` (`action_type`,`is_original`,`is_alias`),
  KEY `ezurlalias_ml_actt` (`action_type`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;

Interestingly, all the indexes actually exist in the database schema. However, if I run the queries against the database, MySQL will show an error:

#1170 - BLOB/TEXT column 'action' used in key specification without a key length

Thus, it is not possible to drop and add the indexes.

However, at least two question arise:

(1) Why do two eZ publish instances complain about the structure above, while the others don't? Although they use the very same structure.

(2) Why does eZ publish warn about these inconsistencies at all, although the indexes do exist?

I checked the kernel files etc., they are the same. Further, I emptied the inconsistent table "ezurlalias_ml" in one of the two inconsistent databases. However, eZ publish still complains about this table. Thus, the failure should be caused by the structure, and not by the table's content.

What could be the cause for these inconsistencies? Or, why does eZ publish believe table "ezurlalias_ml" is inconsistent?

Regards

Martin Burger

http://www.netbeyond.de/

Martin Burger

Wednesday 05 August 2009 3:20:00 am

I created the database from scratch:

1) I installed a fresh and clean instance of eZ Publish 3.10.1 via the setup wizard in order to have a new and error-free database.
2) I created a new, empty database.
3) I used the schema of database (1) to create all the required tables in database (2).
4) I copied all the data (but not the structure) from the "inconsistent" database to the new one (2).
5) I change the configuration of the "corrupt" instance so that it uses database (2) - new structure, old data - instead of the inconsistent one.

However, eZ Publish still believes that table ezurlalias_ml is inconsistent.

http://www.netbeyond.de/

Powered by eZ Publish™ CMS Open Source Web Content Management. Copyright © 1999-2014 eZ Systems AS (except where otherwise noted). All rights reserved.