gnosygnu / xowa

xowa offline wiki application
Other
375 stars 41 forks source link

Html_dump: Threading error when dumping categories in enwikt: "failed to render extension" #389

Open desb42 opened 5 years ago

desb42 commented 5 years ago

I have just finished a build of enwiktionary (including an html build) and in examining the session log I have found what I suspect is a multi threading issue. The log has approx 11,000 entries of the above error These errors themselves have something to do with \ That is, the error is triggered by the attempt to process SQL for a dynamicpagelist

Two SQL errors have cropped up

1) [SQLITE_ERROR] SQL error or missing database (database link_db_1 is already in use)
   [err 1] <db> db.engine:exec failed: url=data source=g:\xowa\wiki\en.wiktionary.org\en.wiktionary.org-xtn.category.core.xowa;version=3; 
    sql=ATTACH 'g:\xowa\wiki\en.wiktionary.org\en.wiktionary.org-xtn.category.link-db.001.xowa' AS link_db_1;
2) [SQLITE_ERROR] SQL error or missing database (database link_db_1 is locked)
   [err 1] <db> db.engine:exec failed: url=data source=g:\xowa\wiki\en.wiktionary.org\en.wiktionary.org-xtn.category.core.xowa;version=3; 
    sql=DETACH link_db_1;

If I look at these individual pages in xowa then no error occurs All these pages seem to share (I have only done a spot check) the same Module, Category_tree This builds two \

I think that there is some interference between threads (that is, some lack of synchonisation). I am not sure how to investigate further

desb42 commented 5 years ago

Oops, I forgot to give some example pages where this has occurred All the pages are namespace Category

Category:Clothing Category:Latin prefixes

gnosygnu commented 5 years ago

Cool. Thanks for the example pages.

I took a look at it and think I may have found the issue. My guess is that https://en.wiktionary.org/wiki/Module:category_tree has multiple calls to pagesincategory which locks the database when Load_ctg_or_null (where the SQLITE_ERROR is occurring). See commit above.

If this doesn't resolve the issue, let me know, and I'll reinvestigate (maybe also post the log entry from one of the 11,000?) I'm finishing up dewiki now, and planning to go to enwiki in the next week or so, before continuing through enwiktionary and enwikisource afterwards. Thanks.

desb42 commented 5 years ago

Three log entries

20190318_172854.753 failed to render extension: title=Category:Uralic languages excerpt=category=Uralic languages
namespace=
count=10
mode=ordered
ordermethod=categoryadd
order=descending err=[err 0] <org.sqlite.SQLiteException> [SQLITE_ERROR] SQL error or missing database (database link_db_1 is locked)
  [err 1] <db> db.engine:exec failed: url=data source=g:\xowa\wiki\en.wiktionary.org\en.wiktionary.org-xtn.category.core.xowa;version=3; sql=DETACH link_db_1;
  [trace]:
    org.sqlite.core.DB.newSQLException(DB.java:909)
    org.sqlite.core.DB.newSQLException(DB.java:921)
    org.sqlite.core.DB.throwex(DB.java:886)
    org.sqlite.core.NativeDB._exec_utf8(Native Method)
    org.sqlite.core.NativeDB._exec(NativeDB.java:87)
    org.sqlite.jdbc3.JDBC3Statement.executeUpdate(JDBC3Statement.java:116)
    gplx.dbs.engines.Db_engine_sql_base.Exec_as_int(Db_engine_sql_base.java:48)
    gplx.dbs.engines.sqlite.Sqlite_engine.Env_db_detach(Sqlite_engine.java:43)
    gplx.dbs.Db_conn.Env_db_detach(Db_conn.java:36)
    gplx.dbs.Db_attach_mgr.Detach(Db_attach_mgr.java:52)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.dbs.Xoctg_catlink_loader.Load_catlinks(Xoctg_catlink_loader.java:165)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.dbs.Xoctg_catlink_loader.Run(Xoctg_catlink_loader.java:26)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.dbs.Xoctg_catpage_loader.Load_ctg_or_null(Xoctg_catpage_loader.java:65)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.Xoctg_catpage_mgr.Get_or_load_or_null(Xoctg_catpage_mgr.java:58)
    gplx.xowa.xtns.dynamicPageList.Dpl_page_finder.Find_pages_in_ctg(Dpl_xnde.java:135)
    gplx.xowa.xtns.dynamicPageList.Dpl_page_finder.Find_pages(Dpl_xnde.java:110)
    gplx.xowa.xtns.dynamicPageList.Dpl_xnde.Xtn_parse(Dpl_xnde.java:28)
    gplx.xowa.parsers.xndes.Xop_xnde_wkr.Make_xnde_xtn(Xop_xnde_wkr.java:686)
    gplx.xowa.parsers.xndes.Xop_xnde_wkr.Make_xtag_bgn(Xop_xnde_wkr.java:322)
    gplx.xowa.parsers.xndes.Xop_xnde_wkr.Make_tkn(Xop_xnde_wkr.java:223)
    gplx.xowa.parsers.xndes.Xop_xnde_lxr.Make_tkn(Xop_xnde_lxr.java:23)
    gplx.xowa.parsers.Xop_parser.Parse_to_src_end(Xop_parser.java:140)
    gplx.xowa.parsers.Xop_parser.Parse(Xop_parser.java:122)
    gplx.xowa.parsers.Xop_parser.Parse_wtxt_to_wdom(Xop_parser.java:111)
    gplx.xowa.parsers.Xop_parser.Parse_text_to_wdom(Xop_parser.java:106)
    gplx.xowa.parsers.Xow_parser_mgr.Parse(Xow_parser_mgr.java:98)
    gplx.xowa.addons.bldrs.mass_parses.parses.wkrs.Xomp_parse_wkr.Exec(Xomp_parse_wkr.java:130)
    gplx.xowa.addons.bldrs.mass_parses.parses.wkrs.Xomp_parse_wkr.Invk(Xomp_parse_wkr.java:189)
    gplx.Gfo_invk_.Invk_by_msg(Gfo_invk_.java:34)
    gplx.core.threads.Thread_adp.run(Thread_adp.java:33)
    java.lang.Thread.run(Thread.java:748)
