Wordpress v4.3のバグ

2015-08-28 18:04

管理しているサーバーがアホみたいにエラーログを吐いていた。

MySQL server has gone away for query UPDATE `wp_options` SET `option_value` = ‘a:4:{i:1440638520;a:1:{s:20:\\”wp_maybe_auto_update\\”;a:1:{s:32:\\”40cd750bba9870f18aada2478b24840a\\”;

wp_optionsテーブルのcronのデータのupdateのsqlが長すぎてエラー。
原因不明すぎたけど
とりあえずクーロン関係なので
「cron view」っていうプラグイン入れてジョブを確認すると

Next due が「(wp_batch_split_terms)」で
Hookが「1440751547(例)」っていうタイムスタンプ値が登録されてる

v4.3からできた
/wp-includes/taxonomy.php

4446行目〜の _wp_check_for_scheduled_split_terms() が原因と思われた。
その下に
! wp_next_scheduled( ‘wp_batch_split_terms’ )
って書いてあるけどHookがタイムスタンプなので永遠にフックが登録され
ジョブが増えまくってsqlが超ロングになりエラーっていうことだと思われ。

で解決方法はその下で

//wp_schedule_single_event( 'wp_batch_split_terms', time() + MINUTE_IN_SECONDS );
wp_schedule_single_event( time() + MINUTE_IN_SECONDS, 'wp_batch_split_terms' );

といったように引数を入れ替えれば直る。
こんなバグをやってくれるとかたまらん。

これで無限ジョブ登録はとまるので
あとはできてしまったジョブを

wp_clear_scheduled_hook($hook);

でこつこつ消せば平和になる。
ちなみに私は1万以上のジョブを消すはめになった。

Changeset 33646 for trunk/src/wp-includes/taxonomy.php

functions.phpで

remove_action('admin_init', '_wp_check_for_scheduled_split_terms'); 

でremoveしてもいいみたい。そもそもこいつなんで必要かわからんけども。

追記:
v4.3.1で解消されたもよう



Category: WordPress

Tag: