Page MenuHomePhabricator

BadMethodCallException on history of a Flow page
Closed, ResolvedPublic

Description

Exception encountered, of type "BadMethodCallException"

https://pt.wikipedia.org/w/index.php?title=Wikip%C3%A9dia:Contato/Fale_com_a_Wikip%C3%A9dia&action=history

See T111624: Certain gadgets not compatible with Flow.

2015-09-10 04:25:35 mw1237 ptwiki exception ERROR: [289b9fde] /w/index.php?title=Wikip%C3%A9dia:Contato/Fale_com_a_Wikip%C3%A9dia&action=history   Flow\Exception\DataModelException from line 133 of /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Model/PostRevision.php: tree revision doesn't match provided revision: treeRevId (NULL) != obj->revId (sojbn1tgpe0si7su) {"exception":"[Exception Flow\\Exception\\DataModelException] (/srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Model/PostRevision.php:133) tree revision doesn't match provided revision: treeRevId (NULL) != obj->revId (sojbn1tgpe0si7su)
[stacktrace]
#0 [internal function]: Flow\\Model\\PostRevision::fromStorageRow(array, Flow\\Model\\PostRevision)
#1 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Data/Mapper/CachingObjectMapper.php(89): call_user_func(array, array, NULL)
#2 /srv/mediawiki/php-1.26wmf21/extensions/Flow/container.php(306): Flow\\Data\\Mapper\\CachingObjectMapper->fromStorageRow(array, NULL)
#3 [internal function]: Closure$#34(array, NULL)
#4 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Data/Mapper/BasicObjectMapper.php(38): call_user_func(Closure$#34;1910555682, array, NULL)
#5 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Data/ObjectLocator.php(298): Flow\\Data\\Mapper\\BasicObjectMapper->fromStorageRow(array)
#6 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Data/ObjectLocator.php(105): Flow\\Data\\ObjectLocator->load(array)
#7 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Data/ObjectLocator.php(55): Flow\\Data\\ObjectLocator->findMulti(array, array)
#8 [internal function]: Flow\\Data\\ObjectLocator->find(array, array)
#9 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Data/ManagerGroup.php(129): call_user_func_array(array, array)
#10 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Data/ManagerGroup.php(141): Flow\\Data\\ManagerGroup->call(string, array)
#11 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Formatter/BoardHistoryQuery.php(31): Flow\\Data\\ManagerGroup->find(string, array, array)
#12 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Data/Pager/HistoryPager.php(65): Flow\\Formatter\\BoardHistoryQuery->getResults(Flow\\Model\\UUID, integer, NULL, string)
#13 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Block/BoardHistory.php(80): Flow\\Data\\Pager\\HistoryPager->doQuery()
#14 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/View.php(177): Flow\\Block\\BoardHistoryBlock->renderApi(array)
#15 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/View.php(69): Flow\\View->buildApiResponse(Flow\\WorkflowLoader, array, string, array)
#16 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Actions/Action.php(100): Flow\\View->show(Flow\\WorkflowLoader, string)
#17 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Actions/Action.php(46): Flow\\Actions\\FlowAction->showForAction(string)
#18 /srv/mediawiki/php-1.26wmf21/includes/MediaWiki.php(458): Flow\\Actions\\FlowAction->show()
#19 /srv/mediawiki/php-1.26wmf21/includes/MediaWiki.php(255): MediaWiki->performAction(Article, Title)
#20 /srv/mediawiki/php-1.26wmf21/includes/MediaWiki.php(682): MediaWiki->performRequest()
#21 /srv/mediawiki/php-1.26wmf21/includes/MediaWiki.php(476): MediaWiki->main()
#22 /srv/mediawiki/php-1.26wmf21/index.php(41): MediaWiki->run()
#23 /srv/mediawiki/w/index.php(3): include(string)
#24 {main}
"} %exception%

I'm also now getting:

