Comment 5 for bug 304841

Revision history for this message
John A Meinel (jameinel) wrote :

The plot thickens further...

It turns out that the direct graph given above doesn't trigger the bug. The reason is that when we see D, we don't have its direct parent in this index or in the fallback, so we buffer the index record rather than adding it right away.
Which means that when we get to "E" we don't have "D" available so self._index.missing_keys([D]) == D.

However if we extend the graph slightly:
   A
   |\
   B C
   | |
   | D
   | |
   | E
    \|
     F

And then get the keys in E, D, F, C order.

What happens is that when D comes in, we assume that it is okay to add E to the
index, because we don't check if buffered=False. We just assume that we just
added this record, so it is okay to add any buffered children.

To further complicate things, all of C=>F need to be deltas, which means that the size of the compressed fulltext must be > than the size of 4 compressed deltas. So you have to have a fairly large fulltext that can't compress too well.