[Checkins] [zopefoundation/ZODB] a9ecb9: mvccadapter: check if the last TID changed without...

Julien Muchembled noreply at github.com
Wed Apr 1 17:48:51 CEST 2020


  Branch: refs/heads/issue290
  Home:   https://github.com/zopefoundation/ZODB
  Commit: a9ecb9612168c441e227b741cfb41a0cee147f78
      https://github.com/zopefoundation/ZODB/commit/a9ecb9612168c441e227b741cfb41a0cee147f78
  Author: Julien Muchembled <jm at nexedi.com>
  Date:   2020-04-01 (Wed, 01 Apr 2020)

  Changed paths:
    M src/ZODB/FileStorage/tests.py
    M src/ZODB/mvccadapter.py
    M src/ZODB/tests/testConnection.py
    M src/ZODB/tests/testmvcc.py

  Log Message:
  -----------
  mvccadapter: check if the last TID changed without invalidation

Since commit b5895a5c23309ff2dfe8fd853b838a0c5e349210 ("mvccadapter:
fix race with invalidations when starting a new transaction"),
a ZEO test fails as follows:

    File "src/ZEO/tests/drop_cache_rather_than_verify.txt", line 114, in drop_cache_rather_than_verify.txt
    Failed example:
        conn.root()[1].x
    Expected:
        6
    Got:
        1

Earlier in the test, the ZEO server is restarted and then another
client commits. When disconnected, the first client does not receive
invalidations anymore and the connection gets stuck in the past until
there's a new commit after it reconnected. It was possible to make the
test pass with the following patch:

--- a/src/ZEO/ClientStorage.py
+++ b/src/ZEO/ClientStorage.py
@@ -357,6 +357,7 @@ def notify_connected(self, conn, info):

         # invalidate our db cache
         if self._db is not None:
+            self._db.invalidate(self.lastTransaction(), ())
             self._db.invalidateCache()

         logger.info("%s %s to storage: %s",

Other implementations like NEO are probably affected the same way.

Rather than changing interfaces in a backward-incompatible way,
this commit revert to the original behaviour, and all the changes
that were done in existing tests are reverted.




More information about the checkins mailing list