2015-09-10 22:22:41 mw1245 ptwiki exception ERROR: [6ca496aa] /w/index.php?title=Wikip%C3%A9dia:Contato/Fale_com_a_Wikip%C3%A9dia&action=history&limit=1   Flow\Exception\DataModelException from line 133 of /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/Model/PostRevision.php: tree revision doesn't match provided revision: treeRevId (NULL) != obj->revId (soohuf3w4xhpeoli) {"exception_id":"6ca496aa"} 
[Exception Flow\Exception\DataModelException] (/srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/Model/PostRevision.php:133) tree revision doesn't match provided revision: treeRevId (NULL) != obj->revId (soohuf3w4xhpeoli)
  #0 [internal function]: Flow\Model\PostRevision::fromStorageRow(array, Flow\Model\PostRevision)
  #1 /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/Data/Mapper/CachingObjectMapper.php(89): call_user_func(array, array, NULL)
  #2 /srv/mediawiki/php-1.26wmf22/extensions/Flow/container.php(306): Flow\Data\Mapper\CachingObjectMapper->fromStorageRow(array, NULL)
  #3 [internal function]: Closure$#34(array, NULL)
  #4 /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/Data/Mapper/BasicObjectMapper.php(38): call_user_func(Closure$#34;1910555682, array, NULL)
  #5 /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/Data/ObjectLocator.php(298): Flow\Data\Mapper\BasicObjectMapper->fromStorageRow(array)
  #6 /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/Data/ObjectLocator.php(105): Flow\Data\ObjectLocator->load(array)
  #7 /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/Data/ObjectLocator.php(55): Flow\Data\ObjectLocator->findMulti(array, array)
  #8 [internal function]: Flow\Data\ObjectLocator->find(array, array)
  #9 /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/Data/ManagerGroup.php(129): call_user_func_array(array, array)
  #10 /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/Data/ManagerGroup.php(141): Flow\Data\ManagerGroup->call(string, array)
  #11 /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/Formatter/BoardHistoryQuery.php(31): Flow\Data\ManagerGroup->find(string, array, array)
  #12 /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/Data/Pager/HistoryPager.php(65): Flow\Formatter\BoardHistoryQuery->getResults(Flow\Model\UUID, integer, NULL, string)
  #13 /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/Block/BoardHistory.php(80): Flow\Data\Pager\HistoryPager->doQuery()
  #14 /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/View.php(177): Flow\Block\BoardHistoryBlock->renderApi(array)
  #15 /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/View.php(69): Flow\View->buildApiResponse(Flow\WorkflowLoader, array, string, array)
  #16 /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/Actions/Action.php(100): Flow\View->show(Flow\WorkflowLoader, string)
  #17 /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/Actions/Action.php(46): Flow\Actions\FlowAction->showForAction(string)
  #18 /srv/mediawiki/php-1.26wmf22/includes/MediaWiki.php(458): Flow\Actions\FlowAction->show()
  #19 /srv/mediawiki/php-1.26wmf22/includes/MediaWiki.php(255): MediaWiki->performAction(Article, Title)
  #20 /srv/mediawiki/php-1.26wmf22/includes/MediaWiki.php(682): MediaWiki->performRequest()
  #21 /srv/mediawiki/php-1.26wmf22/includes/MediaWiki.php(476): MediaWiki->main()
  #22 /srv/mediawiki/php-1.26wmf22/index.php(41): MediaWiki->run()
  #23 /srv/mediawiki/w/index.php(3): include(string)
  #24 {main}

which is a different UUID.

Related Objects

Event Timeline

