Hello group,

            I am working on a project using TG1.0.4b3, SQL Alchemy
0.4.3 and python2.5, where i have two process doing insert and delete
operation on the same row of a  table at some given time. delete
operation is a UI event. and insert is being done by a background
process. now if a user hits delete while the background process was
doing insert. the web shows an SQL Alchemy Invalid Request error.

Message that it gives is "The transaction is invalid due to a rollback
in sub-transaction".

Help is urgently required.

here's the tracback --->

Error
An Error has occured. The Error has been recorded in the log file.
Please contact support with the logs and all other relevant
information.
Click to see the traceback
________________________________________
--> -->


<class 'sqlalchemy.exceptions.InvalidRequestError'>     Python 2.5.2: C:
\python25\python.exe
Tue May 20 10:05:59 2008
A problem occurred in a Python script. Here is the sequence of
function calls leading up to the error, in the order they occurred.
 c:\python25\lib\site-packages\cherrypy-2.2.1-py2.5.egg\cherrypy
\_cphttptools.py in _run(self=<cherrypy._cphttptools.Request object at
0x037F5D10>)
  103                             applyFilters('before_main')
  104                             if self.execute_main:
  105                                 self.main()
  106                             break
  107                         except cherrypy.InternalRedirect, ir:
self = <cherrypy._cphttptools.Request object at 0x037F5D10>, self.main
= <bound method Request.main of <cherrypy._cphttptools.Request object
at 0x037F5D10>>
 c:\python25\lib\site-packages\cherrypy-2.2.1-py2.5.egg\cherrypy
\_cphttptools.py in main(self=<cherrypy._cphttptools.Request object at
0x037F5D10>, path='/admin/deletestudy')
  252         self.object_path = '/' + '/'.join(object_path[1:])
  253         try:
  254             body = page_handler(*virtual_path, **self.params)
  255         except Exception, x:
  256             if hasattr(x, "args"):
body undefined, page_handler = <bound method Admin.deletestudy of
<radspeed.controllers.Admin instance at 0x0310AC38>>, virtual_path =
[], self = <cherrypy._cphttptools.Request object at 0x037F5D10>,
self.params = {'studylist':
u'1.3.12.2.1107.5.1.4.51964.4.0.3778684930241122,', 'studylist2': u''}
 D:\svn\main\projects\RadSpeed\web\radspeed-TG1.0\<string> in
deletestudy(self=<radspeed.controllers.Admin instance at 0x0310AC38>,
studylist=u'1.3.12.2.1107.5.1.4.51964.4.0.3778684930241122,',
*args=(), **kargs={'studylist2': u''})

 c:\python25\lib\site-packages\TurboGears-1.0.4b3-py2.5.egg\turbogears
\controllers.py in expose(func=<function deletestudy at 0x030FD530>,
*args=(<radspeed.controllers.Admin instance at 0x0310AC38>,),
**kw={'studylist': u'1.3.12.2.1107.5.1.4.51964.4.0.3778684930241122,',
'studylist2': u''})
  342                     output = database.run_with_transaction(
  343                             func._expose, func, accept,
func._allow_json,
  344                             *args, **kw)
  345                 return output
  346             func.exposed = True
args = (<radspeed.controllers.Admin instance at 0x0310AC38>,), kw =
{'studylist': u'1.3.12.2.1107.5.1.4.51964.4.0.3778684930241122,',
'studylist2': u''}
 D:\svn\main\projects\RadSpeed\web\radspeed-TG1.0\<string> in
run_with_transaction(func=<function _expose at 0x0354C030>,
*args=(<function deletestudy at 0x030FD530>, 'image/gif, image/x-
xbitmap, image/jpeg, image/pj...pplication/msword, application/x-
silverlight, */*', True, <radspeed.controllers.Admin instance at
0x0310AC38>), **kw={'studylist':
u'1.3.12.2.1107.5.1.4.51964.4.0.3778684930241122,', 'studylist2':
u''})

 C:\python25\lib\site-packages\turbogears-1.0.4b3-py2.5.egg\turbogears
\database.py in sa_rwt(func=<function _expose at 0x0354C030>,
*args=(<function deletestudy at 0x030FD530>, 'image/gif, image/x-
xbitmap, image/jpeg, image/pj...pplication/msword, application/x-
silverlight, */*', True, <radspeed.controllers.Admin instance at
0x0310AC38>), **kw={'studylist':
u'1.3.12.2.1107.5.1.4.51964.4.0.3778684930241122,', 'studylist2':
u''})
  404
  405     try:
  406         retval = func(*args, **kw)
  407
  408     except (cherrypy.HTTPRedirect, cherrypy.InternalRedirect):
