Forums / General / Cluster mode problem

Cluster mode problem

Author Message

Joël LEGER

Thursday 27 August 2009 7:22:41 am

Hi,

version:4.1.3
Cluster mode

I have a regular problem (recently)
example :

Error: _endCacheGeneration( var/client/cache/template-block/1/2/4/1242146676.cache )  	

Failed to execute SQL for function:
1062: Duplicate entry 'a1e80d95fa90890ea8b43319ab9fc150-0' for key 1

 

result it's very slow

Jean-Luc Nguyen

Thursday 27 August 2009 10:04:58 am

Hello,

Try to check in /var/log/error.log the SQL error details.

http://www.acidre.com

Joël LEGER

Thursday 27 August 2009 10:27:19 am

Same thing

Bertrand Dunogier

Thursday 27 August 2009 11:30:42 pm

Could you provide me with:
1) your settings/override/file.ini.append.php file
2) the definition for the cluster tables, ezdbfile and ezdbfile_data (SHOW CREATE TABLE ezdbfile & SHOW CREATE TABLE ezdbfile_data).

I have a feeling you're missing the ON DELETE CASCADE trigger from ezdbfile => ezdbfile_data.

Bertrand Dunogier
eZ Systems Engineering, Lyon
http://twitter.com/bdunogier
http://gplus.to/BertrandDunogier

Joël LEGER

Friday 28 August 2009 12:23:15 am

yes sure

settings/override/file.ini.append.php :

[ClusteringSettings]
FileHandler=eZDBFileHandler
DBBackend=eZDBFileHandlerMysqlBackend
DBHost=localhost
DBPort=3306
DBSocket=
DBName=client
DBUser=client
DBPassword=pasword
DBChunkSize=65535
DBConnectRetries=3
DBExecuteRetries=20

Tables definition :

CREATE TABLE `ezdbfile` (
`datatype` varchar(60) NOT NULL default 'application/octet-stream',
`name` text NOT NULL,
`name_trunk` text NOT NULL,
`name_hash` varchar(34) NOT NULL default '',
`scope` varchar(20) NOT NULL default '',
`size` bigint(20) unsigned NOT NULL,
`mtime` int(11) NOT NULL default '0',
`expired` tinyint(1) NOT NULL default '0',
PRIMARY KEY  (`name_hash`),
KEY `ezdbfile_name` (`name`(250)),
KEY `ezdbfile_name_trunk` (`name_trunk`(250)),
KEY `ezdbfile_mtime` (`mtime`),
KEY `ezdbfile_expired_name` (`expired`,`name`(250))
) ENGINE=InnoDB DEFAULT CHARSET=utf8


CREATE TABLE `ezdbfile_data` (
`name_hash` varchar(34) NOT NULL default '',
`offset` int(11) unsigned NOT NULL,
`filedata` blob NOT NULL,
PRIMARY KEY  (`name_hash`,`offset`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Bertrand Dunogier

Friday 28 August 2009 3:29:44 am

Yes, that's what I thought. There should be a trigger on ezdbfile_data: this trigger automatically deletes records in ezdbfile_data (blobs that are the actual content) when an entry is removed in ezdbfile.

This is what you should have get:

CREATE TABLE ezdbfile_data (
  name_hash VARCHAR(34)   NOT NULL DEFAULT '',
  offset    INT(11) UNSIGNED NOT NULL,
  filedata  BLOB          NOT NULL,
  PRIMARY KEY (name_hash, offset),
  CONSTRAINT ezdbfile_fk1 FOREIGN KEY (name_hash) REFERENCES ezdbfile (name_hash) ON DELETE CASCADE
) ENGINE=InnoDB;

To fix it, just drop the table and recreate it, or run this:

ALTER TABLE ezdbfile_data ADD CONSTRAINT ezdbfile_fk1 FOREIGN KEY (name_hash) REFERENCES ezdbfile (name_hash) ON DELETE CASCADE;

Bertrand Dunogier
eZ Systems Engineering, Lyon
http://twitter.com/bdunogier
http://gplus.to/BertrandDunogier

Joël LEGER

Monday 31 August 2009 7:00:26 am

thanks Bertrand for you feedback.

There is a sensitive problem :
There is data in the ezdbfile_data that i can't remove , do you think if i export data , remove the table, create the table with the constraint and import data again will be ok ?

Bertrand Dunogier

Monday 31 August 2009 7:27:34 am

Well, in any case, backup both tables somewhere. You never know. I hope you have enough disk space somewhere ;)

Then first try to add the constraint using the ALTER TABLE query. It should work, imho.

Then if this doesn't work, the cleanest way:
- unclusterize your cluster using php bin/php/clusterize.php -u
- drop & recreate the tables with the correct definition
- clusterize again (php bin/php/clusterize.php).

Bertrand Dunogier
eZ Systems Engineering, Lyon
http://twitter.com/bdunogier
http://gplus.to/BertrandDunogier