He7d3r raised the priority of this task from to Needs Triage.
He7d3r updated the task description. (Show Details)
He7d3r added a project: StructuredDiscussions.
He7d3r subscribed.
Restricted Application added a subscriber: Aklapper. · View Herald Transcript
2015-09-04 16:02:05 mw1067 ptwiki exception ERROR: [3ab4f933] /w/index.php?title=Wikip%C3%A9dia:Contato/Fale_com_a_Wikip%C3%A9dia&action=history   BadMethodCallException from line 126 of /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Model/PostRevision.php: Call to a member function getAlphadecimal() on a non-object (NULL)[Exception BadMethodCallException] (/srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Model/PostRevision.php:126) Call to a member function getAlphadecimal() on a non-object (NULL)
[stacktrace]
#0 [internal function]: Flow\Model\PostRevision::fromStorageRow(array, Flow\Model\PostRevision)
#1 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Data/Mapper/CachingObjectMapper.php(89): call_user_func(array, array, NULL)
#2 /srv/mediawiki/php-1.26wmf21/extensions/Flow/container.php(306): Flow\Data\Mapper\CachingObjectMapper->fromStorageRow(array, NULL)
#3 [internal function]: Closure$#34(array, NULL)
#4 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Data/Mapper/BasicObjectMapper.php(38): call_user_func(Closure$#34;1910555682, array, NULL)
#5 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Data/ObjectLocator.php(298): Flow\Data\Mapper\BasicObjectMapper->fromStorageRow(array)
#6 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Data/ObjectLocator.php(105): Flow\Data\ObjectLocator->load(array)
#7 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Data/ObjectLocator.php(55): Flow\Data\ObjectLocator->findMulti(array, array)
#8 [internal function]: Flow\Data\ObjectLocator->find(array, array)
#9 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Data/ManagerGroup.php(129): call_user_func_array(array, array)
#10 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Data/ManagerGroup.php(141): Flow\Data\ManagerGroup->call(string, array)
#11 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Formatter/BoardHistoryQuery.php(31): Flow\Data\ManagerGroup->find(string, array, array)
#12 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Data/Pager/HistoryPager.php(65): Flow\Formatter\BoardHistoryQuery->getResults(Flow\Model\UUID, integer, NULL, string)
#13 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Block/BoardHistory.php(80): Flow\Data\Pager\HistoryPager->doQuery()
#14 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/View.php(177): Flow\Block\BoardHistoryBlock->renderApi(array)
#15 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/View.php(69): Flow\View->buildApiResponse(Flow\WorkflowLoader, array, string, array)
#16 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Actions/Action.php(100): Flow\View->show(Flow\WorkflowLoader, string)
#17 /srv/mediawiki/php-1.26wmf21/extensions/Flow/includes/Actions/Action.php(46): Flow\Actions\FlowAction->showForAction(string)
#18 /srv/mediawiki/php-1.26wmf21/includes/MediaWiki.php(458): Flow\Actions\FlowAction->show()
#19 /srv/mediawiki/php-1.26wmf21/includes/MediaWiki.php(255): MediaWiki->performAction(Article, Title)
#20 /srv/mediawiki/php-1.26wmf21/includes/MediaWiki.php(682): MediaWiki->performRequest()
#21 /srv/mediawiki/php-1.26wmf21/includes/MediaWiki.php(476): MediaWiki->main()
#22 /srv/mediawiki/php-1.26wmf21/index.php(41): MediaWiki->run()
#23 /srv/mediawiki/w/index.php(3): include(string)
#24 {main}

WFM while logged into my sysop account, fails if I'm an anonymous user.

Legoktm triaged this task as High priority.Sep 4 2015, 4:04 PM
Legoktm set Security to None.

I have this bug for 2 or 3 days.

In Firebug, below the content div, I see <div class="flow-ui-load-overlay"></div> with the attribute width:100%; If I modify to width:50%; I can clic and use the right part of the content. This class come from WM server. This could help to locate the bug, but why in my case and not in others?

Firefox 40.0.3 is alone to weird in my pet Ubuntu 14.04 LTS updated each day.

in Win8 Chrome, Opera and FF are OK; in MacOSX : FF, Safari and Chromium are OK; in Ubuntu Opera is OK.

