1. 17 Jan, 2002 2 commits
    • Jeremy Hylton's avatar
      Merge Standby-branch to trunk (mostly). · dfdcb79b
      Jeremy Hylton authored
      The Standby-branch was branched from the StandaloneZODB-1_0-branch,
      which includes the BTrees-fsIndex code.  I didn't include that change
      in the merge, but everything else.  Terse summary follows:
      
      BTreeModuleTemplate.c:
          Greg Ward's ConflictError patch
      dfdcb79b
    • Jeremy Hylton's avatar
      Merge Standby-branch to trunk (mostly). · c2eed46c
      Jeremy Hylton authored
      The Standby-branch was branched from the StandaloneZODB-1_0-branch,
      which includes the BTrees-fsIndex code.  I didn't include that change
      in the merge, but everything else.  Terse summary follows:
      
      BaseStorage.py:
          Add read-only storage feature.
          Add TransactionRecord and DataRecord marker classes for iteration.
          Reformat some lines.
      
      FileStorage.py:
          Add read-only storage feature.
          Greg Ward's ConflictError patch
          Reformat some lines.
          Add lastTransaction(), lastSerialno().
          Add bounds support to iterator().
          Use TransactionRecord and DataRecord.
      
      Connection.py:
      DemoStorage.py:
      MappingStorage.py:
          Greg Ward's ConflictError patch
      
      POSException.py:
          Greg Ward's ConflictError patch
          Add ReadOnlyError.
      c2eed46c
  2. 11 Jan, 2002 2 commits
  3. 09 Jan, 2002 2 commits
  4. 07 Jan, 2002 1 commit
  5. 21 Dec, 2001 2 commits
  6. 20 Dec, 2001 2 commits
  7. 05 Dec, 2001 1 commit
  8. 04 Dec, 2001 2 commits
  9. 30 Nov, 2001 2 commits
    • Jeremy Hylton's avatar
    • Jeremy Hylton's avatar
      Ensure that new code produces pickles acceptable to old code. · 8e9260c5
      Jeremy Hylton authored
      Add __getstate__() and __setstate__() methods.
      
      Thanks to Chris McDonough for helping me see the problem.
      
      There are extensive comments that discuss the backwards compatibility
      issues.  Basically, we must be careful that the pickles these methods
      operate on are just like the pickles generated by the old code, or
      developers couldn't switch back and forth between new and old code.
      That's a incompatibility we aren't willing to live with for now --
      perhaps not ever.
      
          # If the internal representation of PersistentMapping changes,
          # it causes compatibility problems for pickles generated by
          # different versions of the code.  Compatibility works in both
          # directions, because an application may want to share a database
          # between applications using different versions of the code.
      
          # Effectively, the original rep is part of the "API."  To provide
          # full compatibility, the getstate and setstate must read and
          # right objects using the old rep.
      
          # As a result, the PersistentMapping must save and restore the
          # actual internal dictionary using the name _container.
      8e9260c5
  10. 28 Nov, 2001 4 commits
  11. 27 Nov, 2001 2 commits
    • Jeremy Hylton's avatar
      Make consistent use of assignment to _p_changed instead of __changed__(). · 4ab87b52
      Jeremy Hylton authored
      The doc string for __changed__() says that it is deprecated, but
      presumably the calls here were old and just never got updated.
      4ab87b52
    • Jeremy Hylton's avatar
      Simplify and cleanup implementation of PersistentMapping. · abc8eb11
      Jeremy Hylton authored
      The implementation now defers all implementation decisions to UserDict
      and merely handles updates to _p_changed in the PersistentMapping
      implementation.  This change simplifies the implementation and ensures
      that it implements all the new methods of dictionaries like popitem()
      and setdefault().
      
      There is one (important?) behavioral change:  The old implementation
      of the keys() method did not return keys that were strings starting
      with underscore.  This behavior was undocumented and could lead to
      problems for implementations that expect keys() to working like a
      regular mapping.
      
          The feature was removed after verifying that the Zope test suite
          does not depend on this behavior.
      
      An internal implementation change is that the PersistentMapping does
      not keep a copy of the keys() of the dict.  It simplifies the
      implementation a lot to remove the cacheing and the benefit is
      unclear.  It only benefits applications that call keys() frequently
      without modifying the dict.  And it requires that two copies of the
      list exist for each call to keys() which may require a lot of space.
      abc8eb11
  12. 26 Nov, 2001 1 commit
  13. 16 Nov, 2001 1 commit
  14. 08 Nov, 2001 6 commits
    • Barry Warsaw's avatar
      initcoptimizations(): Some cleanup of the initializer. First be sure · 0fb1d30e
      Barry Warsaw authored
      to decref the revision string, added to the module dict with the keys
      "__version__".  This fixes a small leaks detected by Insure.
      
      Also, at the end of the function, we do a PyErr_Occurred() check and
      throw a fatal error if true.  This makes this module's init function
      more in line with other init functions in this package.
      0fb1d30e
    • Barry Warsaw's avatar
      initcPickleCache(): Some cleanup of the initializer. First be sure to · 1fc6caac
      Barry Warsaw authored
      decref the revision string, added to the module dict with the keys
      "__version__".  This fixes a small leaks detected by Insure.
      
      Also, at the end of the function, we do a PyErr_Occurred() check and
      throw a fatal error if true.  This makes this module's init function
      more in line with other init functions in this package.
      1fc6caac
    • Barry Warsaw's avatar
      initcPersistence(): Some cleanup of the initializer. First be sure to · 0efdedfe
      Barry Warsaw authored
      decref the revision string, added to the module dict with the keys
      "__version__".  Do the same with the PyCObject set to the dict's
      "CAPI" key.  This fixes small leaks detected by Insure.
      
      Also, clean up the way the global TimeStamp static is handled on
      creation failure.  We need to decref `s' whether or not TimeStamp was
      properly created or not.  Also, at the end of the function, we do a
      PyErr_Occurred() check and throw a fatal error if true.  This makes
      this module's init function more in line with other init functions in
      this package.
      0efdedfe
    • Barry Warsaw's avatar
      initTimeStamp(): Some cleanup of the initializer. First be sure to · 8640cc84
      Barry Warsaw authored
      decref the revision string, added to the module dict with the keys
      "__version__".  This fixes a small leaks detected by Insure.
      
      Also, instead of returning from the init should the
      PyString_FromString() of "TimeStamp.error fail, we simply take
      precautions by XDECREF'ing it.  Then at the end of the function, we do
      a PyErr_Occurred() check and throw a fatal error if true.  This makes
      this module's init function more in line with other init functions in
      this package.
      8640cc84
    • Jeremy Hylton's avatar
    • Barry Warsaw's avatar
      INITMODULE(): Be sure to decref the $Revision$ string added to the · 50754cda
      Barry Warsaw authored
      module dictionary under the "__version__" key.  Plugs a small memory
      leak caught by Insure.
      50754cda
  15. 07 Nov, 2001 2 commits
    • Jeremy Hylton's avatar
      Really stop the leak of file descriptors! · 4858c98e
      Jeremy Hylton authored
      The previous checkin stopped using the per-connection trigger, but
      didn't stop creating it.  (Dang.)
      
      Thanks to Shane for noticing.
      4858c98e
    • Jim Fulton's avatar
      Totally rewrote recovery script to use an entirely different approach · 2d0d8c08
      Jim Fulton authored
      based on:
      
        - transaction iteration/copy
      
        - scanning for transactions after bad data
      
      This should allow recovery of data when:
      
        - only data records are damaged and when
      
        - multiple parts of a file are damaged
      
      The interface has changed to not modify in place.
      
      Other features:
      
        - Progress indicator
      
        - Verbose output
      
        - optional packing
      
        - index creation
      2d0d8c08
  16. 06 Nov, 2001 3 commits
  17. 02 Nov, 2001 4 commits
  18. 31 Oct, 2001 1 commit
    • Jeremy Hylton's avatar
      Fix memory leak in BTrees. · c294cd02
      Jeremy Hylton authored
      The Mapping_update() method iterated over a sequence of 2-tuples, but
      held an extra reference to the sequence.  The sequence object was
      DECREFed on an error exit but not on the normal return.
      
      The fix reworks the control flow of the function to make the reference
      counting behavior a little clearer:
      
         - Test for call with no arguments and return immediately if so.
      
         - If the argument is a sequence, don't INCREF it.
      
         - If the argument passed isn't a sequence, call its items() method
           and store the result in the local variables seq and items.
      
         - On exit, do Py_XDECREF(items).  This will do a decref only if a
           the second case above applied.
      
      Two other minor nits:
      
         - Make consistent use of spaces around = in assignments (as opposed
           to a fix of both)
      
         - Remove assignment from conditional expression.
      c294cd02