Drupal 6 theme registry got too big for caching

While back I tripped into a problem while developing drupal 6 site. Site got slow and eventually errors started to raise. First php memory limit was exceeded. After I set memory limit bigger new kind of error raised. It was exceeding max_allowed_packet size for mysql. So I raised it with doubt and fear. Since I'am new to drupal I did not think much of it and thought drupal is some kind of beast and needs it for granted.

For a while everything worked (but page was slow) fine, but eventually it raised again while adding new template files to project. Then I really realised that something is very wrong. Finally I got some time to investigate what is wrong and here is what I found. do in hurry

Problem

I was getting an error in every page load, after clearing cache. It goed like this.

Warning: Got a packet bigger than 'max_allowed_packet' bytes query: INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (1, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:25607278:\"Got a packet bigger than 'max_allowed_packet' bytes\nquery: UPDATE cache SET data = 'a:297:{s:24:\\"block_admin_display_form\\";a:8:{s:8:\\"template\\";s:38:\\"modules/block/block-admin-display-form\\";s:4:\\"file\\";s:15:\\"block.admin.inc\\";s:9:\\"arguments\\";a:1:{s:4:\\"form\\";N;}s:4:\\"type\\";s:6:\\"module\\";s:10:\\"theme path\\";s:13:\\"modules/block\\";s:13:\\"include files\\";a:1:{i:0;s:31 in /var/www/dev/janar/myprojectname/includes/database.mysqli.inc on line 128
As it turned out- problem was that cacheable data was too big for transferring to database in method cache_set. It exceeded max_allowed_packet size and tried to log that error wich also failed because of that. There was too much overhead data for every registered template file arguments in theme_registry:templatename cache array. That's what happens when you go too fast and assume something.

Solution

I was using theme_hook wrong. I was passing predefined input parameters along to the theme arguments, but actually that was not needed. Only keys was need to be set wich will be filled later.

I changed this implemetation

function modulename_theme( $vars ) {
	return array(
		'modulename_templatename' => array(
			'template' => 'modulename-templatename',
			'arguments' => array( 'vars' => $vars ),
		),
	);
}
to this
function modulename_theme( ) {
	return array(
		'modulename_templatename' => array(
			'template' => 'modulename-templatename',
			'arguments' => array( 'vars' => array() ),
		),
	);
}
And that was it. Simple mistake what I was doing was passing input vars along.

Mei #
I've been getting the exact same problem.

Which module or theme was calling the HOOK_theme()?

My theme extends the zen_classic theme, and seems it won't work without this.
No gravatar aivable
cat #
This warning popped up for me as soon as I installed the Drupal upgrade from 6.22 to 6.24. Not sure if it's related to this issue (that I also have) http://drupal.org/node/1425868
No gravatar aivable
5'}U 2015% #
No gravatar aivable
100 #
x[kj
No gravatar aivable
100 #
ޤ
No gravatar aivable
14B~gnT #
Bj_,Sk
No gravatar aivable
3 #
No gravatar aivable
2015% #
in
No gravatar aivable
2015 #
]
No gravatar aivable
2015% #
ް
I am co-founder of web/media studio GIVE me. and (android)developer at start-up named Choco. Read my about page to learn more.