Sorry to disturb this bug.
My bug is another which happens when I open https://www.mediawiki.org/wiki/Project:Current_issues
I came here because this talk: https://www.mediawiki.org/wiki/Project_talk:Current_issues#page_displays_under_a_light_vail
Do you want I create another one? Or do you create it yourself?

I have this bug for 2 or 3 days.

In Firebug, below the content div, I see <div class="flow-ui-load-overlay"></div> with the attribute width:100%; If I modify to width:50%; I can clic and use the right part of the content. This class come from WM server. This could help to locate the bug, but why in my case and not in others?

This bug is about an error where the page wrongly shows 'Exception encountered, of type "BadMethodCallException" '. You issue sounds quite different. The underlying cause may be related, but for now filed separately as T111624: Certain gadgets not compatible with Flow.

Change 237012 had a related patch set uploaded (by Mattflaschen):
Avoid null pointer exception and instead show relevant debugging info

https://gerrit.wikimedia.org/r/237012

It's saying there's an inconsistency between two sources of the revision ID. But I don't know either of them, because tree rev ID is null (I know it's that one since otherwise it would throw earlier, on line 123).

Change 237012 merged by jenkins-bot:
Avoid null pointer exception and instead show relevant debugging info

https://gerrit.wikimedia.org/r/237012

Change 237165 had a related patch set uploaded (by Mattflaschen):
Avoid null pointer exception and instead show relevant debugging info

https://gerrit.wikimedia.org/r/237165

Change 237166 had a related patch set uploaded (by Mattflaschen):
Avoid null pointer exception and instead show relevant debugging info

https://gerrit.wikimedia.org/r/237166

Change 237165 merged by jenkins-bot:
Avoid null pointer exception and instead show relevant debugging info

https://gerrit.wikimedia.org/r/237165

Change 237166 merged by jenkins-bot:
Avoid null pointer exception and instead show relevant debugging info

https://gerrit.wikimedia.org/r/237166

Cause seems to be that somehow a row got into BoardHistoryIndex without the tree_ fields.

I think this may be caused by the new normalizeCompressed in combination with BoardHistoryStorage having multiple backends, and thus possibly different content

// Using DB backend
> $boardUUID = Flow\Model\UUID::create( 'segnjausu2xemu7d' );

> $boardHistoryBackendStorage = Flow\Container::get( 'storage.board_history.backend' );

> $res = $boardHistoryBackendStorage->findMulti( array(array( 'topic_list_id' => $boardUUID )), array( 'LIMIT' => 1, 'ORDER BY' => 'rev_id DESC'));

> $row = $res[0]['soohuf3w4xhpeoli'];

> var_export( $row )
array (
  'topic_list_id' => 'segnjausu2xemu7d',
  'topic_id' => 'sny7lsissiv1xbuk',
  'tree_ancestor_id' => 'sny7lsissiv1xbuk',
  'tree_descendant_id' => 'soohuf3w4xhpeoli',
  'tree_depth' => '1',
  'tree_rev_descendant_id' => 'soohuf3w4xhpeoli',
  'tree_rev_id' => 'soohuf3w4xhpeoli',
  'tree_orig_user_id' => [redacted],
  'tree_parent_id' => 'sny7lsissiv1xbuk',
  'tree_orig_user_ip' => NULL,
  'tree_orig_user_wiki' => 'ptwiki',
  'rev_id' => 'soohuf3w4xhpeoli',
  'rev_type' => 'post',
  'rev_user_id' => [redacted],
  'rev_parent_id' => NULL,
  'rev_flags' => 'utf-8,gzip,html,external',
  'rev_content' => [redacted],
  'rev_change_type' => 'reply',
  'rev_mod_state' => '',
  'rev_mod_user_id' => NULL,
  'rev_mod_timestamp' => NULL,
  'rev_mod_reason' => NULL,
  'rev_last_edit_id' => NULL,
  'rev_edit_user_id' => NULL,
  'rev_user_ip' => NULL,
  'rev_mod_user_ip' => NULL,
  'rev_edit_user_ip' => NULL,
  'rev_user_wiki' => 'ptwiki',
  'rev_mod_user_wiki' => NULL,
  'rev_edit_user_wiki' => NULL,
  'rev_type_id' => 'soohuf3w4xhpeoli',
  'rev_content_length' => '128',
  'rev_previous_content_length' => '0',
  'rev_content_url' => 'DB://cluster25/6003460',
)
> 

