[ZODB-Dev] potential fix for ZEO bug
Jeremy Hylton
jeremy@zope.com
Wed, 06 Mar 2002 02:00:22 -0500 (EST)
Chris,
Here's a patch that may fix the problem you reported. Let me know if
it helps. It's too late to check it in tonight.
Jeremy
Index: StorageServer.py
===================================================================
RCS file: /cvs-repository/StandaloneZODB/ZEO/StorageServer.py,v
retrieving revision 1.28.2.6
diff -c -c -r1.28.2.6 StorageServer.py
*** StorageServer.py 31 Oct 2001 19:53:22 -0000 1.28.2.6
--- StorageServer.py 6 Mar 2002 06:59:07 -0000
***************
*** 572,595 ****
return 1
def tpc_finish(self, id, user, description, ext):
! t=self._transaction
! if id != t.id: return
! storage=self.__storage
! r=storage.tpc_finish(t)
! try: waiting=storage.__waiting
! except: waiting=storage.__waiting=[]
while waiting:
f, args = waiting.pop(0)
! if apply(f,args): break
! self._transaction=None
if self.__invalidated:
self.__server.invalidate(self, self.__storage_id,
self.__invalidated,
self.get_size_info())
! self.__invalidated=[]
def init_storage(storage):
if not hasattr(storage,'tpc_vote'): storage.tpc_vote=lambda *args: None
--- 572,609 ----
return 1
def tpc_finish(self, id, user, description, ext):
! t = self._transaction
! if id != t.id:
! return
! storage = self.__storage
! r = storage.tpc_finish(t)
! try:
! waiting = storage.__waiting
! except AttributeError:
! waiting = []
while waiting:
f, args = waiting.pop(0)
! try:
! if apply(f, args):
! break
! except Disconnected:
! # A disconnected error isn't an unexpected error.
! # There should be no need to log it, because the
! # disconnect will have generated its own log event.
! pass
! except:
! LOG('ZEO Server', ERROR,
! "Unexpected error handling queued tpc_begin()",
! error=sys.exc_info())
! self._transaction = None
if self.__invalidated:
self.__server.invalidate(self, self.__storage_id,
self.__invalidated,
self.get_size_info())
! self.__invalidated = []
def init_storage(storage):
if not hasattr(storage,'tpc_vote'): storage.tpc_vote=lambda *args: None