Opened 6 years ago

Last modified 2 years ago

#708 new defect

Implement database fixing for glass

Reported by: Olly Betts Owned by: Olly Betts
Priority: normal Milestone: 1.4.x
Component: Backend-Glass Version: git master
Severity: normal Keywords:
Cc: Blocked By:
Blocking: Operating System: All

Description (last modified by Olly Betts)

For chert, we have the DBCHECK_FIX mode for database checking (which you can activate from xapian-check by passing F in the flags) which will attempt to fix some problems:

  • Regenerate iamchert if not valid
  • Regenerate .baseA/.baseB files from .DB files

While glass should be less susceptible to small, frequently-replaced files getting truncated or otherwise corrupted (because it no longer has the .baseA or .baseB files) we ought to have the equivalent support for glass - that's probably means regenerating iamglass if not valid.

The complex part of this is fixing up the freelists, which are now stored in unused blocks in the database. That requires writing to the table file, which is potentially unwise if there's been damage, as it could make things worse. The simplest approach would be to set up empty freelists (which would potentially mean lost space that couldn't be reclaimed in normal use). Then you'd have a database which could read and compacted.

If we implement regenerating missing freelists, that could easily be triggered if the freelists don't match the blocks in use.

Change History (2)

comment:1 by Olly Betts, 6 years ago

Summary: Implemnt database fixing for glassImplement database fixing for glass

comment:2 by Olly Betts, 2 years ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.