Comment 6 for bug 334615

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

I'm not entirely sure on the underlying issues, since this was posted a long time ago. I believe the issue is that loggerhead currently caches the whole ancestry when it sees the tip revision, and then doesn't invalidate that cache until the tip actually changes. (Even on restart, it will just reload it from the sqlite cache.)

the history-db work will change the effects a bit, but probably only to make it so that not even detecting a new tip will find the old ghost. (Because the new code doesn't search the whole ancestry whenever the tip changes, it just searches until it finds things it has already seen.)

history-db does explicitly track ghosts (there is a table of known ghosts). When a revision comes in that is a ghost, it could notice, and then rebuild the cache from scratch.

however, *noticing* the ghost filling requires some sort of search that would hit that revision. And we explicitly avoid doing that in stuff like bzrlib's fetch code (because it is slow with big ancestries). I think a nice 'catch-all' would be a 'rebuild-cache' button that people could get to. It might be slow, but it would allow you to manually say "you missed something old, rebuild".