Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
slapos slapos
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Labels
    • Labels
  • Merge requests 124
    • Merge requests 124
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Environments
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Jobs
  • Commits
Collapse sidebar
  • nexedi
  • slaposslapos
  • Merge requests
  • !1009

Merged
Created Jul 02, 2021 by Kirill Smelkov@kirrOwner

v↑ tempstorage 2.12.2 -> 5.2(ZODB5) 3-nxd(ZODB4-wc2, ZODB4)

  • Overview 36
  • Commits 2
  • Changes 2

tempstorage 2.12.2 is from 2012 and misses loadBefore fixes which are important when ERP5 is run with ZODB5 or ZODB4-wc2:

https://github.com/zopefoundation/tempstorage/commit/d187a86d
https://github.com/zopefoundation/tempstorage/pull/16

When the first loadBefore fix is not there, the problem manifests itself as Zope not starting correctly with the following error in its log:

2021-07-02 08:37:25,579 ERROR Zope.ZODBMountPoint Failed to mount database. <class 'ZODB.POSException.ReadConflictError'> (^@^@^@^@^@^@^@^@)
Traceback (most recent call last):
 File ".../eggs/Zope2-2.13.30-py2.7.egg/Products/ZODBMountPoint/MountedObject.py", line 248, in _getOrOpenObject
   root = conn.root()
 File ".../parts/ZODB4-wc2/src/ZODB/Connection.py", line 405, in root
   return RootConvenience(self.get(z64))
 File ".../parts/ZODB4-wc2/src/ZODB/Connection.py", line 276, in get 
   p, serial = self._load(oid)
 File ".../parts/ZODB4-wc2/src/ZODB/Connection.py", line 246, in _load
   return self._loadFrom(oid, self._storage)
 File ".../parts/ZODB4-wc2/src/ZODB/Connection.py", line 255, in _loadFrom
   raise ReadConflictError(oid)
ReadConflictError: ^@^@^@^@^@^@^@^@

When the second loadBefore fix is not there, the problem manifests itself as data corruption and sporadic POSKeyErrors (https://github.com/zopefoundation/tempstorage/issues/8).

-> Fix both problem by using recent tempstorage with ZODB5 and ZODB4:

  • ZODB5: just use tempstorage 5.2 egg
  • ZODB4-wc2: use tempstorage 3 + loadBefore backports: https://lab.nexedi.com/nexedi/tempstorage/commits/3-nxd
  • ZODB4: stays at 2.12.2 for now for this change to be as risk-free as possible. However, due to the fixes and e.g. https://github.com/zopefoundation/tempstorage/issues/8#issuecomment-873894941 it makes sense to switch ZODB4 to tempstorage 3-nxd as well.
    EDIT: ZODB4 is also updated to use tempstorage 3-nxd (see !1009 (comment 137985) and below).

/cc @tomo, @romain, @rafael

Edited Jul 16, 2021 by Kirill Smelkov
Assignee
Assign to
Reviewer
Request review from
None
Milestone
None
Assign milestone
Time tracking
Source branch: y/tempstorage-vup
GitLab Nexedi Edition | About GitLab | About Nexedi | 沪ICP备2021021310号-2 | 沪ICP备2021021310号-7