1. 08 Nov, 2002 1 commit
    • Barry Warsaw's avatar
      A new algorithm for packing which seems much more straightforward. · 27f80e8e
      Barry Warsaw authored
      Here's how it works:
      
      - On every store(), we write an entry to a objrev table containing the
        tuple of information (newserial, oid, oldserial).  We don't write
        this entry if the store is the first revision of an object on a new
        version.
      
        We do basically the same thing on restore() and transactionalUndo().
      
      - On an abortVersion(), we write two entries to the objrev table, one
        that has (newserial, oid, oldserial) -- which points to the old
        serial in the version, and (newserial, oid, nvserial) -- which
        points to the non-version revision of the version revision.
      
      - On commitVersion(), we do the same as abortVersion() except that we
        don't write the non-version data if we're committing to a different
        version.
      
      - Now, when we pack, all we need to do is cruise from the beginning of
        the objrev table until we find an entry with a newserial > packtime.
        If the oldserial is ZERO, it's an object creation event which we
        don't need to worry about because there's no previous revision.  But
        otherwise, we can delete the oid+oldserial revision because we know
        it's not current.  We do this, updating pickle refcounts and then
        collecting any objects that are left unreferenced.
      
      The cute thing is that autopacking will use the same algorithm.  The
      main difference between autopack and classic pack, is that the latter
      does a mark and sweep garbage collection phase after the normal objrev
      collection phase.  Also, this algorithm means autopack needs only
      three pieces of information:
      
      - How often the thread should run (e.g. once per hour)
      
      - How far in the past it should pack (e.g. pack to 4 hours ago).  We
        don't need a start time for the autopack window, because we'll
        always just start at the beginning of the objrev table.
      
      - How often should autopack also do a classic pack (e.g. do a classic
        pack once per day).
      
      Autopack isn't implemented in this checkin, but I believe it will be
      nearly trivial to add.  That comes next.
      27f80e8e
  2. 05 Nov, 2002 3 commits
  3. 04 Nov, 2002 2 commits
  4. 31 Oct, 2002 2 commits
  5. 30 Oct, 2002 1 commit
  6. 29 Oct, 2002 1 commit
  7. 28 Oct, 2002 1 commit
  8. 26 Oct, 2002 2 commits
  9. 24 Oct, 2002 1 commit
  10. 23 Oct, 2002 1 commit
  11. 22 Oct, 2002 3 commits
    • Chris McDonough's avatar
    • Shane Hathaway's avatar
      Added Zope.App package to setup.py · bebbe837
      Shane Hathaway authored
      bebbe837
    • Shane Hathaway's avatar
      Merged shane-fix-startup-branch to HEAD. Summary: · bd241196
      Shane Hathaway authored
      Delayed Zope startup based on changes from Zope-2_7-development-branch
      (with corrections), with the intent of merging this into the 2_6
      branch and the head.
      
      Until now, "import Zope" always opened the database automatically.
      Unfortunately, that strategy caused the Python import lock to be held
      by the main thread during database initialization, which led to a
      deadlock if other threads required something to be imported before
      completing initialization.  This can be a big problem for ZEO.
      
      The only foreseen risk is that external scripts which "import Zope"
      may depend in some way on the database being opened immediately.  Most
      scripts just use "Zope.app()", which still works well.  If you have a
      script that breaks with these changes, either add a call to the new
      Zope.startup() function or set the ZOPE_COMPATIBLE_STARTUP environment
      variable to a non-empty value.
      bd241196
  12. 19 Oct, 2002 3 commits
  13. 18 Oct, 2002 1 commit
    • Barry Warsaw's avatar
      Extend iterator() to include hint about "backpointers", or in Berkeley · 41ec2d75
      Barry Warsaw authored
      storage speak, lrevid pointers to shared pickle data in earlier
      transactions.
      
      Specifically,
      
      The _Record object now has a data_txn attribute that is either None or
      the id of the transaction that contains the data used by the current
      record.  Example: When transactionalUndo() modifies an object, it
      typical creates a new data record that points at the transaction
      before the undo.  The new record contains the same logical data as the
      record it refers to.  (For consistency purposes, this is a stronger
      claim than that the pickles in two different data records are the
      same.)
      
      _Record.__init__(): Gets data_txn passed in from
      _RecordIterator.__getitem__(), which in turn getes the lrevid from
      Full._loadSerialEx().
      
      _loadSerialEx(): Now returns the backpointer, aka lrevid but only if
      it is not the same as the serial argument.  They will always be the
      same (and we'll always return None) except in the face of
      transactionalUndo, commitVersion, and abortVersion.
      41ec2d75
  14. 17 Oct, 2002 5 commits
  15. 16 Oct, 2002 5 commits
  16. 15 Oct, 2002 4 commits
  17. 14 Oct, 2002 2 commits
    • Shane Hathaway's avatar
      Merge from 2_6 branch. · 42ea9a15
      Shane Hathaway authored
      PageTemplateFiles were previously owned by whatever object contained
      them.  This resulted in very hard bugs if the user who owned the
      container was removed.  Since PageTemplateFiles come from the
      filesystem, they are now "unowned", similar to DTMLFiles.  Security is
      still applied, but now it is applied correctly.
      42ea9a15
    • Brian Lloyd's avatar
      Backport fix for bad type converter. · 36a4864b
      Brian Lloyd authored
      36a4864b
  18. 12 Oct, 2002 1 commit
    • Martijn Pieters's avatar
      Add missing import. · 1025149c
      Martijn Pieters authored
      Ahem, *cough*: "Please run the test suite before checking in a change! At
      the very least run the tests for the package you changed."
      1025149c
  19. 11 Oct, 2002 1 commit
    • Lennart Regebro's avatar
      Merge to HEAD: · 5918ffbd
      Lennart Regebro authored
      Date is a required header in RFC822 and RFC2822, so MailHost now adds it if it doesn't exist.
      5918ffbd