forked from pool/python-ZODB
- Add patch to work with transaction 3.x:
* transaction3.patch OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-ZODB?expand=0&rev=15
This commit is contained in:
committed by
Git OBS Bridge
parent
5a7ae5546b
commit
2d103e4bfb
@@ -1,3 +1,9 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon May 4 10:50:45 UTC 2020 - Tomáš Chvátal <tchvatal@suse.com>
|
||||||
|
|
||||||
|
- Add patch to work with transaction 3.x:
|
||||||
|
* transaction3.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Mar 4 14:15:53 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
|
Mon Mar 4 14:15:53 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package python-ZODB
|
# spec file for package python-ZODB
|
||||||
#
|
#
|
||||||
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
|
# Copyright (c) 2020 SUSE LLC
|
||||||
# Copyright (c) 2013 LISA GmbH, Bingen, Germany.
|
# Copyright (c) 2013 LISA GmbH, Bingen, Germany.
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
@@ -23,9 +23,9 @@ Version: 5.5.1
|
|||||||
Release: 0
|
Release: 0
|
||||||
Summary: Zope Object Database: object database and persistence
|
Summary: Zope Object Database: object database and persistence
|
||||||
License: ZPL-2.1
|
License: ZPL-2.1
|
||||||
Group: Development/Libraries/Python
|
|
||||||
URL: https://github.com/zopefoundation/ZODB
|
URL: https://github.com/zopefoundation/ZODB
|
||||||
Source: https://files.pythonhosted.org/packages/source/Z/ZODB/ZODB-%{version}.tar.gz
|
Source: https://files.pythonhosted.org/packages/source/Z/ZODB/ZODB-%{version}.tar.gz
|
||||||
|
Patch0: transaction3.patch
|
||||||
BuildRequires: %{python_module BTrees >= 4.2.0}
|
BuildRequires: %{python_module BTrees >= 4.2.0}
|
||||||
BuildRequires: %{python_module ZConfig}
|
BuildRequires: %{python_module ZConfig}
|
||||||
BuildRequires: %{python_module manuel}
|
BuildRequires: %{python_module manuel}
|
||||||
@@ -63,7 +63,6 @@ support, and undo.
|
|||||||
|
|
||||||
%package -n %{name}-doc
|
%package -n %{name}-doc
|
||||||
Summary: Zope Object Database: object database and persistence
|
Summary: Zope Object Database: object database and persistence
|
||||||
Group: Development/Libraries/Python
|
|
||||||
Provides: %{python_module ZODB-doc = %{version}}
|
Provides: %{python_module ZODB-doc = %{version}}
|
||||||
|
|
||||||
%description -n %{name}-doc
|
%description -n %{name}-doc
|
||||||
@@ -71,6 +70,7 @@ This package contains documentation files for %{name}.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n ZODB-%{version}
|
%setup -q -n ZODB-%{version}
|
||||||
|
%patch0 -p1
|
||||||
# delete backup files
|
# delete backup files
|
||||||
find . -name "*~" -print -delete
|
find . -name "*~" -print -delete
|
||||||
# remove unwanted shebang
|
# remove unwanted shebang
|
||||||
|
|||||||
285
transaction3.patch
Normal file
285
transaction3.patch
Normal file
@@ -0,0 +1,285 @@
|
|||||||
|
From 0adcc6877f690186c97cc5da7e13788946d5e0df Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jason Madden <jamadden@gmail.com>
|
||||||
|
Date: Wed, 11 Dec 2019 10:24:00 -0600
|
||||||
|
Subject: [PATCH] Fix tests with transaction 3.0.
|
||||||
|
|
||||||
|
Only test changes were required, no production code changes.
|
||||||
|
---
|
||||||
|
src/ZODB/tests/testZODB.py | 7 +-
|
||||||
|
src/ZODB/tests/test_datamanageradapter.py | 242 ----------------------
|
||||||
|
3 files changed, 6 insertions(+), 245 deletions(-)
|
||||||
|
delete mode 100644 src/ZODB/tests/test_datamanageradapter.py
|
||||||
|
|
||||||
|
diff --git a/src/ZODB/tests/testZODB.py b/src/ZODB/tests/testZODB.py
|
||||||
|
index c5f7949e9..2ec6c5af7 100644
|
||||||
|
--- a/src/ZODB/tests/testZODB.py
|
||||||
|
+++ b/src/ZODB/tests/testZODB.py
|
||||||
|
@@ -290,8 +290,9 @@ def checkFailingCommitSticks(self):
|
||||||
|
rt['a'] = 1
|
||||||
|
|
||||||
|
# Arrange for commit to fail during tpc_vote.
|
||||||
|
- poisoned = PoisonedObject(PoisonedJar(break_tpc_vote=True))
|
||||||
|
- transaction.get().register(poisoned)
|
||||||
|
+ poisoned_jar = PoisonedJar(break_tpc_vote=True)
|
||||||
|
+ poisoned = PoisonedObject(poisoned_jar)
|
||||||
|
+ transaction.get().join(poisoned_jar)
|
||||||
|
|
||||||
|
self.assertRaises(PoisonedError, transaction.get().commit)
|
||||||
|
# Trying to commit again fails too.
|
||||||
|
@@ -314,7 +315,7 @@ def checkFailingCommitSticks(self):
|
||||||
|
|
||||||
|
# Cleaning up via begin() should also work.
|
||||||
|
rt['a'] = 2
|
||||||
|
- transaction.get().register(poisoned)
|
||||||
|
+ transaction.get().join(poisoned_jar)
|
||||||
|
self.assertRaises(PoisonedError, transaction.commit)
|
||||||
|
self.assertRaises(TransactionFailedError, transaction.commit)
|
||||||
|
# The change to rt['a'] is lost.
|
||||||
|
diff --git a/src/ZODB/tests/test_datamanageradapter.py b/src/ZODB/tests/test_datamanageradapter.py
|
||||||
|
deleted file mode 100644
|
||||||
|
index cfeb40bf3..000000000
|
||||||
|
--- a/src/ZODB/tests/test_datamanageradapter.py
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,242 +0,0 @@
|
||||||
|
-##############################################################################
|
||||||
|
-#
|
||||||
|
-# Copyright (c) 2003 Zope Foundation and Contributors.
|
||||||
|
-# All Rights Reserved.
|
||||||
|
-#
|
||||||
|
-# This software is subject to the provisions of the Zope Public License,
|
||||||
|
-# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||||
|
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||||
|
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||||
|
-# FOR A PARTICULAR PURPOSE.
|
||||||
|
-#
|
||||||
|
-##############################################################################
|
||||||
|
-import unittest
|
||||||
|
-from doctest import DocTestSuite
|
||||||
|
-from transaction._transaction import DataManagerAdapter
|
||||||
|
-from ZODB.tests.sampledm import DataManager
|
||||||
|
-
|
||||||
|
-def test_normal_commit():
|
||||||
|
- """
|
||||||
|
- So, we have a data manager:
|
||||||
|
-
|
||||||
|
- >>> dm = DataManager()
|
||||||
|
-
|
||||||
|
- and we do some work that modifies uncommited state:
|
||||||
|
-
|
||||||
|
- >>> dm.inc()
|
||||||
|
- >>> dm.state, dm.delta
|
||||||
|
- (0, 1)
|
||||||
|
-
|
||||||
|
- Now we'll commit the changes. When the data manager joins a transaction,
|
||||||
|
- the transaction will create an adapter.
|
||||||
|
-
|
||||||
|
- >>> dma = DataManagerAdapter(dm)
|
||||||
|
-
|
||||||
|
- and register it as a modified object. At commit time, the
|
||||||
|
- transaction will get the "jar" like this:
|
||||||
|
-
|
||||||
|
- >>> jar = getattr(dma, '_p_jar', dma)
|
||||||
|
-
|
||||||
|
- and, of course, the jar and the adapter will be the same:
|
||||||
|
-
|
||||||
|
- >>> jar is dma
|
||||||
|
- True
|
||||||
|
-
|
||||||
|
- The transaction will call tpc_begin:
|
||||||
|
-
|
||||||
|
- >>> t1 = '1'
|
||||||
|
- >>> jar.tpc_begin(t1)
|
||||||
|
-
|
||||||
|
- Then the transaction will call commit on the jar:
|
||||||
|
-
|
||||||
|
- >>> jar.commit(t1)
|
||||||
|
-
|
||||||
|
- This doesn't actually do anything. :)
|
||||||
|
-
|
||||||
|
- >>> dm.state, dm.delta
|
||||||
|
- (0, 1)
|
||||||
|
-
|
||||||
|
- The transaction will then call tpc_vote:
|
||||||
|
-
|
||||||
|
- >>> jar.tpc_vote(t1)
|
||||||
|
-
|
||||||
|
- This prepares the data manager:
|
||||||
|
-
|
||||||
|
- >>> dm.state, dm.delta
|
||||||
|
- (1, 1)
|
||||||
|
- >>> dm.prepared
|
||||||
|
- True
|
||||||
|
-
|
||||||
|
- Finally, tpc_finish is called:
|
||||||
|
-
|
||||||
|
- >>> jar.tpc_finish(t1)
|
||||||
|
-
|
||||||
|
- and the data manager finishes the two-phase commit:
|
||||||
|
-
|
||||||
|
- >>> dm.state, dm.delta
|
||||||
|
- (1, 0)
|
||||||
|
- >>> dm.prepared
|
||||||
|
- False
|
||||||
|
- """
|
||||||
|
-
|
||||||
|
-def test_abort():
|
||||||
|
- """
|
||||||
|
- So, we have a data manager:
|
||||||
|
-
|
||||||
|
- >>> dm = DataManager()
|
||||||
|
-
|
||||||
|
- and we do some work that modifies uncommited state:
|
||||||
|
-
|
||||||
|
- >>> dm.inc()
|
||||||
|
- >>> dm.state, dm.delta
|
||||||
|
- (0, 1)
|
||||||
|
-
|
||||||
|
- When the data manager joins a transaction,
|
||||||
|
- the transaction will create an adapter.
|
||||||
|
-
|
||||||
|
- >>> dma = DataManagerAdapter(dm)
|
||||||
|
-
|
||||||
|
- and register it as a modified object.
|
||||||
|
-
|
||||||
|
- Now we'll abort the transaction. The transaction will get the
|
||||||
|
- "jar" like this:
|
||||||
|
-
|
||||||
|
- >>> jar = getattr(dma, '_p_jar', dma)
|
||||||
|
-
|
||||||
|
- and, of course, the jar and the adapter will be the same:
|
||||||
|
-
|
||||||
|
- >>> jar is dma
|
||||||
|
- True
|
||||||
|
-
|
||||||
|
- Then the transaction will call abort on the jar:
|
||||||
|
-
|
||||||
|
- >>> t1 = '1'
|
||||||
|
- >>> jar.abort(t1)
|
||||||
|
-
|
||||||
|
- Which aborts the changes in the data manager:
|
||||||
|
-
|
||||||
|
- >>> dm.state, dm.delta
|
||||||
|
- (0, 0)
|
||||||
|
- """
|
||||||
|
-
|
||||||
|
-def test_tpc_abort_phase1():
|
||||||
|
- """
|
||||||
|
- So, we have a data manager:
|
||||||
|
-
|
||||||
|
- >>> dm = DataManager()
|
||||||
|
-
|
||||||
|
- and we do some work that modifies uncommited state:
|
||||||
|
-
|
||||||
|
- >>> dm.inc()
|
||||||
|
- >>> dm.state, dm.delta
|
||||||
|
- (0, 1)
|
||||||
|
-
|
||||||
|
- Now we'll commit the changes. When the data manager joins a transaction,
|
||||||
|
- the transaction will create an adapter.
|
||||||
|
-
|
||||||
|
- >>> dma = DataManagerAdapter(dm)
|
||||||
|
-
|
||||||
|
- and register it as a modified object. At commit time, the
|
||||||
|
- transaction will get the "jar" like this:
|
||||||
|
-
|
||||||
|
- >>> jar = getattr(dma, '_p_jar', dma)
|
||||||
|
-
|
||||||
|
- and, of course, the jar and the adapter will be the same:
|
||||||
|
-
|
||||||
|
- >>> jar is dma
|
||||||
|
- True
|
||||||
|
-
|
||||||
|
- The transaction will call tpc_begin:
|
||||||
|
-
|
||||||
|
- >>> t1 = '1'
|
||||||
|
- >>> jar.tpc_begin(t1)
|
||||||
|
-
|
||||||
|
- Then the transaction will call commit on the jar:
|
||||||
|
-
|
||||||
|
- >>> jar.commit(t1)
|
||||||
|
-
|
||||||
|
- This doesn't actually do anything. :)
|
||||||
|
-
|
||||||
|
- >>> dm.state, dm.delta
|
||||||
|
- (0, 1)
|
||||||
|
-
|
||||||
|
- At this point, the transaction decides to abort. It calls tpc_abort:
|
||||||
|
-
|
||||||
|
- >>> jar.tpc_abort(t1)
|
||||||
|
-
|
||||||
|
- Which causes the state of the data manager to be restored:
|
||||||
|
-
|
||||||
|
- >>> dm.state, dm.delta
|
||||||
|
- (0, 0)
|
||||||
|
- """
|
||||||
|
-
|
||||||
|
-def test_tpc_abort_phase2():
|
||||||
|
- """
|
||||||
|
- So, we have a data manager:
|
||||||
|
-
|
||||||
|
- >>> dm = DataManager()
|
||||||
|
-
|
||||||
|
- and we do some work that modifies uncommited state:
|
||||||
|
-
|
||||||
|
- >>> dm.inc()
|
||||||
|
- >>> dm.state, dm.delta
|
||||||
|
- (0, 1)
|
||||||
|
-
|
||||||
|
- Now we'll commit the changes. When the data manager joins a transaction,
|
||||||
|
- the transaction will create an adapter.
|
||||||
|
-
|
||||||
|
- >>> dma = DataManagerAdapter(dm)
|
||||||
|
-
|
||||||
|
- and register it as a modified object. At commit time, the
|
||||||
|
- transaction will get the "jar" like this:
|
||||||
|
-
|
||||||
|
- >>> jar = getattr(dma, '_p_jar', dma)
|
||||||
|
-
|
||||||
|
- and, of course, the jar and the adapter will be the same:
|
||||||
|
-
|
||||||
|
- >>> jar is dma
|
||||||
|
- True
|
||||||
|
-
|
||||||
|
- The transaction will call tpc_begin:
|
||||||
|
-
|
||||||
|
- >>> t1 = '1'
|
||||||
|
- >>> jar.tpc_begin(t1)
|
||||||
|
-
|
||||||
|
- Then the transaction will call commit on the jar:
|
||||||
|
-
|
||||||
|
- >>> jar.commit(t1)
|
||||||
|
-
|
||||||
|
- This doesn't actually do anything. :)
|
||||||
|
-
|
||||||
|
- >>> dm.state, dm.delta
|
||||||
|
- (0, 1)
|
||||||
|
-
|
||||||
|
- The transaction calls vote:
|
||||||
|
-
|
||||||
|
- >>> jar.tpc_vote(t1)
|
||||||
|
-
|
||||||
|
- This prepares the data manager:
|
||||||
|
-
|
||||||
|
- >>> dm.state, dm.delta
|
||||||
|
- (1, 1)
|
||||||
|
- >>> dm.prepared
|
||||||
|
- True
|
||||||
|
-
|
||||||
|
- At this point, the transaction decides to abort. It calls tpc_abort:
|
||||||
|
-
|
||||||
|
- >>> jar.tpc_abort(t1)
|
||||||
|
-
|
||||||
|
- Which causes the state of the data manager to be restored:
|
||||||
|
-
|
||||||
|
- >>> dm.state, dm.delta
|
||||||
|
- (0, 0)
|
||||||
|
- >>> dm.prepared
|
||||||
|
- False
|
||||||
|
- """
|
||||||
|
-
|
||||||
|
-def test_suite():
|
||||||
|
- return DocTestSuite()
|
||||||
|
-
|
||||||
|
-if __name__ == '__main__':
|
||||||
|
- unittest.main()
|
||||||
Reference in New Issue
Block a user