Is this happening for all pages on the wiki,
or just for this “TestPage”?



On Monday, August 11, 2014 at 4:48 PM, Bjoern Kahl wrote:

>  
> Dear Scott
> dear All,
>  
> Am 11.08.14 um 11:54 schrieb C. Scott Ananian:
> > > What could cause this behavior and how should I configure my system to
> > > prevent the deadlocks? If this is a Bug in either MediWiki or the
> > > VisualEditor or Parsoid, how to further investigate and fix it?
> > > Wikitech-l mailing list
> > > Wikitech-l@lists.wikimedia.org (mailto:Wikitech-l@lists.wikimedia.org)
> > > https://lists.wikimedia.org/mailman/listinfo/wikitech-l
> > >  
> >  
> >  
> > Holding a database lock while a Parsoid query is made seems like a really
> > bad idea. That seems like it could be a big in MediaWiki core. However,
> > I'm running an almost identical setup on my machine (Debian/unstable rather
> > than wheezy) as are most Parsoid developers (Ubuntu instead of Debian) and
> > I've never seen this.
> >  
>  
>  
> Honestly, I was surprised running into this problem and I am still not
> sure where the culprit is. MediaWiki is used at so many places, it is
> hard to believe in a locking bug, although possible.
>  
>  
> > Perhaps I might suggest looking closely at the code which takes database
> > locks, and why it is doing so? Perhaps more details on your db
> > configuration would also be helpful, if you're not using Debian and
> > MediaWiki defaults.
> >  
>  
>  
> Here come more details:
>  
> - Everything runs on a single server, single core.
>  
> - System runs in 32 bit mode (although CPU is capable of 64 bit mode)
>  
> - mySQL table type is InnoDB
>  
> - no unusual mysql server options are in effect, as far as I remember
>  
> - PHP is not using memcache or any other caching module
>  
> - the Wiki is mostly idle, approx 30 users and highest ever concurrent
> login count was 3 users.
>  
> - All tests so far done with a copy where at most one user was active
> at anytime (myself)
>  
> - my LocalSettings.php might be a bit non-standard. Here some
> settings that may or may not be relevant (in order of appearance
> in LocalSettings.php):
>  
> + $wgDBprefix = "wiki_";
> + $wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=binary";
> + $wgDBmysql5 = false;
> + $wgMainCacheType = CACHE_NONE;
> + $wgMemCachedServers = array();
> + $wgUseInstantCommons = false;
> + $wgDefaultSkin = "vector";
> + $wgResourceLoaderMaxQueryLength = -1;
> + $wgGroupPermissions['*']['createaccount'] = false;
> + $wgGroupPermissions['*']['edit'] = false;
> + $wgGroupPermissions['*']['read'] = false;
> + require_once ( 'extensions/BibTex/bibtex.php' );
> + require_once ( 'extensions/MathJax/MathJax.php' );
> + $wgParserCacheType = CACHE_NONE;
> + $wgTexvc = '/extensions/Math/math/texvc';
> + $wgUseTeX = true;
> + require_once('extensions/WikiEditor/WikiEditor.php');
> + require_once "$IP/extensions/Parsoid/Parsoid.php";
> + require_once "$IP/extensions/VisualEditor/VisualEditor.php";
> + $wgDefaultUserOptions['visualeditor-enable'] = 1;
> + $wgVisualEditorParsoidURL = 'http://<my.server.name 
> (http://my.server.name)>:8000';
> + $wgVisualEditorParsoidPrefix = 'testwiki';
> + $wgSessionsInObjectCache = true;
> + $wgVisualEditorParsoidForwardCookies = true;
> + require_once('extensions/UserMerge/UserMerge.php');
> + require_once("$IP/extensions/LastUserLogin/LastUserLogin.php");
>  
> - Also in LocalSettings.php, I have enabled debugging using:
>  
> + $wgDebugLogFile = "</some/path/to>/mediawiki-debug-{$wgDBname}.log";
> + $wgShowSQLErrors = true;
> + $wgShowDBErrorBacktrace = true;
> + $wgDebugTimestamps = true;
> + $wgDebugDumpSql = true;
>  
> Are there other / better options to get a comprehensive trace of
> what happens when?
>  
>  
> - - - - Please find below an excerpt from the debug log - - - -
>  
> Note:
> I tweaked wfDebugTimer() to have absolute timestamps and to have
> client address/port in order to relate debug log lines to tcpdump
> logs from capturing the on-wire conversation between MediaWiki and
> Parsoid service.
>  
> Sorry for the overlong lines.
>  
> If I should upload the log somewhere, please tell me where.
>  
>  
> (1) client access to API for visual editor
>  
> <client.ip>:55246 17:49:15.640 0.1347 1.5M Start request GET
> /wiki/api.php?format=json&action=visualeditor&paction=parse&page=TestPage
> HTTP HEADERS:
> HOST: <my.server.name (http://my.server.name)>
> X-REQUESTED-WITH: XMLHttpRequest
> USER-AGENT: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8)
> AppleWebKit/534.59.10 (KHTML, like Gecko) Version/5.1.9 Safari/534.59.10
> ACCEPT: application/json, text/javascript, */*; q=0.01
> REFERER: http://<my.server.name 
> (http://my.server.name)>/wiki/index.php/TestPage?veaction=edit
> ACCEPT-LANGUAGE: de-de
> ACCEPT-ENCODING: gzip, deflate
> COOKIE: wikiEditor-0-toolbar-section=advanced;
> test_wiki__session=gt5evdjgg9ebdrkcg4i6c6gqc0;
> test_wiki_UserName=TestUser; test_wiki_UserID=18;
> PHPSESSID=ts0j9nug4oa0o2c4fka2ok5ei3
> CONNECTION: keep-alive
> <client.ip>:55246 17:49:15.662 0.1566 1.5M [caches] main:
> EmptyBagOStuff, message: SqlBagOStuff, parser: EmptyBagOStuff
> <client.ip>:55246 17:49:15.730 0.2252 2.2M Connected to database 0
> at localhost
> <client.ip>:55246 17:49:15.737 0.2318 2.2M Connected to database 0
> at localhost
> <client.ip>:55246 17:49:15.738 0.2326 2.2M Query test (1) (slave):
> SELECT /* SqlBagOStuff::getMulti */ keyname,value,exptime FROM
> `wiki_objectcache` WHERE keyname =
> 'test-wiki_:session:gt5evdjgg9ebdrkcg4i6c6gqc0'
> <client.ip>:55246 17:49:15.837 0.3320 3.2M [caches]
> LocalisationCache: using store LCStoreDB
> <client.ip>:55246 17:49:15.924 0.4189 4.2M Unstubbing $wgParser on
> call of $wgParser::setHook from wfBibtexExtension
> <client.ip>:55246 17:49:15.990 0.4846 4.8M Parser: using
> preprocessor: Preprocessor_DOM
> <client.ip>:55246 17:49:15.997 0.4921 4.8M DatabaseBase::query:
> Writes done: UPDATE `wiki_user` SET user_touched = '20140809154915'
> WHERE user_id = 18
>  
> *** next line starts transaction ***
>  
> <client.ip>:55246 17:49:15.998 0.4926 4.8M Query test (2) (slave):
> BEGIN /* DatabaseBase::query (DatabaseBase::query) */
> <client.ip>:55246 17:49:15.998 0.4932 4.8M Query test (3) (slave):
> UPDATE /* DatabaseBase::query */ `wiki_user` SET user_touched =
> '20140809154915' WHERE user_id = 18
> <client.ip>:55246 17:49:20.242 4.7366 4.8M Fully initialised
> <client.ip>:55246 17:49:20.298 4.7928 5.2M User: cache miss for user 18
> <client.ip>:55246 17:49:20.299 4.7937 5.2M Query test (4) (slave):
> SELECT /* User::loadFromDatabase */
> user_id,user_name,user_real_name,user_password,user_newpassword,user_newpass_time,user_email,user_touched,user_token,user_email_authenticated,user_email_token,user_email_token_expires,user_password_expires,user_registration,user_editcount
> FROM `wiki_user` WHERE user_id = '18' LIMIT 1
> <client.ip>:55246 17:49:20.305 4.8003 5.2M Query test (5) (slave):
> SELECT /* User::loadGroups */ ug_group FROM `wiki_user_groups`
> WHERE ug_user = '18'
> <client.ip>:55246 17:49:20.315 4.8096 5.5M Query test (6) (slave):
> SELECT /* LCStoreDB::get */ lc_value FROM `wiki_l10n_cache` WHERE
> lc_lang = 'en' AND lc_key = 'deps' LIMIT 1
> <client.ip>:55246 17:49:20.317 4.8120 5.5M Query test (7) (slave):
> SELECT /* LCStoreDB::get */ lc_value FROM `wiki_l10n_cache` WHERE
> lc_lang = 'en' AND lc_key = 'list' LIMIT 1
> <client.ip>:55246 17:49:20.323 4.8181 6.0M Query test (8) (slave):
> SELECT /* LCStoreDB::get */ lc_value FROM `wiki_l10n_cache` WHERE
> lc_lang = 'en' AND lc_key = 'preload' LIMIT 1
> <client.ip>:55246 17:49:20.332 4.8275 6.0M Query test (9) (slave):
> SELECT /* LCStoreDB::get */ lc_value FROM `wiki_l10n_cache` WHERE
> lc_lang = 'en' AND lc_key = 'preload' LIMIT 1
> <client.ip>:55246 17:49:20.336 4.8310 6.0M User: loading options
> for user 18 from database.
> <client.ip>:55246 17:49:20.337 4.8318 6.0M Query test (10) (slave):
> SELECT /* User::loadOptions */ up_property,up_value FROM
> `wiki_user_properties` WHERE up_user = '18'
> <client.ip>:55246 17:49:20.338 4.8330 6.0M User: logged in from session
> <client.ip>:55246 17:49:20.356 4.8515 6.0M Query test (11) (slave):
> SELECT /* LCStoreDB::get TestUser */ lc_value FROM `wiki_l10n_cache`
> WHERE lc_lang = 'en' AND lc_key = 'namespaceGenderAliases' LIMIT 1
> <client.ip>:55246 17:49:20.358 4.8527 6.0M Query test (12) (slave):
> SELECT /* LinkCache::addLinkObj TestUser */
> page_id,page_len,page_is_redirect,page_latest,page_content_model FROM
> `wiki_page` WHERE page_namespace = '2' AND page_title = 'TestUser'
> LIMIT 1
> <client.ip>:55246 17:49:20.367 4.8623 6.0M Query test (13) (slave):
> SELECT /* Revision::fetchFromConds TestUser */
> rev_id,rev_page,rev_text_id,rev_timestamp,rev_comment,rev_user_text,rev_user,rev_minor_edit,rev_deleted,rev_len,rev_parent_id,rev_sha1,rev_content_format,rev_content_model,page_namespace,page_title,page_id,page_latest,page_is_redirect,page_len,user_name
> FROM `wiki_revision` INNER JOIN `wiki_page` ON ((page_id = rev_page))
> LEFT JOIN `wiki_user` ON ((rev_user != 0) AND (user_id = rev_user))
> WHERE page_namespace = '2' AND page_title = 'TestUser'
>  
> Note: no "COMMIT" here. Transaction will eventually be COMMITed after
> timing out interaction with Parsoid service and aborting the
> VisualEditor request (not part of this log excerpt).
>  
>  
> (2) Mediawiki calling Parsoid service (from tcpdump, abridged)
>  
> 17:49:20.387646 IP <server.ip>.37260 > <server.ip>.8000: Flags [S], seq
> 3008505020, win 32792
> 17:49:20.387678 IP <server.ip>.8000 > <server.ip>.37260: Flags [S.], seq
> 59446639, ack 3008505021, win 32768
> 17:49:20.387702 IP <server.ip>.37260 > <server.ip>.8000: Flags [.], ack
> 1, win 2050
> 17:49:20.389966 IP <server.ip>.37260 > <server.ip>.8000: Flags [P.], seq
> 1:387, ack 1, win 2050
> GET /testwiki/TestPage?oldid=4053 HTTP/1.0
> Host: <my.server.name (http://my.server.name)>:8000
> Accept: */*
> Accept-Encoding: deflate, gzip^MCookie:
> wikiEditor-0-toolbar-section=advanced;
> test_wiki__session=gt5evdjgg9ebdrkcg4i6c6gqc0;
> test_wiki_UserName=TestUser; test_wiki_UserID=18;
> PHPSESSID=ts0j9nug4oa0o2c4fka2ok5ei3
> User-Agent: MediaWiki/1.23.2
>  
>  
> 17:49:20.390014 IP <server.ip>.8000 > <server.ip>.37260: Flags [.], ack
> 387, win 2048
>  
>  
> (3a) Parsoid calling MediaWiki API (from tcpdump, abridged)
>  
>  
> 17:49:20.412369 IP <server.ip>.43619 > <server.ip>.80: Flags [S], seq
> 1070720780, win 32792
> 17:49:20.412402 IP <server.ip>.80 > <server.ip>.43619: Flags [S.], seq
> 4074871095, ack 1070720781, win 32768
> 17:49:20.412427 IP <server.ip>.43619 > <server.ip>.80: Flags [.], ack 1,
> win 2050
> 17:49:20.413214 IP <server.ip>.43619 > <server.ip>.80: Flags [P.], seq
> 1:459, ack 1, win 2050
> GET
> /wiki/api.php?format=json&action=query&prop=revisions&rvprop=content%7Cids%7Ctimestamp%7Cuser%7Cuserid%7Csize%7Csha1%7Ccontentmodel%7Ccomment&revids=4053
> HTTP/1.1
> User-Agent: Parsoid/0.1
> Connection: close
> Cookie: wikiEditor-0-toolbar-section=advanced;
> test_wiki__session=gt5evdjgg9ebdrkcg4i6c6gqc0;
> test_wiki_UserName=TestUser; test_wiki_UserID=18;
> PHPSESSID=ts0j9nug4oa0o2c4fka2ok5ei3
> host: <my.server.name (http://my.server.name)>
>  
>  
> 17:49:20.413264 IP <server.ip>.80 > <server.ip>.43619: Flags [.], ack
> 459, win 2048
>  
>  
> (3b) Parsoid calling MediaWiki API (from MediaWiki debug log)
>  
> <server.ip>:43619 17:49:20.492 0.0759 1.5M Start request GET
> /wiki/api.php?format=json&action=query&prop=revisions&rvprop=content%7Cids%7Ctimestamp%7Cuser%7Cuserid%7Csize%7Csha1%7Ccontentmodel%7Ccomment&revids=4053
> HTTP HEADERS:
> USER-AGENT: Parsoid/0.1
> CONNECTION: close
> COOKIE: wikiEditor-0-toolbar-section=advanced;
> test_wiki__session=gt5evdjgg9ebdrkcg4i6c6gqc0;
> test_wiki_UserName=TestUser; test_wiki_UserID=18;
> PHPSESSID=ts0j9nug4oa0o2c4fka2ok5ei3
> HOST: <my.server.name (http://my.server.name)>
> <server.ip>:43619 17:49:20.502 0.0859 1.5M [caches] main:
> EmptyBagOStuff, message: SqlBagOStuff, parser: EmptyBagOStuff
> <server.ip>:43619 17:49:20.538 0.1221 2.2M Connected to database 0
> at localhost
> <server.ip>:43619 17:49:20.539 0.1234 2.2M Connected to database 0
> at localhost
> <server.ip>:43619 17:49:20.540 0.1241 2.2M Query test (1) (slave):
> SELECT /* SqlBagOStuff::getMulti */ keyname,value,exptime FROM
> `wiki_objectcache` WHERE keyname =
> 'test-wiki_:session:gt5evdjgg9ebdrkcg4i6c6gqc0'
> <server.ip>:43619 17:49:20.594 0.1782 3.2M [caches]
> LocalisationCache: using store LCStoreDB
> <server.ip>:43619 17:49:20.640 0.2249 4.2M Unstubbing $wgParser on
> call of $wgParser::setHook from wfBibtexExtension
> <server.ip>:43619 17:49:20.672 0.2567 4.8M Parser: using
> preprocessor: Preprocessor_DOM
> <server.ip>:43619 17:49:20.676 0.2603 4.8M DatabaseBase::query:
> Writes done: UPDATE `wiki_user` SET user_touched = '20140809154920'
> WHERE user_id = 18
> <server.ip>:43619 17:49:20.676 0.2608 4.8M Query test (2) (slave):
> BEGIN /* DatabaseBase::query (DatabaseBase::query) */
> <server.ip>:43619 17:49:20.677 0.2614 4.8M Query test (3) (slave):
> UPDATE /* DatabaseBase::query */ `wiki_user` SET user_touched =
> '20140809154920' WHERE user_id = 18
>  
> *** dead lock occurred ***
>  
> (4) Parsoid timing out and recalling
>  
> <server.ip>:43620 17:50:00.515 0.0757 1.5M Start request GET
> /wiki/api.php?format=json&action=query&prop=revisions&rvprop=content%7Cids%7Ctimestamp%7Cuser%7Cuserid%7Csize%7Csha1%7Ccontentmodel%7Ccomment&revids=4053
> HTTP HEADERS:
> USER-AGENT: Parsoid/0.1
> CONNECTION: close
> COOKIE: wikiEditor-0-toolbar-section=advanced;
> test_wiki__session=gt5evdjgg9ebdrkcg4i6c6gqc0;
> test_wiki_UserName=TestUser; test_wiki_UserID=18;
> PHPSESSID=ts0j9nug4oa0o2c4fka2ok5ei3
> HOST: <my.server.name (http://my.server.name)>
> <server.ip>:43620 17:50:00.525 0.0854 1.5M [caches] main:
> EmptyBagOStuff, message: SqlBagOStuff, parser: EmptyBagOStuff
> <server.ip>:43620 17:50:00.559 0.1197 2.2M Connected to database 0
> at localhost
> <server.ip>:43620 17:50:00.560 0.1209 2.2M Connected to database 0
> at localhost
> <server.ip>:43620 17:50:00.561 0.1216 2.2M Query test (1) (slave):
> SELECT /* SqlBagOStuff::getMulti */ keyname,value,exptime FROM
> `wiki_objectcache` WHERE keyname =
> 'test-wiki_:session:gt5evdjgg9ebdrkcg4i6c6gqc0'
> <server.ip>:43620 17:50:00.612 0.1727 3.2M [caches]
> LocalisationCache: using store LCStoreDB
> <server.ip>:43620 17:50:00.657 0.2171 4.2M Unstubbing $wgParser on
> call of $wgParser::setHook from wfBibtexExtension
> <server.ip>:43620 17:50:00.687 0.2475 4.8M Parser: using
> preprocessor: Preprocessor_DOM
> <server.ip>:43620 17:50:00.691 0.2510 4.8M DatabaseBase::query:
> Writes done: UPDATE `wiki_user` SET user_touched = '20140809155000'
> WHERE user_id = 18
> <server.ip>:43620 17:50:00.691 0.2515 4.8M Query test (2) (slave):
> BEGIN /* DatabaseBase::query (DatabaseBase::query) */
> <server.ip>:43620 17:50:00.692 0.2521 4.8M Query test (3) (slave):
> UPDATE /* DatabaseBase::query */ `wiki_user` SET user_touched =
> '20140809155000' WHERE user_id = 18
>  
> *** dead lock ***
>  
> (5) MediaWiki timing out on lock acquisition
>  
> <server.ip>:43619 17:50:11.927 51.5110 4.8M SQL ERROR: Lock wait
> timeout exceeded; try restarting transaction (localhost)
> <server.ip>:43619 17:50:11.937 51.5217 4.8M [Bug56269] Exception
> thrown with an uncommited database transaction: [5640864b]
> /wiki/api.php?format=json&action=query&prop=revisions&rvprop=content%7Cids%7Ctimestamp%7Cuser%7Cuserid%7Csize%7Csha1%7Ccontentmodel%7Ccomment&revids=4053
> Exception from line 1157 of
> </some/path>/wiki/includes/db/Database.php: A database error has
> occurred. Did you forget to run maintenance/update.php after upgrading?
> See: https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script
> Query: UPDATE `wiki_user` SET user_touched = '20140809154920' WHERE
> user_id = 18
> Function: DatabaseBase::query
> Error: 1205 Lock wait timeout exceeded; try restarting transaction
> (localhost)
>  
> #0 </some/path>/wiki/includes/db/Database.php(1123):
> DatabaseBase->reportQueryError('Lock wait timeo...', 1205, 'UPDATE
> `wiki_us...', 'DatabaseBase::q...', false)
> #1 </some/path>/wiki/extensions/LastUserLogin/LastUserLogin.php(64):
> DatabaseBase->query('UPDATE `wiki_us...')
> #2 [internal function]: wfUpdateUserTouched()
> #3 </some/path>/wiki/includes/Setup.php(601):
> call_user_func('wfUpdateUserTou...')
> #4 </some/path>/wiki/includes/WebStart.php(156):
> require_once('/var/www/virtua...')
> #5 </some/path>/wiki/api.php(43): require('/var/www/virtua...')
> #6 {main}
> <server.ip>:43619 17:50:11.938 51.5224 4.8M Query test (4) (slave):
> ROLLBACK /* LoadBalancer::rollbackMasterChanges */
> <server.ip>:43619 17:50:11.941 51.5257 4.8M DatabaseBase::query:
> Writes done: REPLACE INTO `wiki_objectcache` (keyname,value,exptime)
> VALUES ('test-wiki_:session:gt5evdjgg9ebdrkcg4i6c6gqc0','<binary data
> removed>','20140809165011')
> <server.ip>:43619 17:50:11.942 51.5262 4.8M Query test (5) (slave):
> REPLACE /* SqlBagOStuff::set */ INTO `wiki_objectcache`
> (keyname,value,exptime) VALUES
> ('testtest-wiki_:session:gt5evdjgg9ebdrkcg4i6c6gqc0','<binary data
> removed>','20140809165011')
>  
>  
>  
> Best regards
>  
> Björn
>  
> --  
> | Bjoern Kahl +++ Siegburg +++ Germany |
> | "googlelogin@-my-domain-" +++ www.bjoern-kahl.de 
> (http://www.bjoern-kahl.de) |
> | Languages: German, English, Ancient Latin (a bit :-)) |
>  
> _______________________________________________
> Wikitech-l mailing list
> Wikitech-l@lists.wikimedia.org (mailto:Wikitech-l@lists.wikimedia.org)
> https://lists.wikimedia.org/mailman/listinfo/wikitech-l
>  
>  


_______________________________________________
Wikitech-l mailing list
Wikitech-l@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to