> $boardHistoryLocator = Flow\Container::get( 'storage.board_history' );

> $loadReflectionMethod = new ReflectionMethod( 'Flow\Data\ObjectLocator::load' );

> $loadReflectionMethod->setAccessible( true );

> $post = $loadReflectionMethod->invoke( $boardHistoryLocator, $row );

> var_export( $post->getRevisionId()->getTimestamp() );
'20150910211842'
> ^D
mattflaschen@terbium:~$ mwscript eval.php --wiki=ptwiki
// Using index
> $boardUUID = Flow\Model\UUID::create( 'segnjausu2xemu7d' );

> $boardHistoryLocator = Flow\Container::get( 'storage.board_history' );

> $queries = array(array( 'topic_list_id' => $boardUUID ));

> $options = array( 'limit' => 1, 'sort' => 'rev_id', 'order' => 'DESC' );

> $keys = array_keys( reset( $queries ) );

> $options['sort'] = array( $options['sort'] );

> $index = $boardHistoryLocator->getIndexFor( $keys, $options );

> $res = $index->findMulti( $queries, $options );

> $row = $res[0][0]; 

> var_export( $row );
array (
  'rev_id' => 'soohuf3w4xhpeoli',
  'rev_user_id' => [redacted],
  'rev_user_ip' => NULL,
  'rev_user_wiki' => 'ptwiki',
  'rev_parent_id' => NULL,
  'rev_change_type' => 'reply',
  'rev_type' => 'post',
  'rev_type_id' => 'soohuf3w4xhpeoli',
  'rev_content' => [redacted],
  'rev_content_url' => NULL,
  'rev_flags' => 'utf-8,gzip,html',
  'rev_mod_state' => '',
  'rev_mod_user_id' => NULL,
  'rev_mod_user_ip' => NULL,
  'rev_mod_user_wiki' => NULL,
  'rev_mod_timestamp' => NULL,
  'rev_mod_reason' => NULL,
  'rev_last_edit_id' => NULL,
  'rev_edit_user_id' => NULL,
  'rev_edit_user_ip' => NULL,
  'rev_edit_user_wiki' => NULL,
  'rev_content_length' => 128,
  'rev_previous_content_length' => 0,
  'topic_list_id' => 'segnjausu2xemu7d',
)
> 

> $loadReflectionMethod = new ReflectionMethod( 'Flow\Data\ObjectLocator::load' );

> $loadReflectionMethod->setAccessible( true );

> $post = $loadReflectionMethod->invoke( $boardHistoryLocator, $row );
Caught exception Flow\Exception\DataModelException: tree revision doesn't match provided revision: treeRevId (NULL) != obj->revId (soohuf3w4xhpeoli)
#0 [internal function]: Flow\Model\PostRevision::fromStorageRow(Array, NULL)
#1 /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/Data/Mapper/CachingObjectMapper.php(89): call_user_func(Array, Array, NULL)
#2 /srv/mediawiki/php-1.26wmf22/extensions/Flow/container.php(306): Flow\Data\Mapper\CachingObjectMapper->fromStorageRow(Array, NULL)
#3 [internal function]: {closure}(Array, NULL)
#4 /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/Data/Mapper/BasicObjectMapper.php(38): call_user_func(Object(Closure), Array, NULL)
#5 /srv/mediawiki/php-1.26wmf22/extensions/Flow/includes/Data/ObjectLocator.php(298): Flow\Data\Mapper\BasicObjectMapper->fromStorageRow(Array)
#6 [internal function]: Flow\Data\ObjectLocator->load(Array)
#7 /srv/mediawiki/php-1.26wmf22/maintenance/eval.php(78) : eval()'d code(1): ReflectionMethod->invoke(Object(Flow\Data\ObjectLocator), Array)
#8 /srv/mediawiki/php-1.26wmf22/maintenance/eval.php(78): eval()
#9 /srv/mediawiki/multiversion/MWScript.php(97): require_once('/srv/mediawiki/...')
#10 {main}