20190318_172854.755 failed to render extension: title=Category:Clothing excerpt=category=Clothing
namespace=
count=10
mode=ordered
ordermethod=categoryadd
order=descending err=[err 0] <org.sqlite.SQLiteException> [SQLITE_ERROR] SQL error or missing database (database link_db_1 is already in use)
  [err 1] <db> db.engine:exec failed: url=data source=g:\xowa\wiki\en.wiktionary.org\en.wiktionary.org-xtn.category.core.xowa;version=3; sql=ATTACH 'g:\xowa\wiki\en.wiktionary.org\en.wiktionary.org-xtn.category.link-db.001.xowa' AS link_db_1;
  [trace]:
    org.sqlite.core.DB.newSQLException(DB.java:909)
    org.sqlite.core.DB.newSQLException(DB.java:921)
    org.sqlite.core.DB.throwex(DB.java:886)
    org.sqlite.core.NativeDB._exec_utf8(Native Method)
    org.sqlite.core.NativeDB._exec(NativeDB.java:87)
    org.sqlite.jdbc3.JDBC3Statement.executeUpdate(JDBC3Statement.java:116)
    gplx.dbs.engines.Db_engine_sql_base.Exec_as_int(Db_engine_sql_base.java:48)
    gplx.dbs.engines.sqlite.Sqlite_engine.Env_db_attach(Sqlite_engine.java:42)
    gplx.dbs.Db_conn.Env_db_attach(Db_conn.java:35)
    gplx.dbs.Db_attach_mgr.Attach(Db_attach_mgr.java:45)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.dbs.Xoctg_catlink_loader.Load_catlinks(Xoctg_catlink_loader.java:148)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.dbs.Xoctg_catlink_loader.Run(Xoctg_catlink_loader.java:26)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.dbs.Xoctg_catpage_loader.Load_ctg_or_null(Xoctg_catpage_loader.java:65)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.Xoctg_catpage_mgr.Get_or_load_or_null(Xoctg_catpage_mgr.java:58)
    gplx.xowa.xtns.dynamicPageList.Dpl_page_finder.Find_pages_in_ctg(Dpl_xnde.java:135)
    gplx.xowa.xtns.dynamicPageList.Dpl_page_finder.Find_pages(Dpl_xnde.java:110)
    gplx.xowa.xtns.dynamicPageList.Dpl_xnde.Xtn_parse(Dpl_xnde.java:28)
    gplx.xowa.parsers.xndes.Xop_xnde_wkr.Make_xnde_xtn(Xop_xnde_wkr.java:686)
    gplx.xowa.parsers.xndes.Xop_xnde_wkr.Make_xtag_bgn(Xop_xnde_wkr.java:322)
    gplx.xowa.parsers.xndes.Xop_xnde_wkr.Make_tkn(Xop_xnde_wkr.java:223)
    gplx.xowa.parsers.xndes.Xop_xnde_lxr.Make_tkn(Xop_xnde_lxr.java:23)
    gplx.xowa.parsers.Xop_parser.Parse_to_src_end(Xop_parser.java:140)
    gplx.xowa.parsers.Xop_parser.Parse(Xop_parser.java:122)
    gplx.xowa.parsers.Xop_parser.Parse_wtxt_to_wdom(Xop_parser.java:111)
    gplx.xowa.parsers.Xop_parser.Parse_text_to_wdom(Xop_parser.java:106)
    gplx.xowa.parsers.Xow_parser_mgr.Parse(Xow_parser_mgr.java:98)
    gplx.xowa.addons.bldrs.mass_parses.parses.wkrs.Xomp_parse_wkr.Exec(Xomp_parse_wkr.java:130)
    gplx.xowa.addons.bldrs.mass_parses.parses.wkrs.Xomp_parse_wkr.Invk(Xomp_parse_wkr.java:189)
    gplx.Gfo_invk_.Invk_by_msg(Gfo_invk_.java:34)
    gplx.core.threads.Thread_adp.run(Thread_adp.java:33)
    java.lang.Thread.run(Thread.java:748)
