On 14/05/2004, at 10:06 AM, Chris McDonough wrote:

I am tempted to check the following into the 2.7 branch and HEAD:

- "error occurs in same transaction as main request" patch
to Publish.py. See
http://www.plope.com/Members/chrism/ publishpy_errorinmaintrainsaction.patch/file_view
for the patch.

hmm... I suspect there are few holes in this...

- Need to make sure there is no get_transaction().begin() in zpublisher_exception_hook() of lib/python/Zope/App/startup.py

That begin() would mean that the error handling is not in fact part of the original transaction?

- An exception within err_hook() (aside from a Retry) will mean that abort() is never called.

Here is another attempt at publishpy_errorinmaintrainsaction.patch:


Index: lib/python/ZPublisher/Publish.py
===================================================================
RCS file: /cvs-repository/Zope/lib/python/ZPublisher/Publish.py,v
retrieving revision 1.164.2.2
diff -u -r1.164.2.2 Publish.py
--- lib/python/ZPublisher/Publish.py 17 Nov 2003 22:34:19 -0000 1.164.2.2
+++ lib/python/ZPublisher/Publish.py 15 May 2004 02:34:12 -0000
@@ -105,7 +105,6 @@


         return response
     except:
-        if transactions_manager: transactions_manager.abort()

         # DM: provide nicer error message for FTP
         sm = None
@@ -119,29 +118,36 @@


if err_hook is not None:
- if parents: parents=parents[0]
try:
- return err_hook(parents, request,
- sys.exc_info()[0],
- sys.exc_info()[1],
- sys.exc_info()[2],
- )
- except Retry:
- # We need to try again....
- if not request.supports_retry():
+ if parents: parents=parents[0]
+ try:
return err_hook(parents, request,
sys.exc_info()[0],
sys.exc_info()[1],
sys.exc_info()[2],
)
- newrequest=request.retry()
- request.close() # Free resources held by the request.
- try:
- return publish(newrequest, module_name, after_list, debug)
- finally:
- newrequest.close()
+ except Retry:
+ if not request.supports_retry():
+ return err_hook(parents, request,
+ sys.exc_info()[0],
+ sys.exc_info()[1],
+ sys.exc_info()[2],
+ )
+ finally:
+ if transactions_manager: transactions_manager.abort()
+
+
+ newrequest=request.retry()
+ request.close() # Free resources held by the request.
+ try:
+ return publish(newrequest, module_name, after_list, debug)
+ finally:
+ newrequest.close()
+
+ else:
+ if transactions_manager: transactions_manager.abort()
+ raise


-        else: raise


def publish_module_standard(module_name,
Index: lib/python/Zope/App/startup.py
===================================================================
RCS file: /cvs-repository/Zope/lib/python/Zope/App/startup.py,v
retrieving revision 1.8.2.3
diff -u -r1.8.2.3 startup.py
--- lib/python/Zope/App/startup.py 20 Dec 2003 04:48:36 -0000 1.8.2.3
+++ lib/python/Zope/App/startup.py 15 May 2004 02:34:13 -0000
@@ -176,8 +176,6 @@
published=app.__bobo_traverse__(REQUEST).__of__(
RequestContainer(REQUEST))


-        get_transaction().begin() # Just to be sure.
-
         published=getattr(published, 'im_self', published)
         while 1:
             f=getattr(published, 'raise_standardErrorMessage', None)


_______________________________________________
Zope-Dev maillist - [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )

Reply via email to