For example, this header entry from the DB confirms they are not supposed to have tree_, whereas posts are (and do in the DB fallback, as shown above):

To solve this while keeping the normalize behavior (which will hopefully help next time we have a DB change), I'm going to try to get rid of BoardHistoryIndex and BoardHistoryStorage, and replace them with specific storage for each type (header, topic list, topic summary). Then, the simple merge that BoardHistoryStorage does will have to be done in BoardHistoryQuery.

This allows each TopKIndex to have internally consistent values.

mattflaschen@terbium:~$ mwscript eval.php --wiki=ptwiki
> $boardUUID = Flow\Model\UUID::create( 'segnjausu2xemu7d' );

> $boardHistoryBackendStorage = Flow\Container::get( 'storage.board_history.backend' );

> $res = $boardHistoryBackendStorage->findMulti( array(array( 'topic_list_id' => $boardUUID )), array( 'LIMIT' => 50, 'ORDER BY' => 'rev_id DESC'));

> $row = $res[0]['so8u8dpoh21ua9i7'];

> var_export( $row );
array (
  'rev_id' => 'so8u8dpoh21ua9i7',
  'rev_type' => 'header',
  'rev_user_id' => '0',
  'rev_parent_id' => 'snx2k9xrspf9u9kw',
  'rev_flags' => 'utf-8,gzip,html,external',
  'rev_content' => [redacted]
  'rev_change_type' => 'edit-header',
  'rev_mod_state' => '',
  'rev_mod_user_id' => NULL,
  'rev_mod_timestamp' => NULL,
  'rev_mod_reason' => NULL,
  'rev_last_edit_id' => 'so8u8dpoh21ua9i7',
  'rev_edit_user_id' => '0',
  'rev_user_ip' => [redacted],
  'rev_mod_user_ip' => NULL,
  'rev_edit_user_ip' => [redacted],
  'rev_user_wiki' => 'ptwiki',
  'rev_mod_user_wiki' => NULL,
  'rev_edit_user_wiki' => 'ptwiki',
  'rev_type_id' => 'segnjausu2xemu7d',
  'rev_content_length' => '42',
  'rev_previous_content_length' => '0',
  'rev_content_url' => 'DB://cluster25/5970411',
)

I might instead subclass BoardHistoryIndex (e.g. to reject index usage for offset-id), not sure yet.

Change 237872 had a related patch set uploaded (by Mattflaschen):
WIP: Fix exception on history page

https://gerrit.wikimedia.org/r/237872

The vail that I see is on pages containing lists of posts and the last is in the first place like a header. Several times, when I asked the page, the last post was already deleted, like a missing header. This seems similar to the case in change 237872.

That patch doesn't (yet) address topic history.

Change 237872 merged by jenkins-bot:
Fix exception on board and topic history pages

https://gerrit.wikimedia.org/r/237872

Checked in betalabs for board and topic history pages

Tested

    • making different edits(title, summary, posts)( and checking history
  • re-checking T113103 and T113261

Change 243337 had a related patch set uploaded (by Mattflaschen):
Fix exception on board and topic history pages

https://gerrit.wikimedia.org/r/243337

Change 243337 merged by jenkins-bot:
Fix exception on board and topic history pages

https://gerrit.wikimedia.org/r/243337

Catrope subscribed.