20190318_172855.362 failed to render extension: title=Category:Karelian language excerpt=category=Karelian language
namespace=
count=10
mode=ordered
ordermethod=categoryadd
order=descending err=[err 0] <org.sqlite.SQLiteException> [SQLITE_ERROR] SQL error or missing database (database link_db_1 is locked)
  [err 1] <db> db.engine:exec failed: url=data source=g:\xowa\wiki\en.wiktionary.org\en.wiktionary.org-xtn.category.core.xowa;version=3; sql=DETACH link_db_1;
  [trace]:
    org.sqlite.core.DB.newSQLException(DB.java:909)
    org.sqlite.core.DB.newSQLException(DB.java:921)
    org.sqlite.core.DB.throwex(DB.java:886)
    org.sqlite.core.NativeDB._exec_utf8(Native Method)
    org.sqlite.core.NativeDB._exec(NativeDB.java:87)
    org.sqlite.jdbc3.JDBC3Statement.executeUpdate(JDBC3Statement.java:116)
    gplx.dbs.engines.Db_engine_sql_base.Exec_as_int(Db_engine_sql_base.java:48)
    gplx.dbs.engines.sqlite.Sqlite_engine.Env_db_detach(Sqlite_engine.java:43)
    gplx.dbs.Db_conn.Env_db_detach(Db_conn.java:36)
    gplx.dbs.Db_attach_mgr.Detach(Db_attach_mgr.java:52)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.dbs.Xoctg_catlink_loader.Load_catlinks(Xoctg_catlink_loader.java:165)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.dbs.Xoctg_catlink_loader.Run(Xoctg_catlink_loader.java:26)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.dbs.Xoctg_catpage_loader.Load_ctg_or_null(Xoctg_catpage_loader.java:65)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.Xoctg_catpage_mgr.Get_or_load_or_null(Xoctg_catpage_mgr.java:58)
    gplx.xowa.xtns.dynamicPageList.Dpl_page_finder.Find_pages_in_ctg(Dpl_xnde.java:135)
    gplx.xowa.xtns.dynamicPageList.Dpl_page_finder.Find_pages(Dpl_xnde.java:110)
    gplx.xowa.xtns.dynamicPageList.Dpl_xnde.Xtn_parse(Dpl_xnde.java:28)
    gplx.xowa.parsers.xndes.Xop_xnde_wkr.Make_xnde_xtn(Xop_xnde_wkr.java:686)
    gplx.xowa.parsers.xndes.Xop_xnde_wkr.Make_xtag_bgn(Xop_xnde_wkr.java:322)
    gplx.xowa.parsers.xndes.Xop_xnde_wkr.Make_tkn(Xop_xnde_wkr.java:223)
    gplx.xowa.parsers.xndes.Xop_xnde_lxr.Make_tkn(Xop_xnde_lxr.java:23)
    gplx.xowa.parsers.Xop_parser.Parse_to_src_end(Xop_parser.java:140)
    gplx.xowa.parsers.Xop_parser.Parse(Xop_parser.java:122)
    gplx.xowa.parsers.Xop_parser.Parse_wtxt_to_wdom(Xop_parser.java:111)
    gplx.xowa.parsers.Xop_parser.Parse_text_to_wdom(Xop_parser.java:106)
    gplx.xowa.parsers.Xow_parser_mgr.Parse(Xow_parser_mgr.java:98)
    gplx.xowa.addons.bldrs.mass_parses.parses.wkrs.Xomp_parse_wkr.Exec(Xomp_parse_wkr.java:130)
    gplx.xowa.addons.bldrs.mass_parses.parses.wkrs.Xomp_parse_wkr.Invk(Xomp_parse_wkr.java:189)
    gplx.Gfo_invk_.Invk_by_msg(Gfo_invk_.java:34)
    gplx.core.threads.Thread_adp.run(Thread_adp.java:33)
    java.lang.Thread.run(Thread.java:748)
