Topic on Project:Support desk

Deleted external links are still shown on Special:LinkSearch

7
Stefahn (talkcontribs)

I buildt a "link system" on my wikis. External links are added in a special namespace and then integrated into articles by tagging this links.

Now, if we remove a link the site Special:LinkSearch still claims that this link exists on all articles, where this link was integrated into. The problem is Special:RottenLinks shows those deleted links too.

Is this a bug?

I can fix the errors by running Manual:refreshLinks.php but this script takes about 1 hour to run...

TheDJ (talkcontribs)

Those tables get updated asynchronously via the Job queue. Have you tried waiting, or setting a cron job or continious process to process the job queue ?

Stefahn (talkcontribs)

Thanks for your reply. It's been one week and the deleted link still shows up on Special:LinkSearch. The job queue is empty...

I think I will set up a cronjob with runJobs.php anyway. Is it enough to run it once a day?

TheDJ (talkcontribs)

Every hour is reasonable generally. You might also want to follow the debug log and see if you might be hitting any errors anywhere.

Stefahn (talkcontribs)

I have a daily cronjob with runJobs.php, but that doesn't fix the problem. I enabled debugging.

I paste a part of my debug.log here showing the relevant request. Maybe somebody sees an error?

I searched the whole file for "error" but only found something like "SMW\SQLStore\Lookup\ErrorLookup::fetchFromTable (for SMW\Indicator\EntityExaminerIndicators\ConstraintErrorEntityExaminerIndicatorProvider::findErrors)..."

