Commit 42532c51 authored by Jim Fulton's avatar Jim Fulton Committed by GitHub

Merge pull request #140 from zopefoundation/issue-139

Connection.new_oid delegates to its storage, not the DB.
parents 93baff53 177cfabe
...@@ -8,5 +8,6 @@ omit = ...@@ -8,5 +8,6 @@ omit =
[report] [report]
exclude_lines = exclude_lines =
pragma: nocover pragma: nocover
pragma: no cover
if __name__ == ['"]__main__['"]: if __name__ == ['"]__main__['"]:
assert False assert False
...@@ -2,6 +2,13 @@ ...@@ -2,6 +2,13 @@
Change History Change History
================ ================
5.1.2 (unreleased)
==================
- ``Connection.new_oid`` delegates to its storage, not the DB. This is
helpful for improving concurrency in MVCC storages like RelStorage.
See `issue 139 <https://github.com/zopefoundation/ZODB/issues/139`_.
5.1.1 (2016-11-18) 5.1.1 (2016-11-18)
================== ==================
......
...@@ -126,7 +126,6 @@ class Connection(ExportImport, object): ...@@ -126,7 +126,6 @@ class Connection(ExportImport, object):
storage = storage.new_instance() storage = storage.new_instance()
self._normal_storage = self._storage = storage self._normal_storage = self._storage = storage
self.new_oid = db.new_oid
self._savepoint_storage = None self._savepoint_storage = None
# Do we need to join a txn manager? # Do we need to join a txn manager?
...@@ -200,6 +199,9 @@ class Connection(ExportImport, object): ...@@ -200,6 +199,9 @@ class Connection(ExportImport, object):
self._reader = ObjectReader(self, self._cache, self._db.classFactory) self._reader = ObjectReader(self, self._cache, self._db.classFactory)
def new_oid(self):
return self._storage.new_oid()
def add(self, obj): def add(self, obj):
"""Add a new object 'obj' to the database and assign it an oid.""" """Add a new object 'obj' to the database and assign it an oid."""
if self.opened is None: if self.opened is None:
......
...@@ -987,7 +987,13 @@ class DB(object): ...@@ -987,7 +987,13 @@ class DB(object):
return ContextManager(self, note) return ContextManager(self, note)
def new_oid(self): def new_oid(self):
return self.storage.new_oid() """
Return a new oid from the storage.
Kept for backwards compatibility only. New oids should be
allocated in a transaction using an open Connection.
"""
return self.storage.new_oid() # pragma: no cover
def open_then_close_db_when_connection_closes(self): def open_then_close_db_when_connection_closes(self):
"""Create and return a connection. """Create and return a connection.
......
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