gnosygnu commented 5 years ago

Cool. Thanks for the entries. They confirm that it's happening in Get_or_load_or_null whic does have a synchronized block

I'm hoping the above commit fixes it. Thanks.

desb42 commented 5 years ago

I have just completed another run of enwiktionary and I still get the same results Example:

20190330_215150.500 failed to render extension: title=Category:chr:Animals excerpt=category=chr:Animals
namespace=
count=10
mode=ordered
ordermethod=categoryadd
order=descending 
err=[err 0] <org.sqlite.SQLiteException> [SQLITE_ERROR] SQL error or missing database (database link_db_1 is locked)
  [err 1] <db> db.engine:exec failed: url=data source=g:\xowa\wiki\en.wiktionary.org\en.wiktionary.org-xtn.category.core.xowa;version=3; sql=DETACH link_db_1;
  [trace]:
    org.sqlite.core.DB.newSQLException(DB.java:909)
    org.sqlite.core.DB.newSQLException(DB.java:921)
    org.sqlite.core.DB.throwex(DB.java:886)
    org.sqlite.core.NativeDB._exec_utf8(Native Method)
    org.sqlite.core.NativeDB._exec(NativeDB.java:87)
    org.sqlite.jdbc3.JDBC3Statement.executeUpdate(JDBC3Statement.java:116)
    gplx.dbs.engines.Db_engine_sql_base.Exec_as_int(Db_engine_sql_base.java:48)
    gplx.dbs.engines.sqlite.Sqlite_engine.Env_db_detach(Sqlite_engine.java:43)
    gplx.dbs.Db_conn.Env_db_detach(Db_conn.java:36)
    gplx.dbs.Db_attach_mgr.Detach(Db_attach_mgr.java:52)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.dbs.Xoctg_catlink_loader.Load_catlinks(Xoctg_catlink_loader.java:165)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.dbs.Xoctg_catlink_loader.Run(Xoctg_catlink_loader.java:26)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.dbs.Xoctg_catpage_loader.Load_ctg_or_null(Xoctg_catpage_loader.java:65)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.Xoctg_catpage_mgr.Get_or_load_or_null(Xoctg_catpage_mgr.java:58)
    gplx.xowa.xtns.dynamicPageList.Dpl_page_finder.Find_pages_in_ctg(Dpl_xnde.java:135)
    gplx.xowa.xtns.dynamicPageList.Dpl_page_finder.Find_pages(Dpl_xnde.java:110)
    gplx.xowa.xtns.dynamicPageList.Dpl_xnde.Xtn_parse(Dpl_xnde.java:28)
    gplx.xowa.parsers.xndes.Xop_xnde_wkr.Make_xnde_xtn(Xop_xnde_wkr.java:686)
    gplx.xowa.parsers.xndes.Xop_xnde_wkr.Make_xtag_bgn(Xop_xnde_wkr.java:322)
    gplx.xowa.parsers.xndes.Xop_xnde_wkr.Make_tkn(Xop_xnde_wkr.java:223)
    gplx.xowa.parsers.xndes.Xop_xnde_lxr.Make_tkn(Xop_xnde_lxr.java:23)
    gplx.xowa.parsers.Xop_parser.Parse_to_src_end(Xop_parser.java:140)
    gplx.xowa.parsers.Xop_parser.Parse(Xop_parser.java:122)
    gplx.xowa.parsers.Xop_parser.Parse_wtxt_to_wdom(Xop_parser.java:111)
    gplx.xowa.parsers.Xop_parser.Parse_text_to_wdom(Xop_parser.java:106)
    gplx.xowa.parsers.Xow_parser_mgr.Parse(Xow_parser_mgr.java:99)
    gplx.xowa.addons.bldrs.mass_parses.parses.wkrs.Xomp_parse_wkr.Exec(Xomp_parse_wkr.java:131)
    gplx.xowa.addons.bldrs.mass_parses.parses.wkrs.Xomp_parse_wkr.Invk(Xomp_parse_wkr.java:190)
    gplx.Gfo_invk_.Invk_by_msg(Gfo_invk_.java:34)
    gplx.core.threads.Thread_adp.run(Thread_adp.java:33)
    java.lang.Thread.run(Thread.java:748)