Start request GET /mediawiki/index.php?target=http%3A%2F%2Fwww.integralesleben.org%2Fde%2Fil-home%2Fil-integrales-leben%2Fgrundlagen-des-integralen%2Flinien-der-entwicklung%2Fspiral-dynamics%2F&namespace=&title=Spezial%3AWeblinksuche
IP: ...
HTTP HEADERS:
HOST: secret-wiki.de
...
[DBReplication] Wikimedia\Rdbms\ChronologyProtector::getStartupMasterPositions: client ID is 9ed5874d1324e84585f21fd2e9d54985 (read)
[DBReplication] Wikimedia\Rdbms\ChronologyProtector::getStartupMasterPositions: key is global:Wikimedia\Rdbms\ChronologyProtector:9ed5874d1324e84585f21fd2e9d54985:v2 (read)
[DBConnection] Wikimedia\Rdbms\LoadBalancer::lazyLoadReplicationPositions: executed chronology callback.
[DBConnection] Wikimedia\Rdbms\LoadBalancer::getLocalConnection: opened new connection for 0
[DBQuery] Wikimedia\Rdbms\DatabaseMysqlBase::serverIsReadOnly [0.001s] someserver.com: SELECT @@GLOBAL.read_only AS Value
[DBQuery] Wikimedia\Rdbms\Database::beginIfImplied (LCStoreDB::get) [0s] someserver.com: BEGIN
[DBQuery] LCStoreDB::get [0.007s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'deps'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.017s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'list'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.005s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'preload'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.001s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'preload'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.001s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'fallbackSequence'  LIMIT 1  
[session] SessionManager using store SqlBagOStuff
[DBQuery] Wikimedia\Rdbms\DatabaseMysqlBase::open [0.005s] someserver.com: SET group_concat_max_len = 262144, sql_mode = ''
[DBConnection] Wikimedia\Rdbms\LoadBalancer::getLocalConnection: opened new connection for 0
[DBQuery] SqlBagOStuff::fetchBlobMulti [0.001s] someserver.com: SELECT  keyname,value,exptime  FROM `objectcache`    WHERE keyname = 'usr_p408127_5:MWSession:f449lgrt544njp76kf780vk586mf6ddl'  
[DBQuery] LCStoreDB::get [0.004s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'namespaceAliases'  LIMIT 1  
[DBQuery] LCStoreDB::get [0s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'namespaceGenderAliases'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.001s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'specialPageAliases'  LIMIT 1  
[UserOptionsManager] Loading options from database
[DBQuery] MediaWiki\User\UserOptionsManager::loadUserOptions [0.001s] someserver.com: SELECT  up_property,up_value  FROM `user_properties`    WHERE up_user = 1  
[MessageCache] MessageCache using store APCUBagOStuff
[MessageCache] MessageCache::load: Loading de... local cache is empty, got from global cache
[DBQuery] LCStoreDB::get [0.007s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'messages:linksearch'  LIMIT 1  
ParserFactory: using default preprocessor
[DBQuery] LCStoreDB::get [0.001s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'magicWords'  LIMIT 1  
Unstubbing $wgLang on call of $wgLang::unstub from ParserOptions->__construct
[DBQuery] LCStoreDB::get [0.005s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'messages:linksearch-summary'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.003s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'messages:linksearch-text'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.008s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'digitTransformTable'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.002s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'separatorTransformTable'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.001s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'compiledPluralRules'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.008s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'linkPrefixExtension'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.002s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'messages:linksearch-pat'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.005s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'messages:linksearch-ns'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.002s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'rtl'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.001s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'messages:linksearch-ok'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.008s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'messages:namespacesall'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.002s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'messages:blanknamespace'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.005s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'messages:linksearch-helppage'  LIMIT 1  
[MessageCache] MessageCache::load: Loading en... local cache is empty, got from global cache
[DBQuery] LCStoreDB::get [0.003s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'en' AND lc_key = 'deps'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.026s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'en' AND lc_key = 'list'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.002s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'en' AND lc_key = 'preload'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.006s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'en' AND lc_key = 'preload'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.002s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'en' AND lc_key = 'messages:linksearch-helppage'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.001s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'messages:helppage-top-gethelp'  LIMIT 1  
[DBQuery] SpecialLinkSearch::reallyDoQuery [0.011s] someserver.com: SELECT  page_namespace AS `namespace`,page_title AS `title`,el_index AS `value`,el_to AS `url`  FROM `page`,`externallinks`    WHERE (page_id = el_from) AND el_index_60 = 'http://org.integralesleben.www./de/il-home/il-integrales-leb' AND (el_index LIKE 'http://org.integralesleben.www./de/il-home/il-integrales-leben/grundlagen-des-integralen/linien-der-entwicklung/spiral-dynamics/%' ESCAPE '`' )  ORDER BY el_index_60,el_id LIMIT 51  
[DBQuery] LinkBatch::doQuery [0.011s] someserver.com: SELECT  page_id,page_len,page_is_redirect,page_latest,page_restrictions,page_content_model,page_namespace,page_title  FROM `page`    WHERE (page_namespace = 0 AND page_title = 'Spiral_Dynamics')  
[DBQuery] LCStoreDB::get [0.001s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'messages:showingresultsinrange'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.009s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'digitGroupingPattern'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.001s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'minimumGroupingDigits'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.001s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'messages:prevn'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.007s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'messages:nextn'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.002s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'messages:shown-title'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.004s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'messages:pipe-separator'  LIMIT 1  
[DBQuery] LCStoreDB::get [0.005s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'messages:viewprevnext'  LIMIT 1  
[DBQuery] LCStoreDB::get [0s] someserver.com: SELECT  lc_value  FROM `l10n_cache`    WHERE lc_lang = 'de' AND lc_key = 'messages:linksearch-line'  LIMIT 1  
[DBQuery] MediaWiki::preOutputCommit [0s] someserver.com: COMMIT
MediaWiki::preOutputCommit: primary transaction round committed
MediaWiki::preOutputCommit: pre-send deferred updates completed
MediaWiki::preOutputCommit: session changes committed
[DBReplication] Wikimedia\Rdbms\ChronologyProtector::shutdown: no master positions to save
MediaWiki::preOutputCommit: LBFactory shutdown completed
OutputPage::haveCacheVaryCookies: found Secret_WikiToken
...
TheDJ (talkcontribs)

"Now, if we remove a link" well HOW do you remove a link ? As apparently these are not normal links, you are stating: "External links are added in a special namespace". So what are you removing? The link, the storage of the link or the usage of that link in other pages. Have you implemented parser cache invalidation for when you make changes to your "special namespace", so that other pages know that they need to update themselves the next time the page that was previously using the link uses the link ?

If you implement your own wizardry, please provide a LOT of information when asking for assistance. This is like trying to workout why the car doesn't drive, someone says they invented their own wheel and then having to wonder if its now square or made out of straw...

Stefahn (talkcontribs)

Thanks for your feedback. I try to explain my setup: I store my external links in a separate namespace. The link is tagged with articles. With help of SemanticMediaWiki the link is then included into the tagged articles. Thus if I want to edit the link, I don't need to edit all the articles it is included, but only the link itself.

Now if I delete a link (because it is broken) the link is immediately removed from the articles too. So page invalidation seems to work fine.

But the link still appears on Special:LinkSearch. It seems that after some time it disappears from there as well - but we haven't found out when and how this happens.

Hope it got clearer now...?

Reply to "Deleted external links are still shown on Special:LinkSearch"