retval undefined, func = <function _expose at 0x0354C030>, args =
(<function deletestudy at 0x030FD530>, 'image/gif, image/x-xbitmap,
image/jpeg, image/pj...pplication/msword, application/x-silverlight, */
*', True, <radspeed.controllers.Admin instance at 0x0310AC38>), kw =
{'studylist': u'1.3.12.2.1107.5.1.4.51964.4.0.3778684930241122,',
'studylist2': u''}
 D:\svn\main\projects\RadSpeed\web\radspeed-TG1.0\<string> in
_expose(func=<function deletestudy at 0x030FD530>, accept='image/gif,
image/x-xbitmap, image/jpeg, image/pj...pplication/msword, application/
x-silverlight, */*', allow_json=True,
*args=(<radspeed.controllers.Admin instance at 0x0310AC38>,),
**kw={'studylist': u'1.3.12.2.1107.5.1.4.51964.4.0.3778684930241122,',
'studylist2': u''})

 c:\python25\lib\site-packages\TurboGears-1.0.4b3-py2.5.egg\turbogears
\controllers.py in (_func=<function deletestudy at 0x030FD530>,
accept='image/gif, image/x-xbitmap, image/jpeg, image/pj...pplication/
msword, application/x-silverlight, */*', allow_json=True,
*args=(<radspeed.controllers.Admin instance at 0x0310AC38>,),
**kw={'studylist2': u''})
  357                     *args, **kw:
  358                     _execute_func(_func, template, format,
content_type,
  359                                 mapping, fragment, args, kw)))
  360
  361         if allow_json:
mapping = None, fragment = False, args = (<radspeed.controllers.Admin
instance at 0x0310AC38>,), kw = {'studylist2': u''}
 c:\python25\lib\site-packages\TurboGears-1.0.4b3-py2.5.egg\turbogears
\controllers.py in _execute_func(func=<function deletestudy at
0x030FD530>, template='json', format=None, content_type=None,
mapping=None, fragment=False, args=(<radspeed.controllers.Admin
instance at 0x0310AC38>,
u'1.3.12.2.1107.5.1.4.51964.4.0.3778684930241122,'), kw={'studylist2':
u''})
  384         # this means big memory usage, and we don't want that in
production
  385         log.debug("Calling %s with *(%s), **(%s)", func, args,
kw)
  386     output = errorhandling.try_call(func, *args, **kw)
  387     if isinstance(output, list):
  388         return output
output undefined, global errorhandling = <module
'turbogears.errorhandling' from 'C:\pyth...-1.0.4b3-py2.5.egg
\turbogears\errorhandling.pyc'>, errorhandling.try_call = <function
try_call at 0x02CEEAB0>, func = <function deletestudy at 0x030FD530>,
args = (<radspeed.controllers.Admin instance at 0x0310AC38>,
u'1.3.12.2.1107.5.1.4.51964.4.0.3778684930241122,'), kw =
{'studylist2': u''}
 c:\python25\lib\site-packages\TurboGears-1.0.4b3-py2.5.egg\turbogears
\errorhandling.py in try_call(func=<function deletestudy at
0x030FD530>, self=<radspeed.controllers.Admin instance at 0x0310AC38>,
*args=(u'1.3.12.2.1107.5.1.4.51964.4.0.3778684930241122,',),
**kw={'studylist2': u''})
   81             remove_keys(kw, ("tg_source", "tg_errors",
"tg_exceptions"))
   82             if getattr(cherrypy.request, "in_transaction",
None):
   83                 restart_transaction(1)
   84             try:
   85                 output = dispatch_error(self, func, None, e,
*args, **kw)
restart_transaction = <function restart_transaction at 0x02CE7FB0>
 D:\svn\main\projects\RadSpeed\web\radspeed-TG1.0\<string> in
restart_transaction(args=1)

 C:\python25\lib\site-packages\turbogears-1.0.4b3-py2.5.egg\turbogears
\database.py in sa_restart_transaction(args=1)
  436         req.sa_transaction.rollback()
  437     session.clear()
  438     req.sa_transaction = make_sa_transaction(session)
  439
  440 def sa_tr_active(tr):
