Commit 686f169f authored by Jim Fulton's avatar Jim Fulton Committed by GitHub

Merge pull request #87 from NextThought/handle-serials

Per @jimfulton, handle_all_serials shouldn't be sniffing in ZODB5

Thanks.
parents 5d81f8b5 c52a0a74
...@@ -21,7 +21,6 @@ All storages should be able to pass these tests. ...@@ -21,7 +21,6 @@ All storages should be able to pass these tests.
from ZODB import POSException from ZODB import POSException
from ZODB.tests.MinPO import MinPO from ZODB.tests.MinPO import MinPO
from ZODB.tests.StorageTestBase import zodb_unpickle, zodb_pickle from ZODB.tests.StorageTestBase import zodb_unpickle, zodb_pickle
from ZODB.tests.StorageTestBase import handle_serials
import threading import threading
import time import time
...@@ -68,13 +67,10 @@ class BasicStorage: ...@@ -68,13 +67,10 @@ class BasicStorage:
self._storage.tpc_begin(txn) self._storage.tpc_begin(txn)
# Use None for serial. Don't use _dostore() here because that coerces # Use None for serial. Don't use _dostore() here because that coerces
# serial=None to serial=ZERO. # serial=None to serial=ZERO.
r1 = self._storage.store(oid, None, zodb_pickle(MinPO(11)), self._storage.store(oid, None, zodb_pickle(MinPO(11)),
'', txn) '', txn)
r2 = self._storage.tpc_vote(txn) self._storage.tpc_vote(txn)
serial = self._storage.tpc_finish(txn) newrevid = self._storage.tpc_finish(txn)
newrevid = handle_serials(oid, r1, r2)
if newrevid is None and serial is not None:
newrevid = serial
data, revid = utils.load_current(self._storage, oid) data, revid = utils.load_current(self._storage, oid)
value = zodb_unpickle(data) value = zodb_unpickle(data)
eq(value, MinPO(11)) eq(value, MinPO(11))
......
...@@ -9,7 +9,6 @@ import transaction ...@@ -9,7 +9,6 @@ import transaction
import ZODB import ZODB
from ZODB.tests.StorageTestBase import zodb_pickle, zodb_unpickle from ZODB.tests.StorageTestBase import zodb_pickle, zodb_unpickle
from ZODB.tests.StorageTestBase import handle_serials
from ZODB.tests.MinPO import MinPO from ZODB.tests.MinPO import MinPO
from ZODB.POSException import ConflictError from ZODB.POSException import ConflictError
...@@ -149,18 +148,14 @@ class StorageClientThread(TestThread): ...@@ -149,18 +148,14 @@ class StorageClientThread(TestThread):
self.pause() self.pause()
# Always create a new object, signified by None for revid # Always create a new object, signified by None for revid
r1 = self.storage.store(oid, None, data, '', t) self.storage.store(oid, None, data, '', t)
self.pause() self.pause()
r2 = self.storage.tpc_vote(t) self.storage.tpc_vote(t)
self.pause() self.pause()
serial = self.storage.tpc_finish(t) revid = self.storage.tpc_finish(t)
self.pause() self.pause()
revid = handle_serials(oid, r1, r2)
if serial is not None and revid is None:
revid = serial
self.oids[oid] = revid self.oids[oid] = revid
class ExtStorageClientThread(StorageClientThread): class ExtStorageClientThread(StorageClientThread):
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
from ZODB.tests.MinPO import MinPO from ZODB.tests.MinPO import MinPO
from ZODB.tests.StorageTestBase import zodb_unpickle, zodb_pickle, snooze from ZODB.tests.StorageTestBase import zodb_unpickle, zodb_pickle, snooze
from ZODB.tests.StorageTestBase import handle_serials
from ZODB.utils import p64, u64, load_current from ZODB.utils import p64, u64, load_current
import transaction import transaction
...@@ -146,16 +145,13 @@ class RevisionStorage: ...@@ -146,16 +145,13 @@ class RevisionStorage:
t = transaction.Transaction() t = transaction.Transaction()
try: try:
self._storage.tpc_begin(t, p64(tid)) self._storage.tpc_begin(t, p64(tid))
r1 = self._storage.store(oid, revid, data, '', t) self._storage.store(oid, revid, data, '', t)
# Finish the transaction # Finish the transaction
r2 = self._storage.tpc_vote(t) self._storage.tpc_vote(t)
newrevid = handle_serials(oid, r1, r2) newrevid = self._storage.tpc_finish(t)
serial = self._storage.tpc_finish(t)
except: except:
self._storage.tpc_abort(t) self._storage.tpc_abort(t)
raise raise
if serial is not None and newrevid is None:
newrevid = serial
return newrevid return newrevid
revid1 = helper(1, None, 1) revid1 = helper(1, None, 1)
revid2 = helper(2, revid1, 2) revid2 = helper(2, revid1, 2)
......
...@@ -101,45 +101,6 @@ def zodb_unpickle(data): ...@@ -101,45 +101,6 @@ def zodb_unpickle(data):
inst.__setstate__(state) inst.__setstate__(state)
return inst return inst
def handle_all_serials(oid, *args):
"""Return dict of oid to serialno from store() and tpc_vote().
Raises an exception if one of the calls raised an exception.
The storage interface got complicated when ZEO was introduced.
Any individual store() call can return None or a sequence of
2-tuples where the 2-tuple is either oid, serialno or an
exception to be raised by the client.
The original interface just returned the serialno for the
object.
The updated multi-commit API returns nothing from store(), and
returns a sequence of resolved oids from tpc_vote.
"""
d = {}
for arg in args:
if isinstance(arg, bytes):
d[oid] = arg
elif arg:
for t in arg:
if isinstance(t, bytes):
# This will be the tid returned by tpc_finish.
pass
else:
oid, serial = t
if not isinstance(serial, bytes):
raise serial # error from ZEO server
d[oid] = serial
return d
def handle_serials(oid, *args):
"""Return the serialno for oid based on multiple return values.
A helper for function _handle_all_serials().
"""
return handle_all_serials(oid, *args).get(oid)
def import_helper(name): def import_helper(name):
__import__(name) __import__(name)
return sys.modules[name] return sys.modules[name]
...@@ -194,10 +155,7 @@ class StorageTestBase(ZODB.tests.util.TestCase): ...@@ -194,10 +155,7 @@ class StorageTestBase(ZODB.tests.util.TestCase):
r1 = self._storage.store(oid, revid, data, '', t) r1 = self._storage.store(oid, revid, data, '', t)
# Finish the transaction # Finish the transaction
r2 = self._storage.tpc_vote(t) r2 = self._storage.tpc_vote(t)
revid = handle_serials(oid, r1, r2) revid = self._storage.tpc_finish(t)
serial = self._storage.tpc_finish(t)
if serial is not None and revid is None:
revid = serial
except: except:
self._storage.tpc_abort(t) self._storage.tpc_abort(t)
raise raise
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment