Page MenuHomePhabricator

Offset paging in "differential.query" can overheat with a nonsensical error message
Closed, ResolvedPublic

Description

See PHI1391. An install reports executing differential.query with offset=3000 and ending up here:

Query (of class \"DifferentialRevisionQuery\") overheated: examined more than 1,000 raw rows without finding 3,100 visible objects.

The numbers in this error message don't make sense, since obviously you aren't going to find 3,100 visible objects if you examine 1,000 rows.

It's not entirely clear if this is a bug with the error message just using the wrong values, or a bug with overheating interacting with offset-based paging incorrectly.

Broadly, offset-based paging can not scale well (see T13133), and the best path forward from here is to use differential.revision.search instead. To that end, the issue seeks a modifiedStart/modifiedEnd. This whole problem might be better resolved by letting you just query the webhook history or something, but modifiedStart/modifiedEnd are broadly reasonable as upstream features since they're so straightforward.

Upshot:

  • Figure out of this is a behavioral bug or an error message bug.
  • Fix whichever bug it is.
  • Add modified constraints to revision search.