Based on suggestions by Toby, we're now throwing checkpointing into a
thread, instead of doing it every nth ZODB transaction. We can actually provide a base class for both the checkpointing and autopacking threads here. Changes here include: SLEEP_TIME: how often (in seconds) a background thread should wake up to see if there's work to do. True, False: Add these for older Pythons. PackStop: New class that acts as an escape hatch for pack operations. BerkeleyConfig: - change interval from 100 to 0. Now that this controls the checkpointing thread, the current default is to not spawn the thread. I'm probably going to change this once I figure out what a good value is. BerkeleyBase: - __init__(): Start the checkpointing thread if interval > 0 - _setupDB(): Add some additional keyword args so that the QUEUE style tables can use this convenience method too. - close(): Be sure to stop and join the checkpointing thread - _docheckpoint(): Removed - _withtxn(): Catch PackStop escape hatch exceptions. This one aborts the current Berkeley transaction but eats the exception. Also, don't call _docheckpoint() here. - docheckpoint(): New method which the checkpointing threads can call. env_from_string(): use DB_RECOVER_FATAL for autorecovery on open. _WorkThread: New base class for the checkpointing and autopacking threads. _CheckPoint: The common checkpointing thread class.
Showing
Please register or sign in to comment