Hello,
Since I installed VaultWiki I receive the following error messages:
Code:
XenForo_Exception: Database Error: INSERT INTO `xf_data_registry` (`data_key`, `data_value`) VALUES ('vw_nodetypes','a:26:{s:4:"page";a:2:{s:2:"id";i:1;s:2:"on";b:1;}s:8:"language";a:2:{s:2:"id";i:2;s:2:"on";b:1;}s:4:"area";a:2:{s:2:"id";i:3;s:2:"on";b:1;}s:5:"index";a:2:{s:2:"id";i:4;s:2:"on";b:1;}s:10:"discussion";a:2:{s:2:"id";i:5;s:2:"on";b:1;}s:7:"comment";a:2:{s:2:"id";i:6;s:2:"on";b:1;}s:8:"revision";a:2:{s:2:"id";i:7;s:2:"on";b:1;}s:5:"forum";a:2:{s:2:"id";i:8;s:2:"on";b:1;}s:4:"user";a:2:{s:2:"id";i:9;s:2:"on";b:1;}s:4:"feed";a:2:{s:2:"id";i:10;s:2:"on";b:1;}s:8:"feeditem";a:2:{s:2:"id";i:11;s:2:"on";b:1;}s:6:"prefix";a:2:{s:2:"id";i:12;s:2:"on";b:1;}s:4:"book";a:2:{s:2:"id";i:13;s:2:"on";b:1;}s:8:"category";a:2:{s:2:"id";i:14;s:2:"on";b:1;}s:6:"attach";a:2:{s:2:"id";i:16;s:2:"on";b:1;}s:8:"redirect";a:2:{s:2:"id";i:17;s:2:"on";b:1;}s:7:"special";a:2:{s:2:"id";i:18;s:2:"on";b:1;}s:5:"topic";a:2:{s:2:"id";i:19;s:2:"on";b:1;}s:10:"attachedit";a:2:{s:2:"id";i:20;s:2:"on";b:1;}s:7:"chapter";a:2:{s:2:"id";i:21;s:2:"on";b:1;}s:12:"categoryitem";a:2:{s:2:"id";i:22;s:2:"on";b:1;}s:8:"template";a:2:{s:2:"id";i:24;s:2:"on";b:1;}s:6:"island";a:2:{s:2:"id";i:25;s:2:"on";b:1;}s:6:"thread";a:2:{s:2:"id";i:26;s:2:"on";b:1;}s:4:"poll";a:2:{s:2:"id";i:27;s:2:"on";b:1;}s:3:"tag";a:2:{s:2:"id";i:28;s:2:"on";b:1;}}'), ('vw_index','a:87:{s:6:"areaid";i:0;s:5:"title";s:4:"Wiki";s:6:"itemid";i:1;s:10:"itemtypeid";i:1;s:10:"langitemid";N;s:6:"pageid";i:1;s:11:"langgroupid";N;s:10:"languageid";s:1:"1";s:6:"userid";i:1;s:9:"chapterid";N;s:8:"dateline";i:1458322962;s:12:"chapterorder";N;s:10:"itembookid";N;s:7:"routeid";i:43;s:10:"lastupdate";i:1458322962;s:9:"editcount";i:0;s:9:"pagecount";i:0;s:11:"attachcount";i:0;s:9:"bookcount";i:0;s:13:"categorycount";i:0;s:13:"redirectcount";i:0;s:13:"templatecount";i:0;s:9:"feedcount";i:0;s:9:"talkcount";i:0;s:5:"views";i:18;s:8:"titlekey";s:0:"";s:7:"itemkey";s:0:"";s:7:"sortkey";s:0:"";s:8:"startkey";s:0:"";s:6:"pathid";i:0;s:3:"url";s:40:"http://www.agorapolis-altislife.fr/wiki/";s:14:"parentprefixid";i:0;s:8:"stackids";a:1:{i:0;s:1:"4";}s:9:"keylength";i:0;s:7:"maxword";i:0;s:10:"searchmeta";s:24:" type_4 creator_1 area_0";s:10:"revisionid";i:1;s:8:"pagetext";s:0:"";s:4:"path";s:0:"";s:8:"icondata";s:0:"";s:7:"summary";s:0:"";s:8:"prefixid";i:0;s:8:"parentid";i:0;s:8:"username";s:9:"Joe Bacon";s:9:"ipaddress";s:39:"2a01:cb19:8376:4500:8cbf:c9ef:7537:bb6e";s:8:"textsize";i:0;s:4:"diff";i:0;s:5:"flags";i:0;s:7:"section";s:0:"";s:8:"rollback";i:0;s:6:"reason";s:0:"";s:9:"htmlstate";s:8:"on_nl2br";s:7:"visible";i:1;s:12:"templatelist";s:0:"";s:5:"ip_id";i:516787;s:8:"typelist";a:2:{i:0;s:1:"1";i:1;s:1:"4";}s:7:"protect";i:0;s:9:"creatorid";i:1;s:11:"creatorname";s:9:"Joe Bacon";s:9:"creatorip";s:39:"2a01:cb19:8376:4500:8cbf:c9ef:7537:bb6e";s:11:"has_pending";N;s:5:"likes";N;s:10:"like_users";N;s:8:"readtime";N;s:16:"translate_userid";N;s:14:"chapter_userid";N;s:13:"edit_dateline";i:1458322962;s:13:"edit_parentid";i:0;s:6:"prefix";s:0:"";s:9:"prefixkey";s:0:"";s:9:"fulltitle";s:4:"Wiki";s:7:"affixed";b:1;s:9:"isContent";b:1;s:5:"url_d";s:41:"http://www.agorapolis-altislife.fr/wiki/?";s:6:"url_jd";s:41:"http://www.agorapolis-altislife.fr/wiki/?";s:5:"url_s";s:41:"http://www.agorapolis-altislife.fr/wiki/?";s:6:"url_js";s:41:"http://www.agorapolis-altislife.fr/wiki/?";s:5:"url_q";s:40:"http://www.agorapolis-altislife.fr/wiki/";s:6:"url_jq";s:40:"http://www.agorapolis-altislife.fr/wiki/";s:10:"microtypes";a:2:{i:0;s:7:"WebPage";i:1;s:7:"WebPage";}s:12:"area_options";s:3:"238";s:9:"topiclist";a:0:{}s:9:"blocklist";a:0:{}s:7:"stacked";b:1;s:7:"itemref";a:0:{}s:12:"team_protect";i:0;s:3:"key";i:1;}'), ('vw_prefixs','a:1:{i:1;a:32:{s:10:"bb_code_id";N;s:12:"bb_code_mode";N;s:10:"has_option";N;s:12:"replace_html";N;s:18:"replace_html_email";N;s:12:"replace_text";N;s:14:"callback_class";N;s:15:"callback_method";N;s:12:"option_regex";N;s:16:"trim_lines_after";N;s:14:"plain_children";N;s:15:"disable_smilies";N;s:13:"disable_nl2br";N;s:16:"disable_autolink";N;s:11:"allow_empty";N;s:15:"allow_signature";N;s:15:"editor_icon_url";N;s:11:"sprite_mode";N;s:13:"sprite_params";N;s:7:"example";N;s:6:"active";N;s:8:"addon_id";N;s:10:"vw_varname";N;s:8:"vw_extra";N;s:10:"vw_options";N;s:8:"prefixid";i:1;s:5:"title";s:7:"Special";s:14:"bbcode_varname";s:0:"";s:9:"prefixkey";s:7:"special";s:8:"parentid";i:0;s:10:"languageid";i:0;s:9:"cache_key";i:1;}}') ON DUPLICATE KEY UPDATE `data_value` = CASE `data_key` WHEN 'vw_nodetypes' THEN 'a:26:{s:4:"page";a:2:{s:2:"id";i:1;s:2:"on";b:1;}s:8:"language";a:2:{s:2:"id";i:2;s:2:"on";b:1;}s:4:"area";a:2:{s:2:"id";i:3;s:2:"on";b:1;}s:5:"index";a:2:{s:2:"id";i:4;s:2:"on";b:1;}s:10:"discussion";a:2:{s:2:"id";i:5;s:2:"on";b:1;}s:7:"comment";a:2:{s:2:"id";i:6;s:2:"on";b:1;}s:8:"revision";a:2:{s:2:"id";i:7;s:2:"on";b:1;}s:5:"forum";a:2:{s:2:"id";i:8;s:2:"on";b:1;}s:4:"user";a:2:{s:2:"id";i:9;s:2:"on";b:1;}s:4:"feed";a:2:{s:2:"id";i:10;s:2:"on";b:1;}s:8:"feeditem";a:2:{s:2:"id";i:11;s:2:"on";b:1;}s:6:"prefix";a:2:{s:2:"id";i:12;s:2:"on";b:1;}s:4:"book";a:2:{s:2:"id";i:13;s:2:"on";b:1;}s:8:"category";a:2:{s:2:"id";i:14;s:2:"on";b:1;}s:6:"attach";a:2:{s:2:"id";i:16;s:2:"on";b:1;}s:8:"redirect";a:2:{s:2:"id";i:17;s:2:"on";b:1;}s:7:"special";a:2:{s:2:"id";i:18;s:2:"on";b:1;}s:5:"topic";a:2:{s:2:"id";i:19;s:2:"on";b:1;}s:10:"attachedit";a:2:{s:2:"id";i:20;s:2:"on";b:1;}s:7:"chapter";a:2:{s:2:"id";i:21;s:2:"on";b:1;}s:12:"categoryitem";a:2:{s:2:"id";i:22;s:2:"on";b:1;}s:8:"template";a:2:{s:2:"id";i:24;s:2:"on";b:1;}s:6:"island";a:2:{s:2:"id";i:25;s:2:"on";b:1;}s:6:"thread";a:2:{s:2:"id";i:26;s:2:"on";b:1;}s:4:"poll";a:2:{s:2:"id";i:27;s:2:"on";b:1;}s:3:"tag";a:2:{s:2:"id";i:28;s:2:"on";b:1;}}' WHEN 'vw_index' THEN 'a:87:{s:6:"areaid";i:0;s:5:"title";s:4:"Wiki";s:6:"itemid";i:1;s:10:"itemtypeid";i:1;s:10:"langitemid";N;s:6:"pageid";i:1;s:11:"langgroupid";N;s:10:"languageid";s:1:"1";s:6:"userid";i:1;s:9:"chapterid";N;s:8:"dateline";i:1458322962;s:12:"chapterorder";N;s:10:"itembookid";N;s:7:"routeid";i:43;s:10:"lastupdate";i:1458322962;s:9:"editcount";i:0;s:9:"pagecount";i:0;s:11:"attachcount";i:0;s:9:"bookcount";i:0;s:13:"categorycount";i:0;s:13:"redirectcount";i:0;s:13:"templatecount";i:0;s:9:"feedcount";i:0;s:9:"talkcount";i:0;s:5:"views";i:18;s:8:"titlekey";s:0:"";s:7:"itemkey";s:0:"";s:7:"sortkey";s:0:"";s:8:"startkey";s:0:"";s:6:"pathid";i:0;s:3:"url";s:40:"http://www.agorapolis-altislife.fr/wiki/";s:14:"parentprefixid";i:0;s:8:"stackids";a:1:{i:0;s:1:"4";}s:9:"keylength";i:0;s:7:"maxword";i:0;s:10:"searchmeta";s:24:" type_4 creator_1 area_0";s:10:"revisionid";i:1;s:8:"pagetext";s:0:"";s:4:"path";s:0:"";s:8:"icondata";s:0:"";s:7:"summary";s:0:"";s:8:"prefixid";i:0;s:8:"parentid";i:0;s:8:"username";s:9:"Joe Bacon";s:9:"ipaddress";s:39:"2a01:cb19:8376:4500:8cbf:c9ef:7537:bb6e";s:8:"textsize";i:0;s:4:"diff";i:0;s:5:"flags";i:0;s:7:"section";s:0:"";s:8:"rollback";i:0;s:6:"reason";s:0:"";s:9:"htmlstate";s:8:"on_nl2br";s:7:"visible";i:1;s:12:"templatelist";s:0:"";s:5:"ip_id";i:516787;s:8:"typelist";a:2:{i:0;s:1:"1";i:1;s:1:"4";}s:7:"protect";i:0;s:9:"creatorid";i:1;s:11:"creatorname";s:9:"Joe Bacon";s:9:"creatorip";s:39:"2a01:cb19:8376:4500:8cbf:c9ef:7537:bb6e";s:11:"has_pending";N;s:5:"likes";N;s:10:"like_users";N;s:8:"readtime";N;s:16:"translate_userid";N;s:14:"chapter_userid";N;s:13:"edit_dateline";i:1458322962;s:13:"edit_parentid";i:0;s:6:"prefix";s:0:"";s:9:"prefixkey";s:0:"";s:9:"fulltitle";s:4:"Wiki";s:7:"affixed";b:1;s:9:"isContent";b:1;s:5:"url_d";s:41:"http://www.agorapolis-altislife.fr/wiki/?";s:6:"url_jd";s:41:"http://www.agorapolis-altislife.fr/wiki/?";s:5:"url_s";s:41:"http://www.agorapolis-altislife.fr/wiki/?";s:6:"url_js";s:41:"http://www.agorapolis-altislife.fr/wiki/?";s:5:"url_q";s:40:"http://www.agorapolis-altislife.fr/wiki/";s:6:"url_jq";s:40:"http://www.agorapolis-altislife.fr/wiki/";s:10:"microtypes";a:2:{i:0;s:7:"WebPage";i:1;s:7:"WebPage";}s:12:"area_options";s:3:"238";s:9:"topiclist";a:0:{}s:9:"blocklist";a:0:{}s:7:"stacked";b:1;s:7:"itemref";a:0:{}s:12:"team_protect";i:0;s:3:"key";i:1;}' WHEN 'vw_prefixs' THEN 'a:1:{i:1;a:32:{s:10:"bb_code_id";N;s:12:"bb_code_mode";N;s:10:"has_option";N;s:12:"replace_html";N;s:18:"replace_html_email";N;s:12:"replace_text";N;s:14:"callback_class";N;s:15:"callback_method";N;s:12:"option_regex";N;s:16:"trim_lines_after";N;s:14:"plain_children";N;s:15:"disable_smilies";N;s:13:"disable_nl2br";N;s:16:"disable_autolink";N;s:11:"allow_empty";N;s:15:"allow_signature";N;s:15:"editor_icon_url";N;s:11:"sprite_mode";N;s:13:"sprite_params";N;s:7:"example";N;s:6:"active";N;s:8:"addon_id";N;s:10:"vw_varname";N;s:8:"vw_extra";N;s:10:"vw_options";N;s:8:"prefixid";i:1;s:5:"title";s:7:"Special";s:14:"bbcode_varname";s:0:"";s:9:"prefixkey";s:7:"special";s:8:"parentid";i:0;s:10:"languageid";i:0;s:9:"cache_key";i:1;}}' END Mysqli statement execute error : Deadlock found when trying to get lock; try restarting transaction - vault/core/controller/db/xf.php:169
So I think what we are going to have to do in this case is:
Try the multiple row INSERT INTO ... ON DUPLICATE UPDATE, which might deadlock but is most efficient.
If there was a database error (read: deadlock):
Catch the error.
Break the query into single row INSERT INTO ... ON DUPLICATE UPDATE. These won't deadlock unless there is a bug in your MySQL version.
While xf_data_registry inserts are rare (so long as you have VW_CACHE_ON enabled), it isn't the only table where we do REPLACE variants into, so I think the above plan should resolve the deadlock issue while preserving efficiency for other tables.
It's worth asking how performance/concurrency is affected on your site when this deadlock occurs. If requests start taking a long time during the deadlock, this might need to be elevated to a security issue. How long does a request last before it throws the deadlock error? Does it time out? Or does it return the error in a reasonable amount of time? If it takes longer than a normal request (no deadlock), even if it's only 2 or 3 seconds longer, this situation could be exploited.
unset($input['shutdown']);
$data = $this->construct_insert_string($input['values']);
$trystmt = $stmt;
$trystmt .= " INTO ";
$trystmt .= $this->wrap($this->prefix($ready['table']));
if (!empty($data))
{
$trystmt .= " (" . $data['fields'] . ") ";
$trystmt .= " VALUES " . $data['values'];
}
$tryquery = $trystmt . $query;
vw_DB::get($this->key)->func()->hide_errors();
$retval = $this->shutdown_or_run($tryquery);
vw_DB::get($this->key)->func()->show_errors();
if ($retval)
{
return $retval;
}
else if (vw_DB::get($this->key)->func()->errno() == 1213)
{
static $i = 0;
if ($i < 5)
{
$i++;
// deadlock, retry, but one row at a time
foreach ($input['values'] AS $i => $set)
{
$this->replace(array(
'values' => array($set)
) + $input);
}
$i--;
return true;
}
}
vw_DB::get($this->key)->func()->halt(vw_DB::get($this->key)->func()->error());
return false;
This code does following:
Try the multiple-row insert.
If it failed due to a non-deadlock error, throw the error.
If it failed due to a deadlock, retry the insert one row at a time.
If we have to retry a single row more than 5 times, throw the deadlock error.
Please let me know if you still have this issue. I cannot see a way to improve the handling for INSERT ... ON DUPLICATE UPDATE any more, except maybe to allow more than 5 retries.
It is possible that a deadlock can still occur in a normal UPDATE, but that would have to be handled as a separate bug if it ever occurs.
An exception occurred: in /home/agorapolis/public_html/vault/core/controller/db/xf.php on line 393
vw_DB_Controller_XF->halt() in /home/agorapolis/public_html/vault/core/model/db/mysql/vw.php at line 1043
vw_DB_MySQL_Model->replace() in /home/agorapolis/public_html/vault/core/model/shutdown/vw.php at line 52
vw_Shutdown_Model->shutdown() in /home/agorapolis/public_html/vault/core/model/shutdown/xf.php at line 23
vw_Shutdown_Model_XF->shutdown() in vw/XenForo/CodeEventListener/Public.php at line 308
vw_XenForo_CodeEventListener_Public::front_controller_post_view()
call_user_func_array() in XenForo/CodeEvent.php at line 90
XenForo_CodeEvent::fire() in XenForo/FrontController.php at line 183
XenForo_FrontController->run() in /home/agorapolis/public_html/index.php at line 13
public function error()
{
}
public function errno()
{
}
Replace with:
Code:
public function error()
{
return $this->get_instance()->getConnection()->error;
}
public function errno()
{
return $this->get_instance()->getConnection()->errno;
}
This site uses cookies to help personalize content, to tailor your experience, and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.