20190330_215150.508 failed to render extension: title=Category:English nouns excerpt=category=English nouns
namespace=
count=10
mode=ordered
ordermethod=categoryadd
order=descending 
err=[err 0] <org.sqlite.SQLiteException> [SQLITE_ERROR] SQL error or missing database (database link_db_1 is already in use)
  [err 1] <db> db.engine:exec failed: url=data source=g:\xowa\wiki\en.wiktionary.org\en.wiktionary.org-xtn.category.core.xowa;version=3; sql=ATTACH 'g:\xowa\wiki\en.wiktionary.org\en.wiktionary.org-xtn.category.link-db.001.xowa' AS link_db_1;
  [trace]:
    org.sqlite.core.DB.newSQLException(DB.java:909)
    org.sqlite.core.DB.newSQLException(DB.java:921)
    org.sqlite.core.DB.throwex(DB.java:886)
    org.sqlite.core.NativeDB._exec_utf8(Native Method)
    org.sqlite.core.NativeDB._exec(NativeDB.java:87)
    org.sqlite.jdbc3.JDBC3Statement.executeUpdate(JDBC3Statement.java:116)
    gplx.dbs.engines.Db_engine_sql_base.Exec_as_int(Db_engine_sql_base.java:48)
    gplx.dbs.engines.sqlite.Sqlite_engine.Env_db_attach(Sqlite_engine.java:42)
    gplx.dbs.Db_conn.Env_db_attach(Db_conn.java:35)
    gplx.dbs.Db_attach_mgr.Attach(Db_attach_mgr.java:45)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.dbs.Xoctg_catlink_loader.Load_catlinks(Xoctg_catlink_loader.java:148)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.dbs.Xoctg_catlink_loader.Run(Xoctg_catlink_loader.java:26)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.dbs.Xoctg_catpage_loader.Load_ctg_or_null(Xoctg_catpage_loader.java:65)
    gplx.xowa.addons.wikis.ctgs.htmls.catpages.Xoctg_catpage_mgr.Get_or_load_or_null(Xoctg_catpage_mgr.java:58)
    gplx.xowa.xtns.dynamicPageList.Dpl_page_finder.Find_pages_in_ctg(Dpl_xnde.java:135)
    gplx.xowa.xtns.dynamicPageList.Dpl_page_finder.Find_pages(Dpl_xnde.java:110)
    gplx.xowa.xtns.dynamicPageList.Dpl_xnde.Xtn_parse(Dpl_xnde.java:28)
    gplx.xowa.parsers.xndes.Xop_xnde_wkr.Make_xnde_xtn(Xop_xnde_wkr.java:686)
    gplx.xowa.parsers.xndes.Xop_xnde_wkr.Make_xtag_bgn(Xop_xnde_wkr.java:322)
    gplx.xowa.parsers.xndes.Xop_xnde_wkr.Make_tkn(Xop_xnde_wkr.java:223)
    gplx.xowa.parsers.xndes.Xop_xnde_lxr.Make_tkn(Xop_xnde_lxr.java:23)
    gplx.xowa.parsers.Xop_parser.Parse_to_src_end(Xop_parser.java:140)
    gplx.xowa.parsers.Xop_parser.Parse(Xop_parser.java:122)
    gplx.xowa.parsers.Xop_parser.Parse_wtxt_to_wdom(Xop_parser.java:111)
    gplx.xowa.parsers.Xop_parser.Parse_text_to_wdom(Xop_parser.java:106)
    gplx.xowa.parsers.Xow_parser_mgr.Parse(Xow_parser_mgr.java:99)
    gplx.xowa.addons.bldrs.mass_parses.parses.wkrs.Xomp_parse_wkr.Exec(Xomp_parse_wkr.java:131)
    gplx.xowa.addons.bldrs.mass_parses.parses.wkrs.Xomp_parse_wkr.Invk(Xomp_parse_wkr.java:190)
    gplx.Gfo_invk_.Invk_by_msg(Gfo_invk_.java:34)
    gplx.core.threads.Thread_adp.run(Thread_adp.java:33)
    java.lang.Thread.run(Thread.java:748)
gnosygnu commented 5 years ago

Ugh... Back to the drawing board....