req = <cherrypy._cphttptools.Request object at 0x037F5D10>,
req.sa_transaction = <sqlalchemy.orm.scoping.ScopedSession object at
0x02CE6CB0>, global make_sa_transaction = <function
make_sa_transaction at 0x02CEE4F0>, global session =
<sqlalchemy.orm.scoping.ScopedSession object at 0x02CE6CB0>
 C:\python25\lib\site-packages\turbogears-1.0.4b3-py2.5.egg\turbogears
\database.py in
make_sa_transaction(session=<sqlalchemy.orm.scoping.ScopedSession
object at 0x02CE6CB0>)
  454     else:
  455         # SA 0.4
  456         session.begin()
  457         return session
  458
session = <sqlalchemy.orm.scoping.ScopedSession object at 0x02CE6CB0>,
session.begin = <bound method ScopedSession.do of
<sqlalchemy.orm.scoping.ScopedSession object at 0x02CE6CB0>>
 c:\python25\lib\site-packages\SQLAlchemy-0.4.4-py2.5.egg\sqlalchemy
\orm\scoping.py in do(self=<sqlalchemy.orm.scoping.ScopedSession
object at 0x02CE6CB0>, *args=(), **kwargs={})
   96 def instrument(name):
   97     def do(self, *args, **kwargs):
   98         return getattr(self.registry(), name)(*args, **kwargs)
   99     return do
  100 for meth in ('get', 'load', 'close', 'save', 'commit', 'update',
'save_or_update', 'flush', 'query', 'delete', 'merge', 'clear',
'refresh', 'expire', 'expunge', 'rollback', 'begin', 'begin_nested',
'connection', 'execute', 'scalar', 'get_bind', 'is_modified',
'__contains__', '__iter__'):
builtin getattr = <built-in function getattr>, self =
<sqlalchemy.orm.scoping.ScopedSession object at 0x02CE6CB0>,
self.registry = <sqlalchemy.util.ScopedRegistry object at 0x02CE6CD0>,
name = 'begin', args = (), kwargs = {}
 c:\python25\lib\site-packages\SQLAlchemy-0.4.4-py2.5.egg\sqlalchemy
\orm\session.py in begin(self=<sqlalchemy.orm.session.Session object
at 0x03521B10>, **kwargs={})
  487
  488         if self.transaction is not None:
  489             self.transaction = self.transaction._begin(**kwargs)
  490         else:
  491             self.transaction = SessionTransaction(self,
**kwargs)
self = <sqlalchemy.orm.session.Session object at 0x03521B10>,
self.transaction = None, self.transaction._begin undefined, kwargs =
{}
 c:\python25\lib\site-packages\SQLAlchemy-0.4.4-py2.5.egg\sqlalchemy
\orm\session.py in
_begin(self=<sqlalchemy.orm.session.SessionTransaction object at
0x03A7B530>, **kwargs={})
  169
  170     def _begin(self, **kwargs):
  171         self._assert_is_active()
  172         return SessionTransaction(self.session, self, **kwargs)
  173
self = <sqlalchemy.orm.session.SessionTransaction object at
0x03A7B530>, self._assert_is_active = <bound method
SessionTransaction._assert_is_acti...session.SessionTransaction object
at 0x03A7B530>>
 c:\python25\lib\site-packages\SQLAlchemy-0.4.4-py2.5.egg\sqlalchemy
\orm\session.py in
_assert_is_active(self=<sqlalchemy.orm.session.SessionTransaction
object at 0x03A7B530>)
  157         self._assert_is_open()
  158         if not self._active:
  159             raise exceptions.InvalidRequestError("The
transaction is inactive due to a rollback in a subtransaction and
should be closed")
  160
  161     def _assert_is_open(self):
global exceptions = <module 'sqlalchemy.exceptions' from 'C:
\python2...chemy-0.4.4-py2.5.egg\sqlalchemy\exceptions.pyc'>,
exceptions.InvalidRequestError = <class
'sqlalchemy.exceptions.InvalidRequestError'>
<class 'sqlalchemy.exceptions.InvalidRequestError'>: ('The transaction
is inactive due to a rollback in a subtransaction and should be
closed', <bound method Admin.deletestudy of
<radspeed.controllers.Admin instance at 0x0310AC38>>)
      args = ('The transaction is inactive due to a rollback in a
subtransaction and should be closed', <bound method Admin.deletestudy
of <radspeed.controllers.Admin instance at 0x0310AC38>>)
      message = 'The transaction is inactive due to a rollback in a
subtransaction and should be closed'



Thanks
Abhishek

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to