Commit 89c90374 authored by Grégory Wisniewski's avatar Grégory Wisniewski

Remove client transaction lock. Set all transaction related variables as

thread-safe. Add two lock, one for the node manager, another for the partition
table to ensure exclusive access.


git-svn-id: https://svn.erp5.org/repos/neo/branches/prototype3@478 71dcc9de-d417-0410-9af5-da40c76e7ee4
parent 5f4ba33b
...@@ -37,8 +37,6 @@ class Storage(BaseStorage.BaseStorage, ...@@ -37,8 +37,6 @@ class Storage(BaseStorage.BaseStorage,
logging.basicConfig(level=logging.DEBUG, format=format) logging.basicConfig(level=logging.DEBUG, format=format)
# Transaction must be under protection of lock # Transaction must be under protection of lock
l = Lock() l = Lock()
self._txn_lock_acquire = l.acquire
self._txn_lock_release = l.release
self.app = Application(master_nodes, name, connector) self.app = Application(master_nodes, name, connector)
def load(self, oid, version=None): def load(self, oid, version=None):
...@@ -71,7 +69,6 @@ class Storage(BaseStorage.BaseStorage, ...@@ -71,7 +69,6 @@ class Storage(BaseStorage.BaseStorage,
def tpc_begin(self, transaction, tid=None, status=' '): def tpc_begin(self, transaction, tid=None, status=' '):
if self._is_read_only: if self._is_read_only:
raise POSException.ReadOnlyError() raise POSException.ReadOnlyError()
self._txn_lock_acquire()
return self.app.tpc_begin(transaction=transaction, tid=tid, status=status) return self.app.tpc_begin(transaction=transaction, tid=tid, status=status)
def tpc_vote(self, transaction): def tpc_vote(self, transaction):
...@@ -82,16 +79,10 @@ class Storage(BaseStorage.BaseStorage, ...@@ -82,16 +79,10 @@ class Storage(BaseStorage.BaseStorage,
def tpc_abort(self, transaction): def tpc_abort(self, transaction):
if self._is_read_only: if self._is_read_only:
raise POSException.ReadOnlyError() raise POSException.ReadOnlyError()
try:
return self.app.tpc_abort(transaction=transaction) return self.app.tpc_abort(transaction=transaction)
finally:
self._txn_lock_release()
def tpc_finish(self, transaction, f=None): def tpc_finish(self, transaction, f=None):
try:
return self.app.tpc_finish(transaction=transaction, f=f) return self.app.tpc_finish(transaction=transaction, f=f)
finally:
self._txn_lock_release()
def store(self, oid, serial, data, version, transaction): def store(self, oid, serial, data, version, transaction):
app = self.app app = self.app
......
This diff is collapsed.
...@@ -478,9 +478,9 @@ class StorageEventHandler(BaseClientEventHandler): ...@@ -478,9 +478,9 @@ class StorageEventHandler(BaseClientEventHandler):
def handleAnswerStoreObject(self, conn, packet, conflicting, oid, serial): def handleAnswerStoreObject(self, conn, packet, conflicting, oid, serial):
app = self.app app = self.app
if conflicting: if conflicting:
app.txn_object_stored = -1, serial app.local_var.object_stored = -1, serial
else: else:
app.txn_object_stored = oid, serial app.local_var.object_stored = oid, serial
def handleAnswerStoreTransaction(self, conn, packet, tid): def handleAnswerStoreTransaction(self, conn, packet, tid):
app = self.app app = self.app
......
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