• Barry Warsaw's avatar
    Based on suggestions by Toby, we're now throwing checkpointing into a · 3e91643e
    Barry Warsaw authored
    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.
    3e91643e
BerkeleyBase.py 16.3 KB